Thanks for bringing this to my attention. I am working on a fix. Will keep this thread posted. Clang *does* define this macro only when float128 type is available. But the problem seems to be that clang doesn't define _Float128 alias type which is what's being used here. It only defines __float128 type. Should be easy to fix. On Wed, Oct 4, 2023 at 8:56 AM Jonathan Wakely wrote: > On Wed, 4 Oct 2023 at 16:54, Stephan Bergmann wrote: > > > > On 8/17/23 22:32, Jonathan Wakely via Libstdc++ wrote: > > > Tested x86_64-linux. Pushed to trunk. > > > > > > -- >8 -- > > > > > > The extended floating-point types such as _Float32 are supported by GCC > > > prior to C++23, you just can't use the standard-conforming names from > > > to refer to them. This change defines the specializations of > > > std::numeric_limits for those types for older dialects, not only for > > > C++23. > > > > > > libstdc++-v3/ChangeLog: > > > > > > * include/bits/c++config (__gnu_cxx::__bfloat16_t): Define > > > whenever __BFLT16_DIG__ is defined, not only for C++23. > > > * include/std/limits (numeric_limits): Likewise. > > > (numeric_limits<_Float16>, numeric_limits<_Float32>) > > > (numeric_limits<_Float64>): Likewise for other extended > > > floating-point types. > > > --- > > > libstdc++-v3/include/bits/c++config | 4 +- > > > libstdc++-v3/include/std/limits | 194 > +++++++++++++++------------- > > > 2 files changed, 103 insertions(+), 95 deletions(-) > > > > > [...] > > > diff --git a/libstdc++-v3/include/std/limits > b/libstdc++-v3/include/std/limits > > > index 52b19ef8264..7a59e7520eb 100644 > > > --- a/libstdc++-v3/include/std/limits > > > +++ b/libstdc++-v3/include/std/limits > > > @@ -1890,189 +1890,197 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > [...] > > > __glibcxx_float_n(64) > > > #endif > > > -#ifdef __STDCPP_FLOAT128_T__ > > > +#ifdef __FLT128_DIG__ > > > __glibcxx_float_n(128) > > > #endif > > > #undef __glibcxx_float_n > > [...] > > > > The above change (from __STDCPP_FLOAT128_T__ to __FLT128_DIG__) now > > started to cause issues with Clang on Clang 18 trunk: > > > > * Clang does not support a _Float128 type. > > > > * Clang does not predefine __STDCPP_FLOAT128_T__. > > > > * But since > > < > https://github.com/llvm/llvm-project/commit/457f582ffe23e951380bc345c4c96ec053c09681 > > > > "[clang] Predefined macros for float128 support (#67196)", Clang 18 > > trunk does predefine __FLT128_DIG__ now. Which causes > > > > > $ cat test.cc > > > #include > > > > > $ clang++ -fsyntax-only test.cc > > > In file included from test.cc:1: > > > > /home/sbergman/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/14.0.0/../../../../include/c++/14.0.0/limits:1995:1: > error: use of undeclared identifier '_Float128' > > > 1995 | __glibcxx_float_n(128) > > > | ^ > > > > /home/sbergman/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/14.0.0/../../../../include/c++/14.0.0/limits:1903:27: > note: expanded from macro '__glibcxx_float_n' > > > 1903 | struct numeric_limits<_Float##BITSIZE> > \ > > > | ^ > > > :36:1: note: expanded from here > > > 36 | _Float128 > > > | ^ > > > 1 error generated. > > > > (I don't know whether or not it is useful for Clang to predefine > > __FLT128_DIG__ when not providing a _Float128 type. I assume > > "ISO/IEC TS 18661-3:2015", as > > referenced by the C++ standard, might be relevant here, but don't know > > that document. I added Pranav, the author of the relevant Clang commit, > > in cc here.) > > > It's completely wrong or Clang to define a macro describing properties > of a non-existent type. > > This was reported as > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111687 and closed as > INVALID, it needs to be fixed in Clang. > > > > > >