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

Kai Tietz <ktietz at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |ktietz at gcc dot gnu.org

--- Comment #1 from Kai Tietz <ktietz at gcc dot gnu.org> ---
Hmm, issue seems to be in too restrictive decl_maybe_constant_var_p function.
We could allow here additional ARRAY_TYPEs with constant, non-vla, and trivial
destructors.  Maybe even non-trivial destructors could be ok.  Not sure

Suggested patch, which allows provided testcase to run is:

Index: decl2.c
===================================================================
--- decl2.c     (Revision 218570)
+++ decl2.c     (Arbeitskopie)
@@ -4157,8 +4157,12 @@ decl_maybe_constant_var_p (tree decl)
     return false;
   if (DECL_DECLARED_CONSTEXPR_P (decl))
     return true;
-  return (CP_TYPE_CONST_NON_VOLATILE_P (type)
-         && INTEGRAL_OR_ENUMERATION_TYPE_P (type));
+  if (!CP_TYPE_CONST_NON_VOLATILE_P (type))
+    return false;
+  return ((TREE_CODE (type) == ARRAY_TYPE
+          && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type))
+          && !array_of_runtime_bound_p (type))
+         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
 }

 /* Complain that DECL uses a type with no linkage.  In C++98 mode this is

Reply via email to