From: Andrew Pinski Date: Mon, 8 Sep 2003 03:05:52 +0000 (+0000) Subject: re PR middle-end/11665 (ICE in struct initializer when taking address) X-Git-Tag: releases/gcc-3.4.0~3837 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dc4cb34e154562600dd586d5fc916738a476c0f1;p=thirdparty%2Fgcc.git re PR middle-end/11665 (ICE in struct initializer when taking address) 2003-09-07 Andrew Pinski PR middle-end/11665 * gcc.c-torture/compile/20030907-1.c: New test. * g++.dg/init/array11.C: New test. From-SVN: r71193 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a88421b332ea..4db007fa0317 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2003-09-07 Andrew Pinski + + PR middle-end/11665 + * gcc.c-torture/compile/20030907-1.c: New test. + * g++.dg/init/array11.C: New test. + 2003-09-07 Mark Mitchell PR c++/11852 diff --git a/gcc/testsuite/g++.dg/init/array11.C b/gcc/testsuite/g++.dg/init/array11.C new file mode 100644 index 000000000000..e362b910284d --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array11.C @@ -0,0 +1,25 @@ +/* PR 11665 + Orgin: jwhite@cse.unl.edu + The problem was in initializer_constant_valid_p, + "for a CONSTRUCTOR, only the last element + of the CONSTRUCTOR was being checked" + (from the email of the patch which fixed this). + This used to ICE because GCC thought gdt_table was a + constant value when it is not. */ + +int x; +struct gdt +{ +unsigned a,b,c,d,e,f; +}; +void f() +{ +struct gdt gdt_table[2]= +{ + { + 0, + ( (((unsigned)(&x))<<(24))&(-1<<(8)) ), + }, +}; +} + diff --git a/gcc/testsuite/gcc.c-torture/compile/20030907-1.c b/gcc/testsuite/gcc.c-torture/compile/20030907-1.c new file mode 100644 index 000000000000..e362b910284d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20030907-1.c @@ -0,0 +1,25 @@ +/* PR 11665 + Orgin: jwhite@cse.unl.edu + The problem was in initializer_constant_valid_p, + "for a CONSTRUCTOR, only the last element + of the CONSTRUCTOR was being checked" + (from the email of the patch which fixed this). + This used to ICE because GCC thought gdt_table was a + constant value when it is not. */ + +int x; +struct gdt +{ +unsigned a,b,c,d,e,f; +}; +void f() +{ +struct gdt gdt_table[2]= +{ + { + 0, + ( (((unsigned)(&x))<<(24))&(-1<<(8)) ), + }, +}; +} +