[Bug c++/90909] [10 Regression] call devirtualized to pure virtual
paolo.carlini at oracle dot com
gcc-bugzilla@gcc.gnu.org
Tue Jun 18 15:18:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90909
--- Comment #2 from Paolo Carlini <paolo.carlini at oracle dot com> ---
I think the below tweak of r271490 should be fine, it considers the bases only
when the fn isn't pure virtual:
Index: call.c
===================================================================
--- call.c (revision 272410)
+++ call.c (working copy)
@@ -8244,7 +8244,9 @@ build_over_call (struct z_candidate *cand, int fla
/* See if the function member or the whole class type is declared
final and the call can be devirtualized. */
if (DECL_FINAL_P (fn)
- || CLASSTYPE_FINAL (TREE_TYPE (argtype)))
+ || CLASSTYPE_FINAL (TYPE_METHOD_BASETYPE (TREE_TYPE (fn)))
+ || (CLASSTYPE_FINAL (TREE_TYPE (argtype))
+ && !DECL_PURE_VIRTUAL_P (fn)))
flags |= LOOKUP_NONVIRTUAL;
/* [class.mfct.nonstatic]: If a nonstatic member function of a class
More information about the Gcc-bugs
mailing list