re PR c++/9898 (Template reference cast operator of template class)
authorNathan Sidwell <nathan@codesourcery.com>
Fri, 21 Mar 2003 15:42:36 +0000 (15:42 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 21 Mar 2003 15:42:36 +0000 (15:42 +0000)
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

gcc/cp/ChangeLog
gcc/cp/error.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/error4.C [new file with mode: 0644]

index 9b0eaf1b39ce1b749bf9058a21a8e977efb029aa..2546ea12fd083cdb7e882478aeff81731310aac2 100644 (file)
@@ -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
index 42a7ff774e99fce6d5c19441fc5ff23851d5a02f..e687ac014b895183daf0385428501820598562f0 100644 (file)
@@ -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:
index a76454bb1c3186d63e2a8787ec196466366f8a27..9bda0cd590d51813a4c71a136e167fcdd27e04e8 100644 (file)
@@ -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 (file)
index 0000000..39a612b
--- /dev/null
@@ -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" "" }
+}