diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C new file mode 100644 index 000000000..7fd0bf5f5 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-ipa-whole-program" } */ +double foo (); +struct B +{ + bool b1 () { return b3 (); } + void b2 (); + virtual bool b3 (); +}; +struct C +{ + C () {} + bool + c1 (float x, float y) + { + if (x != c3 || y != c4) + c2.b2 (); + return c2.b1 (); + } + B c2; + float c3, c4; +}; + +void +bar () +{ + static C c; + c.c1 (60, (int) foo ()); +} +/* We optimize out this call just after early passes. Unfortunately + this unreachable removal is not logged in dump file. */ +/* { dg-final { scan-ipa-dump-not "OBJ_TYPE_REF" "whole-program" } } */ +/* { dg-final { cleanup-ipa-dump "whole-program" } } */ |