2016-04-13 Jakub Jelinek <jakub@redhat.com>
+ PR middle-end/70633
+ * gimplify.c (gimplify_init_constructor): Clear TREE_STATIC if
+ gimplification turns some element into non-constant.
+
PR debug/70628
* rtl.h (convert_memory_address_addr_space_1): New prototype.
* explow.c (convert_memory_address_addr_space_1): No longer static,
}
/* Vector types use CONSTRUCTOR all the way through gimple
- compilation as a general initializer. */
+ compilation as a general initializer. */
FOR_EACH_VEC_SAFE_ELT (elts, ix, ce)
{
enum gimplify_status tret;
fb_rvalue);
if (tret == GS_ERROR)
ret = GS_ERROR;
+ else if (TREE_STATIC (ctor)
+ && !initializer_constant_valid_p (ce->value,
+ TREE_TYPE (ce->value)))
+ TREE_STATIC (ctor) = 0;
}
if (!is_gimple_reg (TREE_OPERAND (*expr_p, 0)))
TREE_OPERAND (*expr_p, 1) = get_formal_tmp_var (ctor, pre_p);
--- /dev/null
+/* PR middle-end/70633 */
+
+typedef long V __attribute__((vector_size (4 * sizeof (long))));
+
+void foo (V *);
+
+void
+bar (void)
+{
+ V b = { (long) bar, 0, 0, 0 };
+ foo (&b);
+}