https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115122

            Bug ID: 115122
           Summary: Incorrect detection of C99 support when
                    cross-compiling
           Product: gcc
           Version: 13.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tomas.kalibera at gmail dot com
  Target Milestone: ---

Created attachment 58219
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58219&action=edit
docker file that reproduces the problem (libstdc++ doesn't use C99 complex
functions which are available)

When cross-compiling a native toolchain, configuration of libstdc++ incorrectly
concludes that there is no C99 support (which then triggers Bug 115117).

I've ran into this when building a native toolchain (to run on Windows, produce
code for Windows) on a Linux machine. Configure in libstdc++ builds a test
program as follows:

x86_64-w64-mingw32-c++ -L/opt/gcc-mingw/native/x86_64-w64-mingw32/lib
-L/opt/gcc-mingw/native/mingw/lib -isystem
/opt/gcc-mingw/native/x86_64-w64-mingw32/include -isystem
/opt/gcc-mingw/native/mingw/include -o conftest.exe -g -O2 -std=c++11
-fno-exceptions   conftest.cpp  -lm >&5

so, it tries to build the configure test using the cross-compiler, including
the "-std=c++11" argument but not including "-nostdinc++". That way, C99
functions would appear not available, and the test would fail.

I've attached a docker file that reproduces the problem. It ends by showing
that "c++config.h" ends up with undefined _GLIBCXX11_USE_C99_COMPLEX and also
copies the corresponding lines from the config.log of libstdc++.

The docker file also builds a cross-compiler (to cross-compile the native
compiler), so one can see that in the cross-compilation, the configure tests
run as

/build/gcc/build-x86_64/./gcc/xgcc -shared-libgcc
-B/build/gcc/build-x86_64/./gcc -nostdinc++
-L/build/gcc/build-x86_64/x86_64-w64-mingw32/libstdc++-v3/src
-L/build/gcc/build-x86_64/x86_64-w64-mingw32/libstdc++-v3/src/.libs
-L/build/gcc/build-x86_64/x86_64-w64-mingw32/libstdc++-v3/libsupc++/.libs
-L/opt/gcc-mingw/x86_64-w64-mingw32/lib -L/opt/gcc-mingw/mingw/lib -isystem
/opt/gcc-mingw/x86_64-w64-mingw32/include -isystem /opt/gcc-mingw/mingw/include
-B/opt/gcc-mingw/x86_64-w64-mingw32/bin/
-B/opt/gcc-mingw/x86_64-w64-mingw32/lib/ -isystem
/opt/gcc-mingw/x86_64-w64-mingw32/include -isystem
/opt/gcc-mingw/x86_64-w64-mingw32/sys-include    -o conftest.exe -g -O2
-std=c++11 -fno-exceptions   conftest.cpp  -lm >&5

and succeeds. Note, it uses "-nostdinc++".

Reply via email to