On Fri, 6 Feb 2026, Torbjorn SVENSSON wrote:

> 
> 
> On 2026-01-30 18:00, Richard Biener wrote:
> > 
> > 
> >> Am 30.01.2026 um 18:00 schrieb Torbjörn SVENSSON
> >> <[email protected]>:
> >>
> >> Changes since v1:
> >>
> >> - Moved `#undef CONST_CAST2` to right after `#include <memory>`
> >> - Renamed internal copy of CONST_CAST2 to GTHR_CONST_CAST in gthr-win32.h
> >>   and gthr-dce.h. Also undef GTHR_CONST_CAST at the end of the header
> >>   file to avoid pollution.
> >>
> >> Ok for trunk and release/gcc-15?
> > 
> > Ok.  Please leave others time to comment.
> 
> I suppose enough time has passed now.
> With https://gcc.gnu.org/pipermail/gcc-patches/2026-February/707812.html
> merged to trunk, this is only relevant for releases/gcc-15.
> 
> As I removed CONST_CAST2 in gthr-win32.h and gthr-dce.h on master, maybe I
> should drop the changes in those files in this patch and only leave the #undef
> change for releases/gcc-15?
> After all, if CONST_CAST2 is undefined when the definition in system.h takes
> place, none of the other usages matters.
> 
> Let me know what you think.

That works for me.

> Kind regards,
> Torbjörn
> 
> > 
> > Thanks,
> > 
> > Richard
> > 
> >>
> >> --
> >>
> >> When building GCC with host=mingw, the following warning can be seen
> >> multiple times in the build log if the MinGW GCC version is older than
> >> r13-4881-g9149a5b7e0a:
> >>
> >> In file included from /build/gcc/c/c-typeck.cc:27:0:
> >> /build/gcc/system.h:1172:0: warning: "CONST_CAST2" redefined
> >> #define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
> >>
> >> In file included from
> >> /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/include/c++/x86_64-w64-mingw32/bits/gthr.h:148:0,
> >>                  from
> >>                  
> >> /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/include/c++/ext/atomicity.h:35,
> >>                  from
> >>                  
> >> /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/include/c++/memory:73,
> >>                  from /build/gcc/gcc/system.h:231,
> >>                  from /build/gcc/gcc/c/c-typeck.cc:27:
> >> /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/include/c++/x86_64-w64-mingw32/bits/gthr-default.h:33:0:
> >> note: this is the location of the previous definition
> >> #define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q;
> >> TOTYPE _nq;})(X))._nq)
> >>
> >> To ensure that the recent definition is used, always undefine any
> >> potential define before defining the new macro.
> >>
> >> gcc/ChangeLog:
> >>
> >>     * system.h: Avoid redefinition of CONST_CAST2 macro.
> >>
> >> libgcc/ChangeLog:
> >>
> >>     * config/i386/gthr-win32.h: Don't leak internal copy of
> >>     CONST_CAST2 macro.
> >>     * config/pa/gthr-dce.h: Likewise.
> >>
> >> Signed-off-by: Torbjörn SVENSSON <[email protected]>
> >> ---
> >> gcc/system.h                    |  6 ++++++
> >> libgcc/config/i386/gthr-win32.h | 13 ++++++++-----
> >> libgcc/config/pa/gthr-dce.h     | 13 ++++++++-----
> >> 3 files changed, 22 insertions(+), 10 deletions(-)
> >>
> >> diff --git a/gcc/system.h b/gcc/system.h
> >> index 588e65453f5..a6233a353d6 100644
> >> --- a/gcc/system.h
> >> +++ b/gcc/system.h
> >> @@ -229,6 +229,12 @@ extern int fprintf_unlocked (FILE *, const char *,
> >> ...);
> >> #include <sstream>
> >> #endif
> >> # include <memory>
> >> +
> >> +/* Some older versions of GCC used to expose an internal copy of the
> >> +   CONST_CAST2 macro that might be incompatible with the current version
> >> of the
> >> +   GCC sources.  */
> >> +#undef CONST_CAST2
> >> +
> >> # include <cstring>
> >> # include <initializer_list>
> >> # include <new>
> >> diff --git a/libgcc/config/i386/gthr-win32.h
> >> b/libgcc/config/i386/gthr-win32.h
> >> index 633dff7ed73..0846838e655 100644
> >> --- a/libgcc/config/i386/gthr-win32.h
> >> +++ b/libgcc/config/i386/gthr-win32.h
> >> @@ -86,12 +86,12 @@ see the files COPYING3 and COPYING.RUNTIME
> >> respectively.  If not, see
> >> #define __GTHREAD_INLINE static inline
> >> #endif
> >>
> >> -/* Make sure CONST_CAST2 (origin in system.h) is declared.  */
> >> -#ifndef CONST_CAST2
> >> +/* Make sure GTHR_CONST_CAST (origin in system.h) is declared.  */
> >> +#ifndef GTHR_CONST_CAST
> >> #ifdef __cplusplus
> >> -#define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
> >> +#define GTHR_CONST_CAST(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
> >> #else
> >> -#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q;
> >> TOTYPE _nq;})(X))._nq)
> >> +#define GTHR_CONST_CAST(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE
> >> _q; TOTYPE _nq;})(X))._nq)
> >> #endif
> >> #endif
> >>
> >> @@ -720,7 +720,7 @@ __gthread_getspecific (__gthread_key_t __key)
> >> __GTHREAD_WIN32_INLINE int
> >> __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
> >> {
> >> -  if (TlsSetValue (__key, CONST_CAST2(void *, const void *, __ptr)))
> >> +  if (TlsSetValue (__key, GTHR_CONST_CAST(void *, const void *, __ptr)))
> >>      return 0;
> >>    else
> >>      return (int) GetLastError ();
> >> @@ -886,4 +886,7 @@ __gthread_cond_wait_recursive (__gthread_cond_t
> >> *__cond,
> >>
> >> #endif /* _LIBOBJC */
> >>
> >> +/* Don't leak internal macro.  */
> >> +#undef GTHR_CONST_CAST
> >> +
> >> #endif /* ! GCC_GTHR_WIN32_H */
> >> diff --git a/libgcc/config/pa/gthr-dce.h b/libgcc/config/pa/gthr-dce.h
> >> index b21ea8336c7..e53894ac9c7 100644
> >> --- a/libgcc/config/pa/gthr-dce.h
> >> +++ b/libgcc/config/pa/gthr-dce.h
> >> @@ -36,12 +36,12 @@ see the files COPYING3 and COPYING.RUNTIME
> >> respectively.  If not, see
> >>     DCE threads are based on POSIX threads draft 4, and many things
> >>     have changed since then.  */
> >>
> >> -/* Make sure CONST_CAST2 (original in system.h) is defined.  */
> >> -#ifndef CONST_CAST2
> >> +/* Make sure GTHR_CONST_CAST (origin in system.h) is declared.  */
> >> +#ifndef GTHR_CONST_CAST
> >> #ifdef __cplusplus
> >> -#define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
> >> +#define GTHR_CONST_CAST(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
> >> #else
> >> -#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q;
> >> TOTYPE _nq;})(X))._nq)
> >> +#define GTHR_CONST_CAST(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE
> >> _q; TOTYPE _nq;})(X))._nq)
> >> #endif
> >> #endif
> >>
> >> @@ -471,7 +471,7 @@ static inline int
> >> __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
> >> {
> >>    return __gthrw_(pthread_setspecific)
> >> -    (__key, CONST_CAST2(void *, const void *, __ptr));
> >> +    (__key, GTHR_CONST_CAST(void *, const void *, __ptr));
> >> }
> >>
> >> static inline void
> >> @@ -564,5 +564,8 @@ __gthread_recursive_mutex_destroy
> >> (__gthread_recursive_mutex_t *__mutex)
> >>
> >> #endif /* _LIBOBJC */
> >>
> >> +/* Don't leak internal macro.  */
> >> +#undef GTHR_CONST_CAST
> >> +
> >> #endif
> >> #endif /* ! GCC_GTHR_DCE_H */
> >> --
> >> 2.43.0
> >>
> 
> 

-- 
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to