aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2013-09-01 19:06:40 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2013-09-01 17:06:40 +0000
commit0adad9c5b470715ead5e012b9114cc87198531fd (patch)
treea07c87ff172dab4fda1c15ce99c5f0c6781229e2 /gcc
parentd775b5ea3b3322dbbb0272163f6606b04ea00884 (diff)
downloadgcc-0adad9c5b470715ead5e012b9114cc87198531fd.zip
gcc-0adad9c5b470715ead5e012b9114cc87198531fd.tar.gz
gcc-0adad9c5b470715ead5e012b9114cc87198531fd.tar.bz2
* g++.dg/ipa/devirt-15.C: New testcase.
From-SVN: r202153
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/ipa/devirt-15.C40
2 files changed, 44 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c42a3da..7ff5882 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2013-09-01 Jan Hubicka <jh@suse.cz>
+
+ * g++.dg/ipa/devirt-15.C: New testcase.
+
2013-09-01 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/linker_alias.ads: Skip on Darwin.
diff --git a/gcc/testsuite/g++.dg/ipa/devirt-15.C b/gcc/testsuite/g++.dg/ipa/devirt-15.C
new file mode 100644
index 0000000..f9cd3ae
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/devirt-15.C
@@ -0,0 +1,40 @@
+/* Check that we speculatively devirutalize call to FOO to B::foo becuase
+ A is noreturn. */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-ipa-devirt" } */
+class A {
+public:
+ virtual int foo(void)
+ {
+ throw (1);
+ return 0;
+ }
+};
+
+
+class B : public A {
+public:
+ virtual int foo(void);
+};
+
+int
+B::foo(void)
+{
+ return 1;
+}
+class A a, *b=&a;
+void
+m(void)
+{
+ b->foo();
+}
+main()
+{
+ m();
+}
+
+/* { dg-final { scan-ipa-dump "Speculatively devirtualizing call" "devirt"} } */
+/* { dg-final { cleanup-ipa-dump "devirt" } } */
+/* Match if (PROF_6 == foo) to verify that the speculation survived. */
+/* { dg-final { scan-tree-dump "== foo" "optimized"} } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */