+2017-09-09 Jason Merrill <jason@redhat.com>
+
+ * constexpr.c (reduced_constant_expression_p): If
+ CONSTRUCTOR_NO_IMPLICIT_ZERO, check that all fields are initialized.
+
2017-09-09 Eric Botcazou <ebotcazou@adacore.com>
PR bootstrap/81926
case CONSTRUCTOR:
/* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
- tree elt; unsigned HOST_WIDE_INT idx;
- FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), idx, elt)
+ tree idx, val, field; unsigned HOST_WIDE_INT i;
+ if (CONSTRUCTOR_NO_IMPLICIT_ZERO (t))
+ field = next_initializable_field (TYPE_FIELDS (TREE_TYPE (t)));
+ else
+ field = NULL_TREE;
+ FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), i, idx, val)
{
- if (!elt)
+ if (!val)
/* We're in the middle of initializing this element. */
return false;
- if (!reduced_constant_expression_p (elt))
+ if (!reduced_constant_expression_p (val))
return false;
+ if (field)
+ {
+ if (idx != field)
+ return false;
+ field = next_initializable_field (DECL_CHAIN (field));
+ }
}
+ if (field)
+ return false;
+ else if (CONSTRUCTOR_NO_IMPLICIT_ZERO (t))
+ /* All the fields are initialized. */
+ CONSTRUCTOR_NO_IMPLICIT_ZERO (t) = false;
return true;
default: