diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C new file mode 100644 index 000000000..00c368e63 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-ipa-cp" } */ + +struct data { + data(int); +}; + +struct top { + virtual int topf(); +}; + +struct intermediate: top { + int topf() /* override */ { return 0; } +}; + +struct child1: top { + void childf() + { + data d(topf()); + } +}; + +struct child2: intermediate {}; + +void test(top& t) +{ + child1& c = static_cast<child1&>(t); + c.childf(); + child2 d; + test(d); +} + +/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */ +/* { dg-final { cleanup-ipa-dump "cp" } } */ |