diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2012-02-21 11:54:27 +0000 |
---|---|---|
committer | Georg-Johann Lay <gjl@gcc.gnu.org> | 2012-02-21 11:54:27 +0000 |
commit | 305406d3e1e585ec8dc1eedbaf757148f6034119 (patch) | |
tree | 4406c0fb7f11529c00847e25b4f655729a4e57c2 /gcc | |
parent | 8540e6e8bdb60f1cd1ea2b05394bdc7a13b8dcd2 (diff) | |
download | gcc-305406d3e1e585ec8dc1eedbaf757148f6034119.zip gcc-305406d3e1e585ec8dc1eedbaf757148f6034119.tar.gz gcc-305406d3e1e585ec8dc1eedbaf757148f6034119.tar.bz2 |
re PR middle-end/51782 (-ftree-sra: Missing address-space information leads to wrong)
PR middle-end/51782
* gcc.target/avr/torture/pr51782-1.c: New test.
From-SVN: r184434
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/torture/pr51782-1.c | 51 |
2 files changed, 56 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2bbb672..0fe2f69 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-02-21 Georg-Johann Lay <avr@gjlay.de> + + PR middle-end/51782 + * gcc.target/avr/torture/pr51782-1.c: New test. + 2012-02-21 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/52318 diff --git a/gcc/testsuite/gcc.target/avr/torture/pr51782-1.c b/gcc/testsuite/gcc.target/avr/torture/pr51782-1.c new file mode 100644 index 0000000..ff0f9d4 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/pr51782-1.c @@ -0,0 +1,51 @@ +/* PR middle-end/51782 */ +/* { dg-do run } */ +/* { dg-options { "-std=gnu99" } } */ + +#include <stdlib.h> + +struct R { char r; }; +struct RGB { char r,g,b; }; + +__flash const struct R r1 = { 12 }; +__flash const struct RGB r3 = { 23, 56, 78 }; + +char __attribute__((noinline,noclone)) +read1_bug (const __flash struct R *s) +{ + struct R t = *s; + return t.r; +} + +char __attribute__((noinline,noclone)) +read1_ok (const __flash struct R *s) +{ + return s->r; +} + +char __attribute__((noinline,noclone)) +read3_bug (const __flash struct RGB *s) +{ + struct RGB t = *s; + return t.r + t.g + t.b; +} + +char __attribute__((noinline,noclone)) +read3_ok (const __flash struct RGB *s) +{ + return s->r + s->g + s->b; +} + +__flash const struct R * volatile p1 = &r1; +__flash const struct RGB * volatile p3 = &r3; + +int main (void) +{ + if (read1_bug (p1) != read1_ok (p1)) + abort(); + + if (read3_bug (p3) != read3_ok (p3)) + abort(); + + exit (0); +} |