| // PR c++/58678 | |
| // { dg-do compile } | |
| // { dg-options "-O3 -fdump-ipa-devirt" } | |
| // We shouldn't speculatively devirtualize to ~B because B is an abstract | |
| // class; any actual object passed to f will be of some derived class which | |
| // has its own destructor. | |
| struct A | |
| { | |
| virtual void f() = 0; | |
| virtual ~A(); | |
| }; | |
| struct B : A | |
| { | |
| virtual ~B() {} | |
| }; | |
| void f(B* b) | |
| { | |
| delete b; | |
| } | |
| // { dg-final { scan-ipa-dump-not "Speculatively devirtualizing" "devirt" } } |