| /* We shall devirtualize to B::foo since it is the only live candidate of an |
| anonymous type. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-ipa-whole-program-details" } */ |
| namespace { |
| class B { |
| public: |
| virtual int foo(void) |
| { |
| return 0; |
| } |
| }; |
| class A : public B { |
| public: |
| virtual int foo(void) |
| { |
| return 1; |
| } |
| }; |
| } |
| class B *b; |
| void get_me_lost (void *); |
| int main() |
| { |
| int c; |
| if (c) |
| { |
| class A a; |
| a.foo(); |
| } |
| else |
| { |
| b = new (class B); |
| b->foo(); |
| get_me_lost ((void *)&b); |
| } |
| return b->foo(); |
| } |
| |
| /* { dg-final { scan-ipa-dump-not "builtin_unreachable" "whole-program"} } */ |
| /* { dg-final { scan-ipa-dump "B::foo" "whole-program"} } */ |
| /* { dg-final { scan-ipa-dump-not "A::foo" "whole-program"} } */ |