On Mon, 16 Mar 2026, Jonathan Wakely wrote:
> This ensures that the module init functions are present in libstdc++.so
> and libstdc++.a, so that users of the std and std.compat modules don't
> need to manually link to std.o and/or std.compat.o in addition to
> compiling the CMIs.
:
> libstdc++-v3/ChangeLog:
> 
>       PR libstdc++/124268
>       * config/abi/pre/gnu.ver: Export symbols.
>       * src/Makefile.am: Add libmodulesconvenience.la to libstdc++
>       link.
>       * src/Makefile.in: Regenerate.
>       * src/c++23/Makefile.am: Create libmodulesconvenience.la
>       and populate it with std.o and std.compat.o interface units.
>       Add clean-local target.
>       * src/c++23/Makefile.in: Regenerate.

It looks like this broke bootstrap on FreeBSD 13/amd64:

libtool: link: ( cd ".libs" && rm -f "libc++23convenience.la" && ln -s 
"../libc++23convenience.la" "libc++23convenience.la" )
std.cc:3799:14: error: exporting 'int feclearexcept(int)' that does not have 
external linkage
 3799 |   using std::feclearexcept;
      |              ^~~~~~~~~~~~~
In file included from 
/scratch/tmp/gerald/OBJ-0317-0208/x86_64-unknown-freebsd13.5/libstdc++-v3/include/fenv.h:41,
                 from 
/scratch/tmp/gerald/OBJ-0317-0208/x86_64-unknown-freebsd13.5/libstdc++-v3/include/cfenv:43,
                 from 
/scratch/tmp/gerald/OBJ-0317-0208/x86_64-unknown-freebsd13.5/libstdc++-v3/include/x86_64-unknown-freebsd13.5/bits/stdc++.h:123,
                 from std.cc:26:
/usr/include/fenv.h:265:1: note: 'int feclearexcept(int)' declared here with 
internal linkage
  265 | feclearexcept(int __excepts)
      | ^~~~~~~~~~~~~
std.cc:3801:14: error: exporting 'int fegetexceptflag(fexcept_t*, int)' that 
does not have external linkage
 3801 |   using std::fegetexceptflag;
      |              ^~~~~~~~~~~~~~~
/usr/include/fenv.h:283:1: note: 'int fegetexceptflag(fexcept_t*, int)' 
declared here with internal linkage
  283 | fegetexceptflag(fexcept_t *__flagp, int __excepts)
      | ^~~~~~~~~~~~~~~
  :
gmake[2]: *** [Makefile:17779: all-stage1-target-libstdc++-v3] Error 2
gmake[2]: Leaving directory '/scratch/tmp/gerald/OBJ-0317-0208'
gmake[1]: *** [Makefile:26906: stage1-bubble] Error 2
gmake[1]: Leaving directory '/scratch/tmp/gerald/OBJ-0317-0208'
gmake: *** [Makefile:27243: bootstrap] Error 2


Looking at /usr/include/fenv.h I see

  #ifndef __fenv_static
  #define __fenv_static   static
  #endif

  :

  __fenv_static inline int
  feclearexcept(int __excepts)
  {
  :
  }

I also found the same on a FreeBSD 15 system, so it's not just that older 
release which is going to be EOL in two months.


Setting HEAD to

  commit c351a240ad514199b17b56e1ecff20701d956643 (HEAD)
  Author: Jonathan Wakely <[email protected]>
  Date:   Thu Mar 12 15:15:57 2026 +0000

    libstdc++: Make ranges::distance work with volatile iterators (LWG 4242)

proceeds beyond that breakage.


In case this makes a difference, cc and c++ are clang version 19.1.7.

Gerald

Reply via email to