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) >>>

Reply via email to