Commit cd801ba1 by Richard Henderson Committed by Richard Henderson

re PR tree-optimization/18067 (ICE at loc_descriptor_from_tree_1 in dwarf2out.c…

re PR tree-optimization/18067 (ICE at loc_descriptor_from_tree_1 in dwarf2out.c (VLA) with const int.)

        PR 18067
        * stor-layout.c (variable_size): Force creation of a SAVE_EXPR.

From-SVN: r92389
parent 199db659
2004-12-19 Richard Henderson <rth@redhat.com>
PR 18067
* stor-layout.c (variable_size): Force creation of a SAVE_EXPR.
2003-12-19 Steven Bosscher <stevenb@suse.de>
* config/i386/i386.c (ix86_split_to_parts): Use an array with
......
......@@ -125,11 +125,19 @@ variable_size (tree size)
just return SIZE unchanged. Likewise for self-referential sizes and
constant sizes. */
if (TREE_CONSTANT (size)
|| TREE_CODE (size) == SAVE_EXPR
|| lang_hooks.decls.global_bindings_p () < 0
|| CONTAINS_PLACEHOLDER_P (size))
return size;
size = save_expr (size);
/* Force creation of a SAVE_EXPR. This solves (1) code duplication
problems between parent and nested functions that occasionally can't
be cleaned up because of portions of the expression escaping the
parent function via the FRAME object, and (2) tree sharing problems
between the type system and the gimple code, which can leak SSA_NAME
objects into e.g. TYPE_SIZE, which cause heartburn when emitting
debug information. */
size = build1 (SAVE_EXPR, TREE_TYPE (size), size);
/* If an array with a variable number of elements is declared, and
the elements require destruction, we will emit a cleanup for the
......
/* PR 18067 */
/* { dg-do compile } */
void foo(int i)
{
const int j=i+1;
int a[1][j*j];
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment