OSDN Git Service

2010-01-01 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Jan 2010 17:19:02 +0000 (17:19 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Jan 2010 17:19:02 +0000 (17:19 +0000)
PR c/42570
* c-decl.c (grokdeclarator): For zero-size arrays force
structural equality checks as layout_type does.

* gcc.c-torture/execute/pr42570.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155557 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr42570.c [new file with mode: 0644]

index d7f7307..7db9675 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-01  Richard Guenther  <rguenther@suse.de>
+
+       PR c/42570
+       * c-decl.c (grokdeclarator): For zero-size arrays force
+       structural equality checks as layout_type does.
+
 2010-01-01  H.J. Lu  <hongjiu.lu@intel.com>
 
        * builtins.c: Update copyright to 2010.
index 0655197..a244a83 100644 (file)
@@ -1,6 +1,6 @@
 /* Process declarations and variables for C compiler.
    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -5394,6 +5394,7 @@ grokdeclarator (const struct c_declarator *declarator,
                    gcc_assert (itype);
                    TYPE_SIZE (type) = bitsize_zero_node;
                    TYPE_SIZE_UNIT (type) = size_zero_node;
+                   SET_TYPE_STRUCTURAL_EQUALITY (type);
                  }
                if (array_parm_vla_unspec_p)
                  {
@@ -5401,6 +5402,7 @@ grokdeclarator (const struct c_declarator *declarator,
                    /* The type is complete.  C99 6.7.5.2p4  */
                    TYPE_SIZE (type) = bitsize_zero_node;
                    TYPE_SIZE_UNIT (type) = size_zero_node;
+                   SET_TYPE_STRUCTURAL_EQUALITY (type);
                  }
              }
 
index 4608794..35ea64b 100644 (file)
@@ -1,5 +1,10 @@
 2010-01-01  Richard Guenther  <rguenther@suse.de>
 
+       PR c/42570
+       * gcc.c-torture/execute/pr42570.c: New testcase.
+
+2010-01-01  Richard Guenther  <rguenther@suse.de>
+
        PR middle-end/42559
        * gcc.c-torture/compile/pr42559.c: New testcase.
 
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr42570.c b/gcc/testsuite/gcc.c-torture/execute/pr42570.c
new file mode 100644 (file)
index 0000000..99a8d80
--- /dev/null
@@ -0,0 +1,9 @@
+typedef unsigned char uint8_t;
+uint8_t foo[1][0];
+extern void abort (void);
+int main()
+{
+  if (sizeof (foo) != 0)
+    abort ();
+  return 0;
+}