devel/riscv32-esp-elf/gdb
devel/xtensa-esp32-elf/gdb
devel/xtensa-esp32s2-elf/gdb
devel/xtensa-esp32s3-elf/gdb
devel/xtensa-lx106-elf/binutils

Those all fail with the same error:
gdb/gdbsupport/enum-flags.h:87:34: error: non-type template argument is not a 
constant expression
   87 |     integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T 
(0))>::type
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

llvm22 belatedly turned this into a hard error, because "casting
integers to enums outside of the valid range of the enum is UB".
https://github.com/llvm/llvm-project/issues/59036

gdb upstream rewrote that code extensively:
https://sourceware.org/git/?p=binutils-gdb.git;a=history;f=gdbsupport/enum-flags.h;h=6dc602bd0b9db16b1b3629dc8881ca93437d3a5a;hb=HEAD

Instead I found this plausible-looking solution:

   typedef typename
-    integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
+    integer_for_size<sizeof (T), (std::numeric_limits<T>::lowest() < 0)>::type
     type;

Anybody who actually knows C++?
OK?

 
 devel/*/gdb: unbreak build with llvm22 and revert prior workaround
 
 LLVM 22 has changed -Wenum-constexpr-conversion into a hard error.
 Revert the workaround introduced for LLVM 16 and replace old idiom
 that is undefined behavior.
 
M  devel/riscv32-esp-elf/gdb/Makefile                                      |  
1+   0-
M  devel/riscv32-esp-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h     |  
3+  14-
D  devel/riscv32-esp-elf/gdb/patches/patch-include_diagnostics_h           |  
0+  33-
M  devel/xtensa-esp32-elf/gdb/Makefile                                     |  
1+   1-
M  devel/xtensa-esp32-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h    |  
3+  13-
D  devel/xtensa-esp32-elf/gdb/patches/patch-include_diagnostics_h          |  
0+  32-
M  devel/xtensa-esp32s2-elf/gdb/Makefile                                   |  
1+   1-
M  devel/xtensa-esp32s2-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h  |  
3+  13-
D  devel/xtensa-esp32s2-elf/gdb/patches/patch-include_diagnostics_h        |  
0+  32-
M  devel/xtensa-esp32s3-elf/gdb/Makefile                                   |  
1+   1-
M  devel/xtensa-esp32s3-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h  |  
3+  13-
D  devel/xtensa-esp32s3-elf/gdb/patches/patch-include_diagnostics_h        |  
0+  32-
M  devel/xtensa-lx106-elf/binutils/Makefile                                |  
1+   1-
M  devel/xtensa-lx106-elf/binutils/patches/patch-gdb_common_enum-flags_h   |  
3+  13-
D  devel/xtensa-lx106-elf/binutils/patches/patch-include_diagnostics_h     |  
0+  32-

15 files changed, 20 insertions(+), 231 deletions(-)

commit - fc0a1cf5e26d7b745bb803ab264027ee89fd8df2
commit + 89eafba83ce511a32b69fa520963820e4cab86e7
blob - 31e61a51f35ff5c3659e641f7f95c3382def7155
blob + 93771b9ad0062f1c62a3bde6d36d0de7aeb2200d
--- devel/riscv32-esp-elf/gdb/Makefile
+++ devel/riscv32-esp-elf/gdb/Makefile
@@ -2,6 +2,7 @@ COMMENT =       gdb for ${CONFIG} cross-development
 
 VERSION =      2.35.1.2021.2
 PKGNAME =      ${CONFIG}-gdb-${VERSION}
+REVISION =     0
 
 GH_ACCOUNT =   espressif
 GH_PROJECT =   binutils-gdb
blob - 3f981d279716915c3d883249d12b759b6e967fa8
blob + 8a154d935d86e172895e03e11dfc5acd26c408a4
--- devel/riscv32-esp-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h
+++ devel/riscv32-esp-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h
@@ -1,23 +1,12 @@
-
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
 Index: gdb/gdbsupport/enum-flags.h
 --- gdb/gdbsupport/enum-flags.h.orig
 +++ gdb/gdbsupport/enum-flags.h
-@@ -81,9 +81,12 @@ template<> struct integer_for_size<8, 1> { typedef int
- template<typename T>
+@@ -82,7 +82,7 @@ template<typename T>
  struct enum_underlying_type
  {
-+  DIAGNOSTIC_PUSH
-+  DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
    typedef typename
-     integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
+-    integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
++    integer_for_size<sizeof (T), (std::numeric_limits<T>::lowest() < 0)>::type
      type;
-+  DIAGNOSTIC_POP
  };
  
- template <typename E>
blob - f6db6633a990dab2ca32a5a37736c53e77048a27 (mode 644)
blob + /dev/null
--- devel/riscv32-esp-elf/gdb/patches/patch-include_diagnostics_h
+++ /dev/null
@@ -1,33 +0,0 @@
-
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
-Index: include/diagnostics.h
---- include/diagnostics.h.orig
-+++ include/diagnostics.h
-@@ -63,6 +63,11 @@
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
-   DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
- 
-+# if __has_warning ("-Wenum-constexpr-conversion")
-+#  define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION \
-+   DIAGNOSTIC_IGNORE ("-Wenum-constexpr-conversion")
-+# endif
-+
- #elif defined (__GNUC__) /* GCC */
- 
- # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
-@@ -102,6 +107,10 @@
- 
- #ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
-+#endif
-+
-+#ifndef DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
-+# define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
- #endif
- 
- #endif /* DIAGNOSTICS_H */
blob - 7c055f2818a2efac475c03850a029aba1e727d2e
blob + 7bc41be920afb8b487d5ecbd7c5a909d125d9fdc
--- devel/xtensa-esp32-elf/gdb/Makefile
+++ devel/xtensa-esp32-elf/gdb/Makefile
@@ -2,7 +2,7 @@ COMMENT =       gdb for ${CONFIG} cross-development
 
 VERSION =      2.35.1.2021.2
 PKGNAME =      ${CONFIG}-gdb-${VERSION}
-REVISION =     1
+REVISION =     2
 
 GH_ACCOUNT =   espressif
 GH_PROJECT =   binutils-gdb
blob - 8d699ad955a9f986eed6d9b01ef5001fcd8dd744
blob + 8a154d935d86e172895e03e11dfc5acd26c408a4
--- devel/xtensa-esp32-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h
+++ devel/xtensa-esp32-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h
@@ -1,22 +1,12 @@
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
 Index: gdb/gdbsupport/enum-flags.h
 --- gdb/gdbsupport/enum-flags.h.orig
 +++ gdb/gdbsupport/enum-flags.h
-@@ -81,9 +81,12 @@ template<> struct integer_for_size<8, 1> { typedef int
- template<typename T>
+@@ -82,7 +82,7 @@ template<typename T>
  struct enum_underlying_type
  {
-+  DIAGNOSTIC_PUSH
-+  DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
    typedef typename
-     integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
+-    integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
++    integer_for_size<sizeof (T), (std::numeric_limits<T>::lowest() < 0)>::type
      type;
-+  DIAGNOSTIC_POP
  };
  
- template <typename E>
blob - 8c4b0d46e7bc95fb99299d7b18ffd1a9eba9fdea (mode 644)
blob + /dev/null
--- devel/xtensa-esp32-elf/gdb/patches/patch-include_diagnostics_h
+++ /dev/null
@@ -1,32 +0,0 @@
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
-Index: include/diagnostics.h
---- include/diagnostics.h.orig
-+++ include/diagnostics.h
-@@ -63,6 +63,11 @@
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
-   DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
- 
-+# if __has_warning ("-Wenum-constexpr-conversion")
-+#  define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION \
-+   DIAGNOSTIC_IGNORE ("-Wenum-constexpr-conversion")
-+# endif
-+
- #elif defined (__GNUC__) /* GCC */
- 
- # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
-@@ -102,6 +107,10 @@
- 
- #ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
-+#endif
-+
-+#ifndef DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
-+# define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
- #endif
- 
- #endif /* DIAGNOSTICS_H */
blob - a2bc179f1a22c91ad8896c6819c331e3d96a285e
blob + 7c055f2818a2efac475c03850a029aba1e727d2e
--- devel/xtensa-esp32s2-elf/gdb/Makefile
+++ devel/xtensa-esp32s2-elf/gdb/Makefile
@@ -2,7 +2,7 @@ COMMENT =       gdb for ${CONFIG} cross-development
 
 VERSION =      2.35.1.2021.2
 PKGNAME =      ${CONFIG}-gdb-${VERSION}
-REVISION =     0
+REVISION =     1
 
 GH_ACCOUNT =   espressif
 GH_PROJECT =   binutils-gdb
blob - 8d699ad955a9f986eed6d9b01ef5001fcd8dd744
blob + 8a154d935d86e172895e03e11dfc5acd26c408a4
--- devel/xtensa-esp32s2-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h
+++ devel/xtensa-esp32s2-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h
@@ -1,22 +1,12 @@
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
 Index: gdb/gdbsupport/enum-flags.h
 --- gdb/gdbsupport/enum-flags.h.orig
 +++ gdb/gdbsupport/enum-flags.h
-@@ -81,9 +81,12 @@ template<> struct integer_for_size<8, 1> { typedef int
- template<typename T>
+@@ -82,7 +82,7 @@ template<typename T>
  struct enum_underlying_type
  {
-+  DIAGNOSTIC_PUSH
-+  DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
    typedef typename
-     integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
+-    integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
++    integer_for_size<sizeof (T), (std::numeric_limits<T>::lowest() < 0)>::type
      type;
-+  DIAGNOSTIC_POP
  };
  
- template <typename E>
blob - 8c4b0d46e7bc95fb99299d7b18ffd1a9eba9fdea (mode 644)
blob + /dev/null
--- devel/xtensa-esp32s2-elf/gdb/patches/patch-include_diagnostics_h
+++ /dev/null
@@ -1,32 +0,0 @@
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
-Index: include/diagnostics.h
---- include/diagnostics.h.orig
-+++ include/diagnostics.h
-@@ -63,6 +63,11 @@
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
-   DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
- 
-+# if __has_warning ("-Wenum-constexpr-conversion")
-+#  define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION \
-+   DIAGNOSTIC_IGNORE ("-Wenum-constexpr-conversion")
-+# endif
-+
- #elif defined (__GNUC__) /* GCC */
- 
- # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
-@@ -102,6 +107,10 @@
- 
- #ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
-+#endif
-+
-+#ifndef DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
-+# define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
- #endif
- 
- #endif /* DIAGNOSTICS_H */
blob - a2bc179f1a22c91ad8896c6819c331e3d96a285e
blob + 7c055f2818a2efac475c03850a029aba1e727d2e
--- devel/xtensa-esp32s3-elf/gdb/Makefile
+++ devel/xtensa-esp32s3-elf/gdb/Makefile
@@ -2,7 +2,7 @@ COMMENT =       gdb for ${CONFIG} cross-development
 
 VERSION =      2.35.1.2021.2
 PKGNAME =      ${CONFIG}-gdb-${VERSION}
-REVISION =     0
+REVISION =     1
 
 GH_ACCOUNT =   espressif
 GH_PROJECT =   binutils-gdb
blob - 8d699ad955a9f986eed6d9b01ef5001fcd8dd744
blob + 8a154d935d86e172895e03e11dfc5acd26c408a4
--- devel/xtensa-esp32s3-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h
+++ devel/xtensa-esp32s3-elf/gdb/patches/patch-gdb_gdbsupport_enum-flags_h
@@ -1,22 +1,12 @@
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
 Index: gdb/gdbsupport/enum-flags.h
 --- gdb/gdbsupport/enum-flags.h.orig
 +++ gdb/gdbsupport/enum-flags.h
-@@ -81,9 +81,12 @@ template<> struct integer_for_size<8, 1> { typedef int
- template<typename T>
+@@ -82,7 +82,7 @@ template<typename T>
  struct enum_underlying_type
  {
-+  DIAGNOSTIC_PUSH
-+  DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
    typedef typename
-     integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
+-    integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
++    integer_for_size<sizeof (T), (std::numeric_limits<T>::lowest() < 0)>::type
      type;
-+  DIAGNOSTIC_POP
  };
  
- template <typename E>
blob - 8c4b0d46e7bc95fb99299d7b18ffd1a9eba9fdea (mode 644)
blob + /dev/null
--- devel/xtensa-esp32s3-elf/gdb/patches/patch-include_diagnostics_h
+++ /dev/null
@@ -1,32 +0,0 @@
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
-Index: include/diagnostics.h
---- include/diagnostics.h.orig
-+++ include/diagnostics.h
-@@ -63,6 +63,11 @@
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
-   DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
- 
-+# if __has_warning ("-Wenum-constexpr-conversion")
-+#  define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION \
-+   DIAGNOSTIC_IGNORE ("-Wenum-constexpr-conversion")
-+# endif
-+
- #elif defined (__GNUC__) /* GCC */
- 
- # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
-@@ -102,6 +107,10 @@
- 
- #ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
-+#endif
-+
-+#ifndef DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
-+# define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
- #endif
- 
- #endif /* DIAGNOSTICS_H */
blob - 38088026951cf934adc8e854df110b24ac29fcfa
blob + dc46213287e5bcfc745042f5e8ba4bc87f512238
--- devel/xtensa-lx106-elf/binutils/Makefile
+++ devel/xtensa-lx106-elf/binutils/Makefile
@@ -5,7 +5,7 @@ COMMENT =       binutils for ${CONFIG} cross-development
 VERSION =      2.32
 DISTNAME =     binutils-${VERSION}
 PKGNAME =      ${CONFIG}-binutils-${VERSION}
-REVISION =     1
+REVISION =     2
 
 GH_ACCOUNT =   bminor
 GH_PROJECT =   binutils-gdb
blob - 21ded931692cd932e669c11e144939d7283f2eea
blob + 97c1064e28c101ca733095fbb57c4751e5e7d6ab
--- devel/xtensa-lx106-elf/binutils/patches/patch-gdb_common_enum-flags_h
+++ devel/xtensa-lx106-elf/binutils/patches/patch-gdb_common_enum-flags_h
@@ -1,22 +1,12 @@
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
 Index: gdb/common/enum-flags.h
 --- gdb/common/enum-flags.h.orig
 +++ gdb/common/enum-flags.h
-@@ -81,9 +81,12 @@ template<> struct integer_for_size<8, 1> { typedef int
- template<typename T>
+@@ -82,7 +82,7 @@ template<typename T>
  struct enum_underlying_type
  {
-+  DIAGNOSTIC_PUSH
-+  DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
    typedef typename
-     integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
+-    integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
++    integer_for_size<sizeof (T), (std::numeric_limits<T>::lowest() < 0)>::type
      type;
-+  DIAGNOSTIC_POP
  };
  
- template <typename E>
blob - 8c4b0d46e7bc95fb99299d7b18ffd1a9eba9fdea (mode 644)
blob + /dev/null
--- devel/xtensa-lx106-elf/binutils/patches/patch-include_diagnostics_h
+++ /dev/null
@@ -1,32 +0,0 @@
-From ae61525fcf456ab395d55c45492a106d1275873a Mon Sep 17 00:00:00 2001
-From: Simon Marchi <[email protected]>
-Date: Thu, 23 Feb 2023 12:35:40 -0500
-Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
- enum-flags.h
-
-Index: include/diagnostics.h
---- include/diagnostics.h.orig
-+++ include/diagnostics.h
-@@ -63,6 +63,11 @@
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
-   DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
- 
-+# if __has_warning ("-Wenum-constexpr-conversion")
-+#  define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION \
-+   DIAGNOSTIC_IGNORE ("-Wenum-constexpr-conversion")
-+# endif
-+
- #elif defined (__GNUC__) /* GCC */
- 
- # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
-@@ -102,6 +107,10 @@
- 
- #ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
- # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
-+#endif
-+
-+#ifndef DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
-+# define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
- #endif
- 
- #endif /* DIAGNOSTICS_H */
-- 
Christian "naddy" Weisgerber                          [email protected]

Reply via email to