From: Joseph Myers Date: Sat, 26 Aug 2006 00:16:07 +0000 (+0100) Subject: re PR c/27893 (ICE with TREE_CONSTANT VLA sizes inside functions) X-Git-Tag: releases/gcc-4.0.4~419 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4cbe2412ed4ceddd711ae55a5d45fb7cc37cbf3b;p=thirdparty%2Fgcc.git re PR c/27893 (ICE with TREE_CONSTANT VLA sizes inside functions) PR c/27893 * gimplify.c (gimplify_decl_expr, gimplify_init_ctor_preeval): Treat sizes as variable whenever not INTEGER_CST. testsuite: * gcc.c-torture/compile/vla-const-1.c, gcc.c-torture/compile/vla-const-2.c: New tests. From-SVN: r116454 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b490fa12854c..054b2cb14c80 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-08-25 Joseph S. Myers + + PR c/27893 + * gimplify.c (gimplify_decl_expr, gimplify_init_ctor_preeval): + Treat sizes as variable whenever not INTEGER_CST. + 2006-08-11 Eric Botcazou PR rtl-optimization/23454 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 0fa0faa14313..b13e96a3c48f 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -992,7 +992,7 @@ gimplify_decl_expr (tree *stmt_p) { tree init = DECL_INITIAL (decl); - if (!TREE_CONSTANT (DECL_SIZE (decl))) + if (TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST) { /* This is a variable-sized decl. Simplify its size and mark it for deferred expansion. Note that mudflap depends on the format @@ -2398,7 +2398,7 @@ gimplify_init_ctor_preeval (tree *expr_p, tree *pre_p, tree *post_p, /* If this is of variable size, we have no choice but to assume it doesn't overlap since we can't make a temporary for it. */ - if (!TREE_CONSTANT (TYPE_SIZE (TREE_TYPE (*expr_p)))) + if (TREE_CODE (TYPE_SIZE (TREE_TYPE (*expr_p))) != INTEGER_CST) return; /* Otherwise, we must search for overlap ... */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9da250571378..acda4adc84b3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2006-08-25 Joseph S. Myers + + PR c/27893 + * gcc.c-torture/compile/vla-const-1.c, + gcc.c-torture/compile/vla-const-2.c: New tests. + 2006-08-17 Volker Reichelt PR c++/28606 diff --git a/gcc/testsuite/gcc.c-torture/compile/vla-const-1.c b/gcc/testsuite/gcc.c-torture/compile/vla-const-1.c new file mode 100644 index 000000000000..6acc3d83050b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/vla-const-1.c @@ -0,0 +1,5 @@ +/* Test TREE_CONSTANT VLA size: bug 27893. */ +/* Origin: Joseph Myers */ +int a; +void g(void *); +void f(void) { int b[(__SIZE_TYPE__)&a]; g(b); } diff --git a/gcc/testsuite/gcc.c-torture/compile/vla-const-2.c b/gcc/testsuite/gcc.c-torture/compile/vla-const-2.c new file mode 100644 index 000000000000..913a730b458f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/vla-const-2.c @@ -0,0 +1,4 @@ +/* Test TREE_CONSTANT VLA size: bug 27893. */ +/* Origin: Joseph Myers */ +void g(void *); +void f(void) { int b[1/0]; g(b); }