https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115747

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Do you mean something like:
@@ -4114,6 +4114,14 @@ build_vec_delete_1 (location_t loc, tree

   if (!COMPLETE_TYPE_P (type))
     {
+      if (cxx_dialect > cxx23)
+       {
+         if ((complain & tf_error)
+             && permerror (loc, "operator %<delete []%> used on "
+                           "incomplete type"))
+           cxx_incomplete_type_diagnostic (base, type, DK_PERMERROR);
+         return error_mark_node;
+       }
       if (complain & tf_warning)
        {
          auto_diagnostic_group d;
or
@@ -4114,19 +4114,22 @@ build_vec_delete_1 (location_t loc, tree

   if (!COMPLETE_TYPE_P (type))
     {
-      if (complain & tf_warning)
+      if (complain & (cxx_dialect > cxx23 ? tf_error : tf_warning))
        {
          auto_diagnostic_group d;
-         if (warning_at (loc, OPT_Wdelete_incomplete,
-                         "possible problem detected in invocation of "
-                         "operator %<delete []%>"))
+         diagnostic_t kind = cxx_dialect > cxx23 ? DK_PERMERROR : DK_WARNING;
+         if (emit_diagnostic (kind,loc, OPT_Wdelete_incomplete,
+                              "possible problem detected in invocation of "
+                               "operator %<delete []%>"))
            {
-             cxx_incomplete_type_diagnostic (base, type, DK_WARNING);
+             cxx_incomplete_type_diagnostic (base, type, kind);
              inform (loc, "neither the destructor nor the "
                      "class-specific operator %<delete []%> will be called, "
                      "even if they are declared when the class is defined");
            }
        }
+      if (cxx_dialect > cxx23)
+       return error_mark_node;
       /* This size won't actually be used.  */
       size_exp = size_one_node;
       goto no_destructor;
or something else?  I think the former is fine, the wording of the second
variant is just weird, because it isn't a possible problem, it is strictly
invalid code for C++26 and there is no need to explain what would happen in
that case.

Reply via email to