diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/torture')
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr49518.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr56661.c | 46 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr56689.c | 46 |
3 files changed, 93 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/pr49518.c b/gcc/testsuite/gcc.dg/torture/pr49518.c index 84a10fbbeeb..55761fd6108 100644 --- a/gcc/testsuite/gcc.dg/torture/pr49518.c +++ b/gcc/testsuite/gcc.dg/torture/pr49518.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-options "-Wno-aggressive-loop-optimizations" } */ int a, b; struct S { unsigned int s, t, u; } c, d = { 0, 1, 0 }; diff --git a/gcc/testsuite/gcc.dg/torture/pr56661.c b/gcc/testsuite/gcc.dg/torture/pr56661.c new file mode 100644 index 00000000000..6fdaedb3176 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr56661.c @@ -0,0 +1,46 @@ +/* { dg-do run } */ + +__attribute__((noinline, noclone)) void +bar (int *b) +{ + b[0] = b[1] = b[2] = 1; +} + +__attribute__((noinline, noclone)) int +baz (int x) +{ + if (x != 1) + __builtin_abort (); +} + +void +foo (int x) +{ + if (x == 0) + { + int *b = __builtin_malloc (3 * sizeof (int)); + while (b[0]) + ; + } + else if (x == 1) + { + int i, j; + int *b = __builtin_malloc (3 * sizeof (int)); + for (i = 0; i < 2; i++) + { + bar (b); + for (j = 0; j < 3; ++j) + baz (b[j]); + baz (b[0]); + } + } +} + +int +main () +{ + int x = 1; + asm volatile ("" : "+r" (x)); + foo (x); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr56689.c b/gcc/testsuite/gcc.dg/torture/pr56689.c new file mode 100644 index 00000000000..719f528c2c0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr56689.c @@ -0,0 +1,46 @@ +/* { dg-do compile } */ + +extern int baz (); +extern void bar (void); +extern void noret (void) __attribute__ ((__noreturn__)); + +void +fix_register (const char *name, int fixed, int call_used, int nregs) +{ + int i; + int reg; + + if ((reg = baz ()) >= 0) + { + for (i = reg; i < nregs; i++) + { + if ((i == 15 || i == 11) && (fixed == 0 || call_used == 0)) + { + switch (fixed) + { + case 0: + switch (call_used) + { + case 1: + bar (); + break; + default: + (noret ()); + } + case 1: + switch (call_used) + { + case 1: + break; + case 0: + default: + (noret ()); + } + break; + default: + (noret ()); + } + } + } + } +} |