Message ID | 4E8F91A0.2030600@oracle.com |
---|---|
State | New |
Headers | show |
On 10/08/2011 12:56 AM, Paolo Carlini wrote: > The fix seems easy: output a cloned destructor only once (+ output any > other member functions normally). > + static bool done_cloned_dest = false; This seems like it will only complain once per translation unit about virtual destructors. How about instead of this flag, we look at which variant it is and only complain about one of them, perhaps the base? Jason
Hi, > This seems like it will only complain once per translation unit about virtual destructors. Oops, sorry, but this specific issue could be solved rather easily by not using a static, right? > How about instead of this flag, we look at which variant it is and only complain about one of them, perhaps the base? Yes, isn't simply not using a static a rather straightforward alternative? Paolo
> Yes, isn't simply not using a static a rather straightforward alternative?
Ok, now I see: since it's easy, better avoid using *any* sort of flag, I'll do it.
Paolo
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. */