| // devirt.cc |
| /* { dg-options "-O2 -fdump-ipa-profile_estimate -fdump-tree-optimized" } */ |
| |
| class A { |
| public: |
| virtual int foo() { |
| return 1; |
| } |
| |
| int i; |
| }; |
| |
| class B : public A |
| { |
| public: |
| virtual int foo() { |
| return 2; |
| } |
| |
| int b; |
| } ; |
| |
| |
| int main() |
| { |
| int i; |
| |
| A* ap = 0; |
| |
| for (i = 0; i < 1000000; i++) |
| { |
| |
| if (i%7==0) |
| { |
| ap = new A(); |
| } |
| else |
| ap = new B(); |
| |
| ap->foo(); |
| |
| delete ap; |
| |
| } |
| |
| return 0; |
| |
| } |
| /* { dg-final-use { scan-ipa-dump "Indirect call -> direct call" "profile_estimate" } } */ |
| /* { dg-final-use { scan-tree-dump-not "OBJ_TYPE_REF" "optimized" } } */ |