re PR middle-end/11665 (ICE in struct initializer when taking address)
authorAndrew Pinski <pinskia@physics.uc.edu>
Mon, 8 Sep 2003 03:05:52 +0000 (03:05 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Mon, 8 Sep 2003 03:05:52 +0000 (20:05 -0700)
2003-09-07  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/11665
        * gcc.c-torture/compile/20030907-1.c: New test.
        * g++.dg/init/array11.C: New test.

From-SVN: r71193

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/array11.C [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/20030907-1.c [new file with mode: 0644]

index a88421b..4db007f 100644 (file)
@@ -1,3 +1,9 @@
+2003-09-07  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       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  <mark@codesourcery.com>
 
        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 (file)
index 0000000..e362b91
--- /dev/null
@@ -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 (file)
index 0000000..e362b91
--- /dev/null
@@ -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)) ),
+    },
+};
+}
+