[C++ Patch] PR 90909 ("[10 Regression] call devirtualized to pure virtual")
Fri Jun 21 18:50:00 GMT 2019
On 6/20/19 12:24 AM, Paolo Carlini wrote:
> this bug notices that the more aggressive de-virtualization check that
> we have now in place (fixed c++/67184) doesn't work correctly for the
> below reproducer, which involves a pure virtual: we de-virtualize and
> the build fails at link-time. To cure this I believe we simply want an
> additional DECL_PURE_VIRTUAL_P in the condition.
I don't see why this bug would be specific to pure virtual functions, so
the fix also should not be. If S1::f is not pure virtual, I'd expect
that we wrongly devirtualize to it in the same way.
Devirtualizing the call in S4 is a good optimization, we're just
selecting the wrong function.
It seems like the issue here is that the using-declaration hides the
final overrider from lookup. So we need to work harder to find the
actual final overrider, perhaps by looking into the argtype vtable.
More information about the Gcc-patches