aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/ipa
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/ipa')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C23
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C2
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C4
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61085.C33
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-1.C31
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-2.C43
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-3.C37
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61540.C38
10 files changed, 211 insertions, 6 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C
index ca8ea4cc2..e31832b87 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-inline -fno-devirtualize-speculatively" } */
+/* { dg-options "-O2 -fdump-ipa-inline --param=early-inlining-insns-comdat=0 -fno-devirtualize-speculatively" } */
int baz ();
struct A
{
@@ -45,5 +45,5 @@ bar ()
/* While inlining function called once we should devirtualize a new call to fn2
and two to fn3. While doing so the new symbol for fn2 needs to be
introduced. */
-/* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 1 "inline" } } */
+/* { dg-final { scan-ipa-dump "Discovered a virtual call to a known target" "inline" } } */
/* { dg-final { cleanup-ipa-dump "inline" } } */
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C
index 751647957..1da44f5d1 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C
@@ -22,5 +22,5 @@ void dpr_run(ebs_Object& objectA) {
dpr_Job jobL;
dpr_run(jobL);
}
-/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */
+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp" } } */
/* { dg-final { cleanup-ipa-dump "cp" } } */
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C
new file mode 100644
index 000000000..64c44ba1e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C
@@ -0,0 +1,23 @@
+/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline" } */
+#include <new>
+
+class EmbeddedObject {
+public:
+ virtual int val() { return 2; }
+};
+
+class Container {
+ alignas(EmbeddedObject) char buffer[sizeof(EmbeddedObject)];
+public:
+ EmbeddedObject *obj() { return (EmbeddedObject*)buffer; }
+ Container() { new (buffer) EmbeddedObject(); }
+};
+
+Container o;
+
+int main()
+{
+ __builtin_printf("%d\n", o.obj()->val());
+}
+/* { dg-final { scan-ipa-dump-not "__builtin_unreachable" "inline" } } */
+/* { dg-final { cleanup-ipa-dump "inline" } } */
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
index 7fd0bf5f5..dc6c6c940 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-whole-program" } */
+/* { dg-options "-O2 -fdump-ipa-whole-program --param=early-inlining-insns-comdat=0" } */
double foo ();
struct B
{
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C
index 00c368e63..b9039cb85 100644
--- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C
@@ -14,7 +14,7 @@ struct intermediate: top {
};
struct child1: top {
- void childf()
+ __attribute__((noinline)) void childf()
{
data d(topf());
}
@@ -30,5 +30,5 @@ void test(top& t)
test(d);
}
-/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */
+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp" } } */
/* { dg-final { cleanup-ipa-dump "cp" } } */
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61085.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61085.C
new file mode 100644
index 000000000..531f59d53
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61085.C
@@ -0,0 +1,33 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-early-inlining" } */
+
+struct A {};
+struct B : virtual A {
+ unsigned m_i;
+ B() : m_i () {}
+ virtual A *m_virt ()
+ {
+ return 0;
+ }
+ ~B ()
+ {
+ m_foo ();
+ while (m_i)
+ ;
+ }
+ void m_foo ()
+ {
+ m_virt ();
+ }
+};
+
+class C : B {
+ A *m_virt () {
+ __builtin_abort ();
+ }
+};
+
+int main ()
+{
+ C c;
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-1.C
new file mode 100644
index 000000000..a0fbb5f42
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-1.C
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+struct CBase {
+ virtual void BaseFunc () {}
+};
+
+struct MMixin {
+ virtual void * MixinFunc (int, void *) = 0;
+};
+
+struct CExample: CBase, public MMixin
+{
+ void *MixinFunc (int arg, void *arg2)
+ {
+ if (arg != 1 || arg2)
+ return 0;
+ return this;
+ }
+};
+
+void *test (MMixin & anExample)
+{
+ return anExample.MixinFunc (1, 0);
+}
+
+int main ()
+{
+ CExample c;
+ return (test (c) != &c);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-2.C
new file mode 100644
index 000000000..1011bd1ef
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-2.C
@@ -0,0 +1,43 @@
+/* { dg-do run } */
+/* { dg-options "-O3 --param ipa-cp-eval-threshold=1" } */
+
+extern "C" void abort (void);
+
+struct CBase {
+ virtual void BaseFunc () {}
+};
+
+struct MMixin {
+ virtual void * MixinFunc (int, void *) = 0;
+};
+
+struct CExample: CBase, public MMixin
+{
+ int stuff, magic, more_stuff;
+
+ CExample ()
+ {
+ stuff = 0;
+ magic = 0xbeef;
+ more_stuff = 0;
+ }
+ void *MixinFunc (int arg, void *arg2)
+ {
+ if (arg != 1 || arg2)
+ return 0;
+ if (magic != 0xbeef)
+ abort();
+ return this;
+ }
+};
+
+void *test (MMixin & anExample)
+{
+ return anExample.MixinFunc (1, 0);
+}
+
+int main ()
+{
+ CExample c;
+ return (test (c) != &c);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-3.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-3.C
new file mode 100644
index 000000000..8184ec2cd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61160-3.C
@@ -0,0 +1,37 @@
+/* { dg-do run } */
+/* { dg-options "-O3" } */
+
+struct A {
+ void *p;
+ A (void *q) : p (q) {}
+ A (const A &) : p () {}
+};
+
+struct CBase {
+ virtual void BaseFunc () {}
+};
+
+struct MMixin {
+ virtual A MixinFunc (int, A) = 0;
+};
+
+struct CExample: CBase, public MMixin
+{
+ A MixinFunc (int arg, A arg2)
+ {
+ if (arg != 1 || arg2.p)
+ return 0;
+ return this;
+ }
+};
+
+void *test (MMixin & anExample)
+{
+ return anExample.MixinFunc (1, (0)).p;
+}
+
+int main ()
+{
+ CExample c;
+ return (test (c) != &c);
+}
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61540.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61540.C
new file mode 100644
index 000000000..e7dee7262
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61540.C
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fno-early-inlining" } */
+
+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);
+}
+
+int main (int argc, char **argv)
+{
+ child1 c;
+ test (c);
+ return 0;
+}