+2006-08-25 Joseph S. Myers <joseph@codesourcery.com>
+
+ PR c/27893
+ * gimplify.c (gimplify_decl_expr, gimplify_init_ctor_preeval,
+ omp_add_variable): Treat sizes as variable whenever not
+ INTEGER_CST.
+
2006-08-26 Richard Guenther <rguenther@suse.de>
PR middle-end/28814
if (host_integerp (maxval, 0))
pp_wide_integer (pp, tree_low_cst (maxval, 0) + 1);
else
- pp_expression (pp, fold_build2 (PLUS_EXPR, type, maxval,
- build_int_cst (type, 1)));
+ pp_expression (pp, fold (build2 (PLUS_EXPR, type, maxval,
+ build_int_cst (type, 1))));
}
pp_c_right_bracket (pp);
pp_direct_abstract_declarator (pp, TREE_TYPE (t));
{
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
/* 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 ... */
/* When adding a variable-sized variable, we have to handle all sorts
of additional bits of data: the pointer replacement variable, and
the parameters of the type. */
- if (DECL_SIZE (decl) && !TREE_CONSTANT (DECL_SIZE (decl)))
+ if (DECL_SIZE (decl) && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
{
/* Add the pointer replacement variable as PRIVATE if the variable
replacement is private, else FIRSTPRIVATE since we'll need the
if ((flags & GOVD_SHARED) == 0)
{
t = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (decl)));
- if (!TREE_CONSTANT (t))
+ if (TREE_CODE (t) != INTEGER_CST)
omp_notice_variable (ctx, t, true);
}
}
+2006-08-25 Joseph S. Myers <joseph@codesourcery.com>
+
+ PR c/27893
+ * gcc.c-torture/compile/vla-const-1.c,
+ gcc.c-torture/compile/vla-const-2.c: New tests.
+
2006-08-26 Richard Guenther <rguenther@suse.de>
PR middle-end/28814