https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59465
--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> --- We accept the test because we do else if (type_build_ctor_call (type) || (init && CLASS_TYPE_P (strip_array_types (type)))) { if (TREE_CODE (type) == ARRAY_TYPE) { if (init == NULL_TREE || same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))) { if (TYPE_DOMAIN (type) && TYPE_MAX_VALUE (TYPE_DOMAIN (type))) { /* Initialize the array only if it's not a flexible array member (i.e., if it has an upper bound). */ init = build_vec_init_expr (type, init, tf_warning_or_error); init = cp_build_init_expr (decl, init); finish_expr_stmt (init); which results in something like ((struct O *) this)->a = <<< Unknown tree: vec_init_expr D.2843 VIEW_CONVERT_EXPR<const struct I[2]>(data) >>>