From: Jakub Jelinek Date: Tue, 4 Dec 2007 14:55:40 +0000 (+0100) Subject: 20071202-1.c: New test. X-Git-Tag: releases/gcc-4.3.0~1215 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=91ee70c3474d8ffe588224402caff0cafa4cdcef;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6f7e2d929b6b..e78a9548ca78 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-12-04 Jakub Jelinek + + * gcc.c-torture/execute/20071202-1.c: New test. + * gcc.dg/tree-ssa/pr34146-2.c: New test. + 2007-12-04 Tobias Burnus 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 000000000000..14fb8ec352e8 --- /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 000000000000..31007b07f819 --- /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" } } */