diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/ipa')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.dg/ipa/PR64559.c | 39 | ||||
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr61986.c | 48 | ||||
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr63551.c | 33 | ||||
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr64041.c | 64 |
4 files changed, 184 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/ipa/PR64559.c b/gcc-4.9/gcc/testsuite/gcc.dg/ipa/PR64559.c new file mode 100644 index 000000000..463afdc26 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.dg/ipa/PR64559.c @@ -0,0 +1,39 @@ +/* { dg-do compile } */ +/* { dg-options "-Os" } */ + +int a, b, c, d; + +struct S +{ + int f0; +}; + +static int +fn1 (int p) +{ + return p == 0 || a; +} + +static int +fn2 () +{ + d = fn1 (c); + return 0; +} + +static int +fn3 (struct S p) +{ + p.f0 || fn2 (); + if (fn1 (1)) + b = 0; + return 0; +} + +int +main () +{ + struct S e = { 1 }; + fn3 (e); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr61986.c b/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr61986.c new file mode 100644 index 000000000..8d2f658b8 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr61986.c @@ -0,0 +1,48 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +int a, b, c; + +struct S +{ + int f0; + int f1; +} d; + +static int fn2 (struct S); +void fn3 (struct S); + +void +fn1 (struct S p) +{ + struct S h = { 0, 0 }; + fn3 (p); + fn2 (h); +} + +int +fn2 (struct S p) +{ + struct S j = { 0, 0 }; + fn3 (p); + fn2 (j); + return 0; +} + +void +fn3 (struct S p) +{ + for (; b; a++) + c = p.f0; + fn1 (d); +} + +void +fn4 () +{ + for (;;) + { + struct S f = { 0, 0 }; + fn1 (f); + } +} diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr63551.c b/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr63551.c new file mode 100644 index 000000000..48b020aee --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr63551.c @@ -0,0 +1,33 @@ +/* { dg-do run } */ +/* { dg-options "-Os" } */ + +union U +{ + unsigned int f0; + int f1; +}; + +int a, d; + +void +fn1 (union U p) +{ + if (p.f1 <= 0) + if (a) + d = 0; +} + +void +fn2 () +{ + d = 0; + union U b = { 4294967286U }; + fn1 (b); +} + +int +main () +{ + fn2 (); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr64041.c b/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr64041.c new file mode 100644 index 000000000..4877b4b68 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.dg/ipa/pr64041.c @@ -0,0 +1,64 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +int printf (const char *, ...); + +int a, b = 1, d; + +union U1 +{ + unsigned int f0; + int f1; +}; + +union U2 +{ + int f2; + int f3; +} c; + +int +fn1 (int p) +{ + int t = p && a || p && a && p; + return t ? t : a; +} + +unsigned +fn2 (union U1 p1, union U2 p2) +{ + if (p1.f1 <= 0) + { + for (; p2.f2;) + c.f2 = 0; + p2.f2 = fn1 (d); + } + return p2.f3; +} + +int g = 0; + +int +foo () +{ + if (b) + { + union U1 f = { 0xFFFFFFFFU }; + + fn2 (f, c); + } + g = 1; + return 0; +} + + +int +main () +{ + foo (); + + if (g == 0) + __builtin_abort (); + + return 0; +} |