From: Tom Tromey Date: Fri, 4 Jan 2008 00:14:31 +0000 (+0000) Subject: re PR c/34457 (ICE with VLA and -combine) X-Git-Tag: releases/gcc-4.3.0~760 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6fc3c3c03343e5a33df89f8be44f5e523ad99cd6;p=thirdparty%2Fgcc.git re PR c/34457 (ICE with VLA and -combine) gcc/ PR c/34457: * c-common.c (c_type_hash): Handle VLAs. gcc/testsuite PR c/34457: * gcc.dg/pr34457-2.c: New file. * gcc.dg/pr34457-1.c: New file. From-SVN: r131311 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 812f42954b70..8a7ae195fe38 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-01-03 Tom Tromey + + PR c/34457: + * c-common.c (c_type_hash): Handle VLAs. + 2008-01-03 Jan Hubicka PR tree-optimization/31081 diff --git a/gcc/c-common.c b/gcc/c-common.c index 36afd6b4e8b2..4e5d24c6fd24 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -1,6 +1,6 @@ /* Subroutines shared by all languages that are variants of C. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GCC. @@ -3171,7 +3171,11 @@ c_type_hash (const void *p) } for (; t2; t2 = TREE_CHAIN (t2)) i++; - size = TREE_INT_CST_LOW (TYPE_SIZE (t)); + /* We might have a VLA here. */ + if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST) + size = 0; + else + size = TREE_INT_CST_LOW (TYPE_SIZE (t)); return ((size << 24) | (i << shift)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 58aaae22f34a..6f91d5dcda72 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-01-03 Tom Tromey + + PR c/34457: + * gcc.dg/pr34457-2.c: New file. + * gcc.dg/pr34457-1.c: New file. + 2008-01-03 Sebastian Pop Revert fix for PR tree-optimization/34458. diff --git a/gcc/testsuite/gcc.dg/pr34457-1.c b/gcc/testsuite/gcc.dg/pr34457-1.c new file mode 100644 index 000000000000..7a1efed54d94 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr34457-1.c @@ -0,0 +1,23 @@ +/* PR c/34457 */ +/* { dg-do compile } */ +/* { dg-options "--combine -O2" } */ +/* { dg-additional-sources "pr34457-2.c" } */ + + +typedef __SIZE_TYPE__ size_t; +extern int printf (const char *, ...); +extern void *memset (void *, int, size_t); + +int bar (int (*)(), int, void *); + +int +main(int argc, char **argv) +{ + struct s { int a; char b[argc]; }; + int nested (struct s x) { return x.a + sizeof(x); } + struct s t; + memset (&t, 0, sizeof(t)); + t.a = 123; + printf("%d\n", bar (nested, argc, &t)); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr34457-2.c b/gcc/testsuite/gcc.dg/pr34457-2.c new file mode 100644 index 000000000000..8e251d3abeb8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr34457-2.c @@ -0,0 +1,3 @@ +/* Additional file for PR c/34457. */ + +int x;