| /* No devirtualization happens here, but A::foo should not end up as reachable |
| because the constructor of A is unreachable and therefore the virtual |
| method table referring to A::foo is optimized out. */ |
| /* { dg-do run } */ |
| /* { dg-options "-O2 -fdump-tree-ssa" } */ |
| class B { |
| public: |
| virtual int foo(void) |
| { |
| return 0; |
| } |
| }; |
| namespace { |
| class A : public B { |
| public: |
| virtual int foo(void) |
| { |
| return 1; |
| } |
| }; |
| } |
| class B a, *b=&a; |
| |
| int main() |
| { |
| if (0) |
| { |
| class A a; |
| a.foo(); |
| } |
| return b->foo(); |
| } |
| |
| /* { dg-final { scan-tree-dump-not "A::foo" "ssa"} } */ |