diff options
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/20020213-1.c')
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20020213-1.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/20020213-1.c b/gcc/testsuite/gcc.c-torture/execute/20020213-1.c new file mode 100644 index 000000000..f9fefee26 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20020213-1.c @@ -0,0 +1,34 @@ +/* PR c/5681 + This testcase failed on IA-32 at -O0, because safe_from_p + incorrectly assumed it is safe to first write into a.a2 b-1 + and then read the original value from it. */ + +int bar (float); + +struct A { + float a1; + int a2; +} a; + +int b; + +void foo (void) +{ + a.a2 = bar (a.a1); + a.a2 = a.a2 < b - 1 ? a.a2 : b - 1; + if (a.a2 >= b - 1) + abort (); +} + +int bar (float x) +{ + return 2241; +} + +int main() +{ + a.a1 = 1.0f; + b = 3384; + foo (); + return 0; +} |