OSDN Git Service

* typeck2.c (abstract_virtual_errors): Reword diagnostics, make them
authorgiovannibajo <giovannibajo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Jun 2004 03:11:07 +0000 (03:11 +0000)
committergiovannibajo <giovannibajo@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 11 Jun 2004 03:11:07 +0000 (03:11 +0000)
appear at the correct location.

* g++.old-deja/g++.robertl/eb4.C: Adjust error markers.
* g++.old-deja/g++.other/decl3.C: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82957 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/typeck2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.other/decl3.C
gcc/testsuite/g++.old-deja/g++.robertl/eb4.C

index 278e4d4..6ab2a7a 100644 (file)
@@ -1,3 +1,8 @@
+2004-06-11  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+
+       * typeck2.c (abstract_virtual_errors): Reword diagnostics, make them
+       appear at the correct location.
+
 2004-06-10  Jason Merrill  <jason@redhat.com>
 
        PR c++/15875
index 2c6b843..5bf6d14 100644 (file)
@@ -149,34 +149,41 @@ abstract_virtuals_error (tree decl, tree type)
        return 0;
 
       if (TREE_CODE (decl) == VAR_DECL)
-       error ("cannot declare variable `%D' to be of type `%T'",
-                   decl, type);
+       cp_error_at ("cannot declare variable `%+D' to be of abstract "
+                    "type `%T'", decl, type);
       else if (TREE_CODE (decl) == PARM_DECL)
-       error ("cannot declare parameter `%D' to be of type `%T'",
-                   decl, type);
+       cp_error_at ("cannot declare parameter `%+D' to be of abstract "
+                    "type `%T'", decl, type);
       else if (TREE_CODE (decl) == FIELD_DECL)
-       error ("cannot declare field `%D' to be of type `%T'",
-                   decl, type);
+       cp_error_at ("cannot declare field `%+D' to be of abstract "
+                    "type `%T'", decl, type);
       else if (TREE_CODE (decl) == FUNCTION_DECL
               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
-       error ("invalid return type for member function `%#D'", decl);
+       cp_error_at ("invalid abstract return type for member function `%+#D'",
+                    decl);
       else if (TREE_CODE (decl) == FUNCTION_DECL)
-       error ("invalid return type for function `%#D'", decl);
+       cp_error_at ("invalid abstract return type for function `%+#D'", 
+                    decl);
+      else
+       cp_error_at ("invalid abstract type for `%+D'", decl);
     }
   else
-    error ("cannot allocate an object of type `%T'", type);
+    error ("cannot allocate an object of abstract type `%T'", type);
 
   /* Only go through this once.  */
   if (TREE_PURPOSE (u) == NULL_TREE)
     {
       TREE_PURPOSE (u) = error_mark_node;
 
-      error ("  because the following virtual functions are abstract:");
+      inform ("%J  because the following virtual functions are pure "
+             "within `%T':", TYPE_MAIN_DECL (type), type);
+
       for (tu = u; tu; tu = TREE_CHAIN (tu))
-       cp_error_at ("\t%#D", TREE_VALUE (tu));
+       inform ("%J\t%#D", TREE_VALUE (tu), TREE_VALUE (tu));
     }
   else
-    error ("  since type `%T' has abstract virtual functions", type);
+    inform ("%J  since type `%T' has pure virtual functions", 
+           TYPE_MAIN_DECL (type), type);
 
   return 1;
 }
index b8514dc..d54502a 100644 (file)
@@ -1,3 +1,8 @@
+2004-06-11  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+
+       * g++.old-deja/g++.robertl/eb4.C: Adjust error markers.
+       * g++.old-deja/g++.other/decl3.C: Likewise.
+
 2004-06-10  Brian Booth  <bbooth@redhat.com>
 
        * gcc.dg/tree-ssa/20031015-1.c: Scan for
index fbf2076..a03d2e9 100644 (file)
@@ -6,8 +6,8 @@
 
 // We should not allow arrays of abstract type. [class.abstract/2]
 
-struct cow_t {
-  virtual void f()=0; // { dg-error "" } abstract
+struct cow_t { // { dg-error "" } note
+  virtual void f()=0; // { dg-error "" } pure
 };
 
 
index 6496fc9..f47d3db 100644 (file)
@@ -17,7 +17,7 @@ public:
         };
 
 class some_derived : public some_base
-        {
+        {  // { dg-error "" } note
 public:
         class derived_func_args;
         void func(derived_func_args &);