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.  */

Reply via email to