https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90542
Bug ID: 90542 Summary: Build with --enable-libstdcxx-debug fails on Solaris due to symbol conflicts Product: gcc Version: 10.0 Status: UNCONFIRMED Keywords: build Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org CC: ro at gcc dot gnu.org Target Milestone: --- /bin/sh ../../libtool --tag CXX --mode=link /export/home/jwakely/build/./gcc/xgcc -shared-libgcc -B/export/home/jwakely/build/./gcc -nostdinc++ -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/src -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/src/.libs -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/libsupc++/.libs -B/export/home/jwakely/gcc/9.1.0/sparc-sun-solaris2.11/bin/ -B/export/home/jwakely/gcc/9.1.0/sparc-sun-solaris2.11/lib/ -isystem /export/home/jwakely/gcc/9.1.0/sparc-sun-solaris2.11/include -isystem /export/home/jwakely/gcc/9.1.0/sparc-sun-solaris2.11/sys-include -fno-checking -std=gnu++98 -fPIC -DPIC -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi=2 -fdiagnostics-show-location=once -ffunction-sections -fdata-sections -frandom-seed=libstdc++.la -o libstdc++.la -version-info 6:26:0 -Wl,-M,libstdc++-symbols.ver-sun -lm -rpath /export/home/jwakely/gcc/9.1.0/lib/debug compatibility.lo compatibility-debug_list.lo compatibility-debug_list-2.lo compatibility-c++0x.lo compatibility-atomic-c++0x.lo compatibility-thread-c++0x.lo compatibility-chrono.lo compatibility-condvar.lo -lrt ../../libsupc++/libsupc++convenience.la ../../src/debug/c++98/libc++98convenience.la ../../src/debug/c++11/libc++11convenience.la ../../src/debug/c++17/libc++17convenience.la libtool: link: /export/home/jwakely/build/./gcc/xgcc -shared-libgcc -B/export/home/jwakely/build/./gcc -nostdinc++ -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/src -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/src/.libs -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/libsupc++/.libs -B/export/home/jwakely/gcc/9.1.0/sparc-sun-solaris2.11/bin/ -B/export/home/jwakely/gcc/9.1.0/sparc-sun-solaris2.11/lib/ -isystem /export/home/jwakely/gcc/9.1.0/sparc-sun-solaris2.11/include -isystem /export/home/jwakely/gcc/9.1.0/sparc-sun-solaris2.11/sys-include -fno-checking -shared -nostdlib /usr/lib/crti.o /export/home/jwakely/build/./gcc/crtbegin.o .libs/compatibility.o .libs/compatibility-debug_list.o .libs/compatibility-debug_list-2.o .libs/compatibility-c++0x.o .libs/compatibility-atomic-c++0x.o .libs/compatibility-thread-c++0x.o .libs/compatibility-chrono.o .libs/compatibility-condvar.o -Wl,-z -Wl,allextract ../../libsupc++/.libs/libsupc++convenience.a ../../src/debug/c++98/.libs/libc++98convenience.a ../../src/debug/c++11/.libs/libc++11convenience.a ../../src/debug/c++17/.libs/libc++17convenience.a -Wl,-z -Wl,defaultextract -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/libsupc++/.libs -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/src -L/export/home/jwakely/build/sparc-sun-solaris2.11/libstdc++-v3/src/.libs -lm -lrt -L/export/home/jwakely/build/./gcc -lgcc_s -lc -lgcc_s -lc /export/home/jwakely/build/./gcc/crtend.o /usr/lib/crtn.o -Wl,-M -Wl,libstdc++-symbols.ver-sun -Wl,-h -Wl,libstdc++.so.6 -o .libs/libstdc++.so.6.0.26 ld: fatal: libstdc++-symbols.ver-sun: 5381: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5382: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5399: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5400: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5413: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert<std::basic_string_view<char, std::char_traits<char> > >(unsigned int, std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5414: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert<std::basic_string_view<char, std::char_traits<char> > >(unsigned int, std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5609: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5610: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5616: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5617: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&)': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5685: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, int>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&) const': symbol version conflict ld: fatal: libstdc++-symbols.ver-sun: 5686: symbol 'std::enable_if<std::__and_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, std::basic_string_view<char, std::char_traits<char> > >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*> >, std::__not_<std::is_convertible<std::basic_string_view<char, std::char_traits<char> > const&, char const*> > >::value, int>::type std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> > const&) const': symbol version conflict collect2: error: ld returned 1 exit status These symbols are present in the src/debug/.libs library, because it's built without optimization so there are additional template instantiations that aren't inlined away. The conflicts are all due to "std::enable_if" in a return type matching the pattern std::e[a-q]* (line 83). This is probably wrong on all targets, but the linker only gives an error on Solaris.