diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-12-04 15:55:40 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2007-12-04 15:55:40 +0100 |
commit | 91ee70c3474d8ffe588224402caff0cafa4cdcef (patch) | |
tree | 5aab5f5a0e3084c05f1b54313e206f8a926c1b03 | |
parent | 3c031ab9dfe19a2158c020ec810e5690d2b3ab90 (diff) | |
download | gcc-91ee70c3474d8ffe588224402caff0cafa4cdcef.zip gcc-91ee70c3474d8ffe588224402caff0cafa4cdcef.tar.gz gcc-91ee70c3474d8ffe588224402caff0cafa4cdcef.tar.bz2 |
20071202-1.c: New test.
* gcc.c-torture/execute/20071202-1.c: New test.
* gcc.dg/tree-ssa/pr34146-2.c: New test.
From-SVN: r130601
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20071202-1.c | 25 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr34146-2.c | 53 |
3 files changed, 83 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6f7e2d9..e78a954 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-12-04 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/execute/20071202-1.c: New test. + * gcc.dg/tree-ssa/pr34146-2.c: New test. + 2007-12-04 Tobias Burnus <burnus@net-b.de> PR fortran/34318 diff --git a/gcc/testsuite/gcc.c-torture/execute/20071202-1.c b/gcc/testsuite/gcc.c-torture/execute/20071202-1.c new file mode 100644 index 0000000..14fb8ec --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20071202-1.c @@ -0,0 +1,25 @@ +extern void abort (void); +struct T { int t; int r[8]; }; +struct S { int a; int b; int c[6]; struct T d; }; + +__attribute__((noinline)) void +foo (struct S *s) +{ + *s = (struct S) { s->b, s->a, { 0, 0, 0, 0, 0, 0 }, s->d }; +} + +int +main (void) +{ + struct S s = { 6, 12, { 1, 2, 3, 4, 5, 6 }, + { 7, { 8, 9, 10, 11, 12, 13, 14, 15 } } }; + foo (&s); + if (s.a != 12 || s.b != 6 + || s.c[0] || s.c[1] || s.c[2] || s.c[3] || s.c[4] || s.c[5]) + abort (); + if (s.d.t != 7 || s.d.r[0] != 8 || s.d.r[1] != 9 || s.d.r[2] != 10 + || s.d.r[3] != 11 || s.d.r[4] != 12 || s.d.r[5] != 13 + || s.d.r[6] != 14 || s.d.r[7] != 15) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr34146-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr34146-2.c new file mode 100644 index 0000000..31007b0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr34146-2.c @@ -0,0 +1,53 @@ +/* PR c/34146 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-gimple" } */ + +struct A +{ + int f1, f2, f3; +}; + +struct B +{ + struct A g1, g2; +}; + +struct C +{ + struct B h1, h2; +}; + +typedef union +{ + struct C c; + char s[4]; + long int a; +} T; + +void +foo (void) +{ + T t = (T) { { { { 0, 0, 0 }, { 0, 0, 0 } }, { { 0, 0, 0 }, { 0, 0, 0 } } } }; + test (&t); +} + +void +bar (void) +{ + T t = (T) { { { { 0, 0, 0 }, (struct A) { 0, 0, 0 } }, + (struct B) { (struct A) { 0, 0, 0 }, { 0, 0, 0 } } } }; + test (&t); +} + +void +baz (void) +{ + T t = (T) { { { { 0, 0, 0 }, (struct A) { 1, 1, 1 } }, + (struct B) { (struct A) { 0, 0, 0 }, { 1, 1, 1 } } } }; + test (&t); +} + +/* { dg-final { scan-tree-dump-not "t = D" "gimple"} } */ +/* { dg-final { scan-tree-dump-not "t\.c\.h\[12\] = D" "gimple"} } */ +/* { dg-final { scan-tree-dump-not "\.g\[12\] = D" "gimple"} } */ +/* { dg-final { cleanup-tree-dump "gimple" } } */ |