From 30f5fc6a42fc44574d7816a686599b0dec2df177 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 27 Nov 2013 18:03:27 +0100 Subject: [PATCH] re PR tree-optimization/59014 (wrong code at -Os and above on x86_64-linux-gnu) PR tree-optimization/59014 * gcc.c-torture/execute/pr59014-2.c: New test. From-SVN: r205454 --- gcc/testsuite/ChangeLog | 5 ++++ .../gcc.c-torture/execute/pr59014-2.c | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr59014-2.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cc389d4dc39..613f0306da5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-11-27 Jakub Jelinek + + PR tree-optimization/59014 + * gcc.c-torture/execute/pr59014-2.c: New test. + 2013-11-27 Paolo Carlini PR c++/58647 diff --git a/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c b/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c new file mode 100644 index 00000000000..18da0059eab --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c @@ -0,0 +1,23 @@ +/* PR tree-optimization/59014 */ + +__attribute__((noinline, noclone)) long long int +foo (long long int x, long long int y) +{ + if (((int) x | (int) y) != 0) + return 6; + return x + y; +} + +int +main () +{ + if (sizeof (long long) == sizeof (int)) + return 0; + int shift_half = sizeof (int) * __CHAR_BIT__ / 2; + long long int x = (3LL << shift_half) << shift_half; + long long int y = (5LL << shift_half) << shift_half; + long long int z = foo (x, y); + if (z != ((8LL << shift_half) << shift_half)) + __builtin_abort (); + return 0; +}