aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2003-03-21 15:42:36 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2003-03-21 15:42:36 +0000
commitf3146d75a925306d35d582c3c927d06ce93aa03d (patch)
tree3e7d8b64875f583eb668a0b9ec42505d04c42847 /gcc
parent526278c97fe19c97ce04c66238127097fe4da76b (diff)
downloadgcc-f3146d75a925306d35d582c3c927d06ce93aa03d.zip
gcc-f3146d75a925306d35d582c3c927d06ce93aa03d.tar.gz
gcc-f3146d75a925306d35d582c3c927d06ce93aa03d.tar.bz2
re PR c++/9898 (Template reference cast operator of template class)
cp: PR c++/9898 * error.c (dump_decl) [CONST_DECL]: Print '<enumerator>'. (dump_expr) [CONSTRUCTOR]: Print default ctor as a function call. testsuite: PR c++/9898 * g++.dg/other/error4.C: New test. From-SVN: r64667
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/error.c18
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/other/error4.C15
4 files changed, 40 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9b0eaf1..2546ea1 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2003-03-21 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9898
+ * error.c (dump_decl) [CONST_DECL]: Print '<enumerator>'.
+ (dump_expr) [CONSTRUCTOR]: Print default ctor as a function call.
+
2003-03-20 Mark Mitchell <mark@codesourcery.com>
* cp/decl2.c (arg_assoc_class): Correct check for namespace-scope
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 42a7ff7..e687ac0 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -971,7 +971,7 @@ dump_decl (tree t, int flags)
else if (DECL_INITIAL (t))
dump_expr (DECL_INITIAL (t), flags | TFF_EXPR_IN_PARENS);
else
- print_identifier (scratch_buffer, "enumerator");
+ print_identifier (scratch_buffer, "<enumerator>");
break;
case USING_DECL:
@@ -1844,9 +1844,19 @@ dump_expr (tree t, int flags)
}
}
}
- output_add_character (scratch_buffer, '{');
- dump_expr_list (CONSTRUCTOR_ELTS (t), flags);
- output_add_character (scratch_buffer, '}');
+ if (TREE_TYPE (t) && !CONSTRUCTOR_ELTS (t))
+ {
+ dump_type (TREE_TYPE (t), 0);
+ output_add_character (scratch_buffer, '(');
+ output_add_character (scratch_buffer, ')');
+ }
+ else
+ {
+ output_add_character (scratch_buffer, '{');
+ dump_expr_list (CONSTRUCTOR_ELTS (t), flags);
+ output_add_character (scratch_buffer, '}');
+ }
+
break;
case OFFSET_REF:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a76454b..9bda0cd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-03-21 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9898
+ * g++.dg/other/error4.C: New test.
+
2003-03-20 Mark Mitchell <mark@codesourcery.com>
* g++.dg/template/friend17.C: New test.
diff --git a/gcc/testsuite/g++.dg/other/error4.C b/gcc/testsuite/g++.dg/other/error4.C
new file mode 100644
index 0000000..39a612b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/error4.C
@@ -0,0 +1,15 @@
+// { dg-do compile }
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 21 Mar 2003 <nathan@codesourcery.com>
+
+// PR 9898. Confusing error message
+
+struct Wrapper {};
+
+void Foo(int const &); // { dg-error "in passing" "" }
+
+void Baz ()
+{
+ Foo (Wrapper ()); // { dg-error "convert `Wrapper *\\(\\)' to" "" }
+}