[cfe-dev] clang confused by GCC 8

Dmitry Babokin via cfe-dev cfe-dev at lists.llvm.org
Mon Dec 4 14:14:37 PST 2017


I build with --gcc-toolchain set to directory with gcc8 installation and it
works well for me.

On Tue, Nov 28, 2017 at 1:27 AM, Csaba Raduly via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Hi all,
>
> After building and installing GCC trunk (GCC 8), clang doesn't find
> the Standard C++ Library any more:
>
> /tmp$ cat > strm.cpp
> #include <iostream>
> ^D
>
> /tmp$ /usr/local/bin/clang++ -v strm.cpp
> clang version 6.0.0 (trunk 319018)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> InstalledDir: /usr/local/bin
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.5
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.2.0
> Found candidate GCC installation:
> /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.0.0
> Selected GCC installation: /usr/local/bin/../lib/gcc/x86_
> 64-pc-linux-gnu/8.0.0
> Candidate multilib: .;@m64
> Candidate multilib: 32;@m32
> Selected multilib: .;@m64
>  "/usr/local/bin/clang-6.0" -cc1 -triple x86_64-unknown-linux-gnu
> -emit-obj -mrelax-all -disable-free -main-file-name strm.cpp
> -mrelocation-model static -mthread-model posix -mdisable-fp-elim
> -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables
> -fuse-init-array -target-cpu x86-64 -dwarf-column-info
> -debugger-tuning=gdb -v -resource-dir /usr/local/lib/clang/6.0.0
> -internal-isystem /usr/local/include -internal-isystem
> /usr/local/lib/clang/6.0.0/include -internal-externc-isystem
> /usr/include/x86_64-linux-gnu -internal-externc-isystem /include
> -internal-externc-isystem /usr/include -fdeprecated-macro
> -fdebug-compilation-dir /tmp -ferror-limit 19 -fmessage-length 271
> -fobjc-runtime=gcc -fcxx-exceptions -fexceptions
> -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/strm-ba92aa.o -x
> c++ strm.cpp
> clang -cc1 version 6.0.0 based upon LLVM 6.0.0svn default target
> x86_64-unknown-linux-gnu
> ignoring nonexistent directory "/include"
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/local/include
>  /usr/local/lib/clang/6.0.0/include
>  /usr/include/x86_64-linux-gnu
>  /usr/include
> End of search list.
> strm.cpp:1:10: fatal error: 'iostream' file not found
> #include <iostream>
>          ^~~~~~~~~~
>
> For some reason, GCC8's include directories are not used, despite
> "Selected GCC installation:
> /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.0.0". Not even
> ``ignoring nonexistent directory`` is printed (unless the ``ignoring
> nonexistent directory "/include" `` was clang's attempt to use the
> GCC8 installation).
>
> $ find /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.0.0/ -name iostream
> /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.0.0/include/c++/iostream
>
>
> If I hide /usr/local/lib/gcc/x86_64-pc-linux-gnu/8.0.0 (to simulate
> the state before I built and installed GCC 8), then it works:
>
> /tmp$ /usr/local/bin/clang++ -v strm.cpp
> clang version 6.0.0 (trunk 319018)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> InstalledDir: /usr/local/bin
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.5
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.2.0
> Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.2.0
> Candidate multilib: .;@m64
> Candidate multilib: 32;@m32
> Candidate multilib: x32;@mx32
> Selected multilib: .;@m64
>  "/usr/local/bin/clang-6.0" -cc1 -triple x86_64-unknown-linux-gnu
> -emit-obj -mrelax-all -disable-free -main-file-name strm.cpp
> -mrelocation-model static -mthread-model posix -mdisable-fp-elim
> -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables
> -fuse-init-array -target-cpu x86-64 -dwarf-column-info
> -debugger-tuning=gdb -v -resource-dir /usr/local/lib/clang/6.0.0
> -internal-isystem
> /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0
> -internal-isystem
> /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_
> 64-linux-gnu/c++/7.2.0
> -internal-isystem
> /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_
> 64-linux-gnu/c++/7.2.0
> -internal-isystem
> /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0/backward
> -internal-isystem /usr/local/include -internal-isystem
> /usr/local/lib/clang/6.0.0/include -internal-externc-isystem
> /usr/include/x86_64-linux-gnu -internal-externc-isystem /include
> -internal-externc-isystem /usr/include -fdeprecated-macro
> -fdebug-compilation-dir /tmp -ferror-limit 19 -fmessage-length 271
> -fobjc-runtime=gcc -fcxx-exceptions -fexceptions
> -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/strm-c79a25.o -x
> c++ strm.cpp
> clang -cc1 version 6.0.0 based upon LLVM 6.0.0svn default target
> x86_64-unknown-linux-gnu
> ignoring nonexistent directory "/include"
> ignoring duplicate directory
> "/usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/
> x86_64-linux-gnu/c++/7.2.0"
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/7.2.0
>  /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/x86_
> 64-linux-gnu/c++/7.2.0
>  /usr/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../include/c++/
> 7.2.0/backward
>  /usr/local/include
>  /usr/local/lib/clang/6.0.0/include
>  /usr/include/x86_64-linux-gnu
>  /usr/include
> End of search list.
> (success)
>
>
> I tried passing --gcc-toolchain set to the directory selected in the
> absence of GCC 8, but it didn't work. The only effect seems to be to
> stop searching for GCC installations :
>
> /tmp$ /usr/local/bin/clang++
> --gcc-toolchain=/usr/lib/gcc/x86_64-linux-gnu/7.2.0 -v strm.cpp
> clang version 6.0.0 (trunk 319018)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> InstalledDir: /usr/local/bin
>  "/usr/local/bin/clang-6.0" -cc1 -triple x86_64-unknown-linux-gnu
> -emit-obj -mrelax-all -disable-free -main-file-name strm.cpp
> -mrelocation-model static -mthread-model posix -mdisable-fp-elim
> -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables
> -fuse-init-array -target-cpu x86-64 -dwarf-column-info
> -debugger-tuning=gdb -v -resource-dir /usr/local/lib/clang/6.0.0
> -internal-isystem /usr/local/include -internal-isystem
> /usr/local/lib/clang/6.0.0/include -internal-externc-isystem
> /usr/include/x86_64-linux-gnu -internal-externc-isystem /include
> -internal-externc-isystem /usr/include -fdeprecated-macro
> -fdebug-compilation-dir /tmp -ferror-limit 19 -fmessage-length 271
> -fobjc-runtime=gcc -fcxx-exceptions -fexceptions
> -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/strm-241a36.o -x
> c++ strm.cpp
> clang -cc1 version 6.0.0 based upon LLVM 6.0.0svn default target
> x86_64-unknown-linux-gnu
> ignoring nonexistent directory "/include"
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/local/include
>  /usr/local/lib/clang/6.0.0/include
>  /usr/include/x86_64-linux-gnu
>  /usr/include
> End of search list.
> strm.cpp:1:10: fatal error: 'iostream' file not found
> #include <iostream>
>          ^~~~~~~~~~
>
>
> This is an Ubuntu 17.10 machine whose system compiler is GCC 7.2:
>
> /tmp$ g++ -v
> Using built-in specs.
> COLLECT_GCC=g++
> COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
> OFFLOAD_TARGET_NAMES=nvptx-none
> OFFLOAD_TARGET_DEFAULT=1
> Target: x86_64-linux-gnu
> Configured with: ../src/configure -v --with-pkgversion='Ubuntu
> 7.2.0-8ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs
> --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++
> --prefix=/usr --with-gcc-major-version-only --program-suffix=-7
> --program-prefix=x86_64-linux-gnu- --enable-shared
> --enable-linker-build-id --libexecdir=/usr/lib
> --without-included-gettext --enable-threads=posix --libdir=/usr/lib
> --enable-nls --with-sysroot=/ --enable-clocale=gnu
> --enable-libstdcxx-debug --enable-libstdcxx-time=yes
> --with-default-libstdcxx-abi=new --enable-gnu-unique-object
> --disable-vtable-verify --enable-libmpx --enable-plugin
> --enable-default-pie --with-system-zlib --with-target-system-zlib
> --enable-objc-gc=auto --enable-multiarch --disable-werror
> --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32
> --enable-multilib --with-tune=generic
> --enable-offload-targets=nvptx-none --without-cuda-driver
> --enable-checking=release --build=x86_64-linux-gnu
> --host=x86_64-linux-gnu --target=x86_64-linux-gnu
> Thread model: posix
> gcc version 7.2.0 (Ubuntu 7.2.0-8ubuntu3)
>
>
> This is how GCC 8 was configured:
>
> /tmp$ g++-8 -v
> Using built-in specs.
> COLLECT_GCC=g++-8
> COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-
> linux-gnu/8.0.0/lto-wrapper
> Target: x86_64-pc-linux-gnu
> Configured with: ../trunk/configure --program-suffix=-8
> --enable-version-specific-runtime-libs --enable-languages=c,c++,lto :
> (reconfigured) ../trunk/configure --program-suffix=-8
> --enable-version-specific-runtime-libs --enable-languages=c,c++,lto
> Thread model: posix
> gcc version 8.0.0 20171124 (experimental) (GCC)
>
> Any ideas?
>
> Csaba
> --
> GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++
> The Tao of math: The numbers you can count are not the real numbers.
> Life is complex, with real and imaginary parts.
> "Ok, it boots. Which means it must be bug-free and perfect. " -- Linus
> Torvalds
> "People disagree with me. I just ignore them." -- Linus Torvalds
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171204/90550523/attachment.html>


More information about the cfe-dev mailing list