diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d7f73070448..7db96755ad3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-01-01 Richard Guenther + + 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 * builtins.c: Update copyright to 2010. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 0655197f5bc..a244a83e787 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -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); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 46087948969..35ea64b52b3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-01 Richard Guenther + + PR c/42570 + * gcc.c-torture/execute/pr42570.c: New testcase. + 2010-01-01 Richard Guenther PR middle-end/42559 diff --git a/gcc/testsuite/gcc.c-torture/execute/pr42570.c b/gcc/testsuite/gcc.c-torture/execute/pr42570.c new file mode 100644 index 00000000000..99a8d807286 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr42570.c @@ -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; +}