diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/c-c++-common/torture/pr53505.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/c-c++-common/torture/pr53505.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/c-c++-common/torture/pr53505.c b/gcc-4.9/gcc/testsuite/c-c++-common/torture/pr53505.c new file mode 100644 index 000000000..922711025 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/c-c++-common/torture/pr53505.c @@ -0,0 +1,42 @@ +/* PR tree-optimization/53505 */ +/* { dg-do run } */ + +#include <stdbool.h> + +struct A +{ + unsigned int a; + unsigned char c1, c2; + bool b1 : 1; + bool b2 : 1; + bool b3 : 1; +}; + +void +foo (const struct A *x, int y) +{ + int s = 0, i; + for (i = 0; i < y; ++i) + { + const struct A a = x[i]; + s += a.b1 ? 1 : 0; + } + if (s != 0) + __builtin_abort (); +} + +int +main () +{ + struct A x[100]; + int i; + __builtin_memset (x, -1, sizeof (x)); + for (i = 0; i < 100; i++) + { + x[i].b1 = false; + x[i].b2 = false; + x[i].b3 = false; + } + foo (x, 100); + return 0; +} |