From 1a65a0083e884e3c57bfc2b9d8c0caac7ea4a334 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 23 Nov 2012 16:12:58 +0100 Subject: [PATCH] re PR middle-end/55430 (LRA miscompilation of ree.c) PR middle-end/55430 * gcc.dg/pr55430.c: New test. From-SVN: r193757 --- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.dg/pr55430.c | 43 ++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr55430.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 74a120d1c0d1..ee90eeb74bde 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-11-23 Jakub Jelinek + + PR middle-end/55430 + * gcc.dg/pr55430.c: New test. + 2012-11-23 Kostya Serebryany * c-c++-common/asan/memcmp-1.c: Update to match the new libsanitizer. diff --git a/gcc/testsuite/gcc.dg/pr55430.c b/gcc/testsuite/gcc.dg/pr55430.c new file mode 100644 index 000000000000..dda02f3fac1b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr55430.c @@ -0,0 +1,43 @@ +/* PR middle-end/55430 */ +/* { dg-do run { target mmap } } */ +/* { dg-options "-O2" } */ + +#include +#include +#include +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif +#ifndef MAP_ANON +#define MAP_ANON 0 +#endif +#include + +struct S +{ + unsigned int s1 : 8; + unsigned int s2 : 2; +}; + +__attribute__((noinline, noclone)) int +foo (int x, int y, struct S *z, unsigned int w) +{ + if (z[y].s2 == x && z[y].s1 == w) + return 1; + return 0; +} + +int +main () +{ + char *p = mmap (NULL, 131072, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (p == MAP_FAILED) + return 0; + if (munmap (p + 65536, 65536) < 0) + return 0; + if ((65536 / sizeof (struct S)) * sizeof (struct S) != 65536) + return 0; + struct S *s = (struct S *) (p + 65536); + return foo (0, 0, s - 1, 0) != 1; +} -- 2.47.3