typeck2.c (abstract_virtual_errors): Reword diagnostics, make them appear at the...
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>
Fri, 11 Jun 2004 03:11:07 +0000 (03:11 +0000)
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>
Fri, 11 Jun 2004 03:11:07 +0000 (03:11 +0000)
* typeck2.c (abstract_virtual_errors): Reword diagnostics, make them
appear at the correct location.

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

From-SVN: r82957

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 278e4d4a2230384a936250955fccd33af1a98d58..6ab2a7a5ce7226d5322cde947c9bcf29c7fa4526 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 2c6b843a7f08560ad4c4bbc8f052e80d2a023b29..5bf6d144cf162ccec5bd0f3791ee56d118d66d19 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 b8514dc0cd9ae69d44cac38b8f29c077e9df129f..d54502a9aad34408c843783f4755965874d47ea8 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 fbf20766fcf471c0974e77acf48498c3c8b3d752..a03d2e9d53ecd6c66347f64bff2de149842b1ca3 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 6496fc9aff115c6b085d9b51831f470f4603d196..f47d3dbf7a02ee76fd5e5ad4462d3a604bacc9aa 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 &);