On 11/28/25 1:47 PM, Stefan Schulze Frielinghaus wrote:
From: Stefan Schulze Frielinghaus <[email protected]>

With the recent switch in commit r16-5628 defaulting to C++20 some
enumeration arithmetic errors are thrown during bootstrap, now.  Fixed
by casting those to type int.  I'm using type int here merely because
S390_ALL_BUILTIN_MAX is used in comparisons with other operands of type
int.

gcc/ChangeLog:

        * config/s390/s390-builtins.h
        (S390_OVERLOADED_BUILTIN_VAR_OFFSET,S390_ALL_BUILTIN_MAX): Fix
        enum arithmetic.
        * config/s390/s390.cc (OB_DEF): Ditto.

LGTM. Thanks!

Andreas


---
  gcc/config/s390/s390-builtins.h | 12 +++++-------
  gcc/config/s390/s390.cc         | 10 ++++------
  2 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/gcc/config/s390/s390-builtins.h b/gcc/config/s390/s390-builtins.h
index e19fc7eec51..1e596aef7ce 100644
--- a/gcc/config/s390/s390-builtins.h
+++ b/gcc/config/s390/s390-builtins.h
@@ -134,10 +134,10 @@ S390_OVERLOADED_BUILTIN_VAR_MAX
#define S390_OVERLOADED_BUILTIN_OFFSET S390_BUILTIN_MAX
  #define S390_OVERLOADED_BUILTIN_VAR_OFFSET \
-  (S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_MAX)
-#define S390_ALL_BUILTIN_MAX                           \
-  (S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_MAX +    \
-   S390_OVERLOADED_BUILTIN_VAR_MAX)
+  ((int)S390_BUILTIN_MAX + (int)S390_OVERLOADED_BUILTIN_MAX)
+#define S390_ALL_BUILTIN_MAX                                   \
+  ((int)S390_BUILTIN_MAX + (int)S390_OVERLOADED_BUILTIN_MAX +  \
+   (int)S390_OVERLOADED_BUILTIN_VAR_MAX)
extern const unsigned int bflags_builtin[S390_BUILTIN_MAX + 1];
  extern const unsigned int opflags_builtin[S390_BUILTIN_MAX + 1];
@@ -172,6 +172,4 @@ opflags_for_builtin (int fcode)
      return opflags_builtin[fcode];
  }
-extern GTY(()) tree s390_builtin_decls[S390_BUILTIN_MAX +
-                                      S390_OVERLOADED_BUILTIN_MAX +
-                                      S390_OVERLOADED_BUILTIN_VAR_MAX];
+extern GTY(()) tree s390_builtin_decls[S390_ALL_BUILTIN_MAX];
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index d65109026f2..359ea1c3d64 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -686,9 +686,7 @@ 
opflags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1] =
tree s390_builtin_types[BT_MAX];
  tree s390_builtin_fn_types[BT_FN_MAX];
-tree s390_builtin_decls[S390_BUILTIN_MAX +
-                       S390_OVERLOADED_BUILTIN_MAX +
-                       S390_OVERLOADED_BUILTIN_VAR_MAX];
+tree s390_builtin_decls[S390_ALL_BUILTIN_MAX];
static enum insn_code const code_for_builtin[S390_BUILTIN_MAX + 1] = {
  #undef B_DEF
@@ -771,12 +769,12 @@ s390_init_builtins (void)
                            ATTRS);
  #undef OB_DEF
  #define OB_DEF(NAME, FIRST_VAR_NAME, LAST_VAR_NAME, BFLAGS, FNTYPE)   \
-  if (s390_builtin_decls[S390_OVERLOADED_BUILTIN_##NAME + S390_BUILTIN_MAX] \
+  if (s390_builtin_decls[(int)S390_OVERLOADED_BUILTIN_##NAME + 
(int)S390_BUILTIN_MAX] \
        == NULL)                                                                
\
-    s390_builtin_decls[S390_OVERLOADED_BUILTIN_##NAME + S390_BUILTIN_MAX] = \
+    s390_builtin_decls[(int)S390_OVERLOADED_BUILTIN_##NAME + 
(int)S390_BUILTIN_MAX] = \
        add_builtin_function ("__builtin_" #NAME,                             \
                            s390_builtin_fn_types[FNTYPE],              \
-                           S390_OVERLOADED_BUILTIN_##NAME + S390_BUILTIN_MAX, \
+                           (int)S390_OVERLOADED_BUILTIN_##NAME + 
(int)S390_BUILTIN_MAX, \
                            BUILT_IN_MD,                                \
                            NULL,                                       \
                            0);

Reply via email to