From 38a8aecfb882072900434499696b5c32a2274515 Mon Sep 17 00:00:00 2001 From: Rong Xu Date: Mon, 21 Jul 2014 16:47:22 -0700 Subject: [4.9] Switch gcc-4.9 to use google/gcc-4_9 branch. This source drop uses svn version r212828 of google/gcc-4.9 branch. We also cherry-picked r213062, r213063 and r213064 to fix windows build issues. All gcc-4.9 patches before July 3rd are ported to google/gcc-4.9. The following prior commits has not been merged to google branch yet. (They are included in this commit). e7af147f979e657fe2df00808e5b4319b0e088c6, baf87df3cb2683649ba7e9872362a7e721117c23, and c231900e5dcc14d8296bd9f62b45997a49d4d5e7. Change-Id: I4bea3ea470387ff751c2be4cb0d4a12059b9299b --- .../gcc/testsuite/gcc.c-torture/compile/pr61684.c | 15 +++++++ .../testsuite/gcc.c-torture/execute/20140425-1.c | 23 ++++++++++ .../gcc/testsuite/gcc.c-torture/execute/pr60960.c | 38 ++++++++++++++++ .../testsuite/gcc.c-torture/execute/pr61306-1.c | 39 +++++++++++++++++ .../testsuite/gcc.c-torture/execute/pr61306-2.c | 40 +++++++++++++++++ .../testsuite/gcc.c-torture/execute/pr61306-3.c | 13 ++++++ .../gcc/testsuite/gcc.c-torture/execute/pr61673.c | 50 ++++++++++++++++++++++ .../gcc/testsuite/gcc.c-torture/execute/pr61725.c | 14 ++++++ 8 files changed, 232 insertions(+) create mode 100644 gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr61684.c create mode 100644 gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20140425-1.c create mode 100644 gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr60960.c create mode 100644 gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c create mode 100644 gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c create mode 100644 gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c create mode 100644 gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61673.c create mode 100644 gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61725.c (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture') diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr61684.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr61684.c new file mode 100644 index 000000000..f5b53b73a --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/compile/pr61684.c @@ -0,0 +1,15 @@ +/* PR tree-optimization/61684 */ + +int a, c; +static int *b = 0; +short d; +static short **e = 0; + +void +foo () +{ + for (; c < 1; c++) + ; + *e = &d; + a = d && (c && 1) & *b; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20140425-1.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20140425-1.c new file mode 100644 index 000000000..c447ef95b --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/20140425-1.c @@ -0,0 +1,23 @@ +/* PR target/60941 */ +/* Reported by Martin Husemann */ + +extern void abort (void); + +static void __attribute__((noinline)) +set (unsigned long *l) +{ + *l = 31; +} + +int main (void) +{ + unsigned long l; + int i; + + set (&l); + i = (int) l; + l = (unsigned long)(2U << i); + if (l != 0) + abort (); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr60960.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr60960.c new file mode 100644 index 000000000..b4f08d4c5 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr60960.c @@ -0,0 +1,38 @@ +/* PR tree-optimization/60960 */ + +typedef unsigned char v4qi __attribute__ ((vector_size (4))); + +__attribute__((noinline, noclone)) v4qi +f1 (v4qi v) +{ + return v / 2; +} + +__attribute__((noinline, noclone)) v4qi +f2 (v4qi v) +{ + return v / (v4qi) { 2, 2, 2, 2 }; +} + +__attribute__((noinline, noclone)) v4qi +f3 (v4qi x, v4qi y) +{ + return x / y; +} + +int +main () +{ + v4qi x = { 5, 5, 5, 5 }; + v4qi y = { 2, 2, 2, 2 }; + v4qi z = f1 (x); + if (__builtin_memcmp (&y, &z, sizeof (y)) != 0) + __builtin_abort (); + z = f2 (x); + if (__builtin_memcmp (&y, &z, sizeof (y)) != 0) + __builtin_abort (); + z = f3 (x, y); + if (__builtin_memcmp (&y, &z, sizeof (y)) != 0) + __builtin_abort (); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c new file mode 100644 index 000000000..ebc90a32f --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c @@ -0,0 +1,39 @@ +#ifdef __INT32_TYPE__ +typedef __INT32_TYPE__ int32_t; +#else +typedef int int32_t; +#endif + +#ifdef __UINT32_TYPE__ +typedef __UINT32_TYPE__ uint32_t; +#else +typedef unsigned uint32_t; +#endif + +#define __fake_const_swab32(x) ((uint32_t)( \ + (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) | \ + (((uint32_t)(x) & (uint32_t)0x0000ff00UL) << 8) | \ + (((uint32_t)(x) & (uint32_t)0x00ff0000UL) >> 8) | \ + (( (int32_t)(x) & (int32_t)0xff000000UL) >> 24))) + +/* Previous version of bswap optimization failed to consider sign extension + and as a result would replace an expression *not* doing a bswap by a + bswap. */ + +__attribute__ ((noinline, noclone)) uint32_t +fake_bswap32 (uint32_t in) +{ + return __fake_const_swab32 (in); +} + +int +main(void) +{ + if (sizeof (int32_t) * __CHAR_BIT__ != 32) + return 0; + if (sizeof (uint32_t) * __CHAR_BIT__ != 32) + return 0; + if (fake_bswap32 (0x87654321) != 0xffffff87) + __builtin_abort (); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c new file mode 100644 index 000000000..886ecfd29 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c @@ -0,0 +1,40 @@ +#ifdef __INT16_TYPE__ +typedef __INT16_TYPE__ int16_t; +#else +typedef short int16_t; +#endif + +#ifdef __UINT32_TYPE__ +typedef __UINT32_TYPE__ uint32_t; +#else +typedef unsigned uint32_t; +#endif + +#define __fake_const_swab32(x) ((uint32_t)( \ + (((uint32_t) (x) & (uint32_t)0x000000ffUL) << 24) | \ + (((uint32_t)(int16_t)(x) & (uint32_t)0x00ffff00UL) << 8) | \ + (((uint32_t) (x) & (uint32_t)0x00ff0000UL) >> 8) | \ + (((uint32_t) (x) & (uint32_t)0xff000000UL) >> 24))) + + +/* Previous version of bswap optimization failed to consider sign extension + and as a result would replace an expression *not* doing a bswap by a + bswap. */ + +__attribute__ ((noinline, noclone)) uint32_t +fake_bswap32 (uint32_t in) +{ + return __fake_const_swab32 (in); +} + +int +main(void) +{ + if (sizeof (uint32_t) * __CHAR_BIT__ != 32) + return 0; + if (sizeof (int16_t) * __CHAR_BIT__ != 16) + return 0; + if (fake_bswap32 (0x81828384) != 0xff838281) + __builtin_abort (); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c new file mode 100644 index 000000000..6086e2786 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c @@ -0,0 +1,13 @@ +short a = -1; +int b; +char c; + +int +main () +{ + c = a; + b = a | c; + if (b != -1) + __builtin_abort (); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61673.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61673.c new file mode 100644 index 000000000..b3e243da5 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61673.c @@ -0,0 +1,50 @@ +/* PR rtl-optimization/61673 */ + +char e; + +__attribute__((noinline, noclone)) void +bar (char x) +{ + if (x != 0x54 && x != (char) 0x87) + __builtin_abort (); +} + +__attribute__((noinline, noclone)) void +foo (const char *x) +{ + char d = x[0]; + int c = d; + if ((c >= 0 && c <= 0x7f) == 0) + e = d; + bar (d); +} + +__attribute__((noinline, noclone)) void +baz (const char *x) +{ + char d = x[0]; + int c = d; + if ((c >= 0 && c <= 0x7f) == 0) + e = d; +} + +int +main () +{ + const char c[] = { 0x54, 0x87 }; + e = 0x21; + foo (c); + if (e != 0x21) + __builtin_abort (); + foo (c + 1); + if (e != (char) 0x87) + __builtin_abort (); + e = 0x21; + baz (c); + if (e != 0x21) + __builtin_abort (); + baz (c + 1); + if (e != (char) 0x87) + __builtin_abort (); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61725.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61725.c new file mode 100644 index 000000000..0aa6dafa2 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/pr61725.c @@ -0,0 +1,14 @@ +/* PR tree-optimization/61725 */ + +int +main () +{ + int x; + for (x = -128; x <= 128; x++) + { + int a = __builtin_ffs (x); + if (x == 0 && a != 0) + __builtin_abort (); + } + return 0; +} -- cgit v1.2.3