Commit ca17c07b by Paolo Carlini Committed by Paolo Carlini

re PR c++/45487 (Request to change comma to semicolon in error message)

/cp
2011-09-26  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/45487
	* error.c (dump_template_bindings): Separate bindings with semicolons
	instead of commas.

/testsuite
2011-09-26  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/45487
	* g++.dg/diagnostic/bindings1.C: New.
	* g++.old-deja/g++.pt/memtemp77.C: Adjust.

From-SVN: r179226
parent ab02e565
2011-09-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/45487
* error.c (dump_template_bindings): Separate bindings with semicolons
instead of commas.
2011-09-26 Jason Merrill <jason@redhat.com> 2011-09-26 Jason Merrill <jason@redhat.com>
PR c++/50512 PR c++/50512
......
...@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3. If not see
#include "c-family/c-objc.h" #include "c-family/c-objc.h"
#define pp_separate_with_comma(PP) pp_cxx_separate_with (PP, ',') #define pp_separate_with_comma(PP) pp_cxx_separate_with (PP, ',')
#define pp_separate_with_semicolon(PP) pp_cxx_separate_with (PP, ';')
/* The global buffer where we dump everything. It is there only for /* The global buffer where we dump everything. It is there only for
transitional purpose. It is expected, in the near future, to be transitional purpose. It is expected, in the near future, to be
...@@ -259,7 +260,7 @@ dump_template_parameter (tree parm, int flags) ...@@ -259,7 +260,7 @@ dump_template_parameter (tree parm, int flags)
static void static void
dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames) dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames)
{ {
int need_comma = 0; bool need_semicolon = false;
int i; int i;
tree t; tree t;
...@@ -283,8 +284,8 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames) ...@@ -283,8 +284,8 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames)
if (lvl_args && NUM_TMPL_ARGS (lvl_args) > arg_idx) if (lvl_args && NUM_TMPL_ARGS (lvl_args) > arg_idx)
arg = TREE_VEC_ELT (lvl_args, arg_idx); arg = TREE_VEC_ELT (lvl_args, arg_idx);
if (need_comma) if (need_semicolon)
pp_separate_with_comma (cxx_pp); pp_separate_with_semicolon (cxx_pp);
dump_template_parameter (TREE_VEC_ELT (p, i), TFF_PLAIN_IDENTIFIER); dump_template_parameter (TREE_VEC_ELT (p, i), TFF_PLAIN_IDENTIFIER);
pp_cxx_whitespace (cxx_pp); pp_cxx_whitespace (cxx_pp);
pp_equal (cxx_pp); pp_equal (cxx_pp);
...@@ -301,7 +302,7 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames) ...@@ -301,7 +302,7 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames)
pp_string (cxx_pp, M_("<missing>")); pp_string (cxx_pp, M_("<missing>"));
++arg_idx; ++arg_idx;
need_comma = 1; need_semicolon = true;
} }
parms = TREE_CHAIN (parms); parms = TREE_CHAIN (parms);
...@@ -313,8 +314,8 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames) ...@@ -313,8 +314,8 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames)
FOR_EACH_VEC_ELT (tree, typenames, i, t) FOR_EACH_VEC_ELT (tree, typenames, i, t)
{ {
if (need_comma) if (need_semicolon)
pp_separate_with_comma (cxx_pp); pp_separate_with_semicolon (cxx_pp);
dump_type (t, TFF_PLAIN_IDENTIFIER); dump_type (t, TFF_PLAIN_IDENTIFIER);
pp_cxx_whitespace (cxx_pp); pp_cxx_whitespace (cxx_pp);
pp_equal (cxx_pp); pp_equal (cxx_pp);
......
2011-09-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/45487
* g++.dg/diagnostic/bindings1.C: New.
* g++.old-deja/g++.pt/memtemp77.C: Adjust.
2011-09-26 David S. Miller <davem@davemloft.net> 2011-09-26 David S. Miller <davem@davemloft.net>
* gcc.target/sparc/wrgsr.c: New test. * gcc.target/sparc/wrgsr.c: New test.
......
// PR c++/45487
// { dg-do run }
extern "C" int strcmp(const char*, const char*);
template <typename T>
const char* foo(T, typename T::type c) { return __PRETTY_FUNCTION__; }
struct x {typedef int type;};
int main()
{
if (strcmp (foo(x(), 3), "const char* foo(T, typename T::type) "
"[with T = x; typename T::type = int]") == 0)
return 0;
else
return 1;
}
...@@ -19,7 +19,7 @@ const char* S3<char>::h(int) { return __PRETTY_FUNCTION__; } ...@@ -19,7 +19,7 @@ const char* S3<char>::h(int) { return __PRETTY_FUNCTION__; }
int main() int main()
{ {
if (strcmp (S3<double>::h(7), if (strcmp (S3<double>::h(7),
"static const char* S3<T>::h(U) [with U = int, T = double]") == 0) "static const char* S3<T>::h(U) [with U = int; T = double]") == 0)
return 0; return 0;
else else
return 1; return 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment