Hi,
this diagnostic PR is about duplicate inform messages for this kind of
testcase, where C has a cloned destructor:
class A {};
struct C : A
{
virtual ~C () = 0;
} c;
The fix seems easy: output a cloned destructor only once (+ output any
other member functions normally). Patch tested x86_64-linux for regressions.
Ok?
Thanks,
Paolo.
///////////////////////
2011-10-07 Paolo Carlini <paolo.carl...@oracle.com>
PR c++/34927
* typeck2.c (abstract_virtuals_error_sfinae): Don't produce duplicate
inform messages in case of cloned destructor.
Index: typeck2.c
===================================================================
--- typeck2.c (revision 179660)
+++ typeck2.c (working copy)
@@ -340,7 +340,17 @@ abstract_virtuals_error_sfinae (tree decl, tree ty
type);
FOR_EACH_VEC_ELT (tree, pure, ix, fn)
- inform (input_location, "\t%+#D", fn);
+ {
+ static bool done_cloned_dest = false;
+
+ bool is_cloned_dest = DECL_CLONED_FUNCTION_P (fn);
+ if (! is_cloned_dest || ! done_cloned_dest)
+ inform (input_location, "\t%+#D", fn);
+
+ if (is_cloned_dest)
+ done_cloned_dest = true;
+ }
+
/* Now truncate the vector. This leaves it non-null, so we know
there are pure virtuals, but empty so we don't list them out
again. */