Commit da291c87 by Giovanni Bajo

typeck2.c (abstract_virtual_errors): Reword diagnostics, make them appear at the correct location.

	* 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
parent 57ab9ac2
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> 2004-06-10 Jason Merrill <jason@redhat.com>
PR c++/15875 PR c++/15875
......
...@@ -149,34 +149,41 @@ abstract_virtuals_error (tree decl, tree type) ...@@ -149,34 +149,41 @@ abstract_virtuals_error (tree decl, tree type)
return 0; return 0;
if (TREE_CODE (decl) == VAR_DECL) if (TREE_CODE (decl) == VAR_DECL)
error ("cannot declare variable `%D' to be of type `%T'", cp_error_at ("cannot declare variable `%+D' to be of abstract "
decl, type); "type `%T'", decl, type);
else if (TREE_CODE (decl) == PARM_DECL) else if (TREE_CODE (decl) == PARM_DECL)
error ("cannot declare parameter `%D' to be of type `%T'", cp_error_at ("cannot declare parameter `%+D' to be of abstract "
decl, type); "type `%T'", decl, type);
else if (TREE_CODE (decl) == FIELD_DECL) else if (TREE_CODE (decl) == FIELD_DECL)
error ("cannot declare field `%D' to be of type `%T'", cp_error_at ("cannot declare field `%+D' to be of abstract "
decl, type); "type `%T'", decl, type);
else if (TREE_CODE (decl) == FUNCTION_DECL else if (TREE_CODE (decl) == FUNCTION_DECL
&& TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE) && 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) 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 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. */ /* Only go through this once. */
if (TREE_PURPOSE (u) == NULL_TREE) if (TREE_PURPOSE (u) == NULL_TREE)
{ {
TREE_PURPOSE (u) = error_mark_node; 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)) 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 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; return 1;
} }
......
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> 2004-06-10 Brian Booth <bbooth@redhat.com>
* gcc.dg/tree-ssa/20031015-1.c: Scan for * gcc.dg/tree-ssa/20031015-1.c: Scan for
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
// We should not allow arrays of abstract type. [class.abstract/2] // We should not allow arrays of abstract type. [class.abstract/2]
struct cow_t { struct cow_t { // { dg-error "" } note
virtual void f()=0; // { dg-error "" } abstract virtual void f()=0; // { dg-error "" } pure
}; };
......
...@@ -17,7 +17,7 @@ public: ...@@ -17,7 +17,7 @@ public:
}; };
class some_derived : public some_base class some_derived : public some_base
{ { // { dg-error "" } note
public: public:
class derived_func_args; class derived_func_args;
void func(derived_func_args &); void func(derived_func_args &);
......
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