LLVM Bugzilla is read-only and represents the historical archive of all LLVM issues filled before November 26, 2021. Use github to submit LLVM bugs

Bug 19289 - Clang fails to find 32-bit C++ system headers on Ubuntu 13.10
Summary: Clang fails to find 32-bit C++ system headers on Ubuntu 13.10
Status: RESOLVED FIXED
Alias: None
Product: clang
Classification: Unclassified
Component: Driver (show other bugs)
Version: trunk
Hardware: PC Linux
: P normal
Assignee: Ling Kun
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-03-31 05:57 PDT by Evgenii Stepanov
Modified: 2014-08-27 03:46 PDT (History)
4 users (show)

See Also:
Fixed By Commit(s):


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Evgenii Stepanov 2014-03-31 05:57:45 PDT
Again, C++ system header path has changed.
Ubuntu 13.10 x86_64 has:

/usr/include/i386-linux-gnu
/usr/include/x86_64-linux-gnu
/usr/lib/i386-linux-gnu
/usr/lib/x86_64-linux-gnu

but

/usr/lib/gcc/i686-linux-gnu
/usr/lib/gcc/x86_64-linux-gnu

clang++ -m32 test.cc fails to find bits/c++config.h
Comment 1 Ling Kun 2014-04-01 00:47:18 PDT
Try to solve this bug as a fresh man  to LLVM/Clang.
Comment 2 Ling Kun 2014-04-01 00:47:46 PDT
change the status to assigned.
Comment 3 Ling Kun 2014-04-04 19:51:30 PDT
(In reply to comment #0)
> Again, C++ system header path has changed.
> Ubuntu 13.10 x86_64 has:
> 
> /usr/include/i386-linux-gnu
> /usr/include/x86_64-linux-gnu
> /usr/lib/i386-linux-gnu
> /usr/lib/x86_64-linux-gnu
> 
> but
> 
> /usr/lib/gcc/i686-linux-gnu
> /usr/lib/gcc/x86_64-linux-gnu
> 
> clang++ -m32 test.cc fails to find bits/c++config.h

Can not reproduce your problem.
$ uname -a
Linux lingkun-ThinkPad-X200 3.11.0-19-generic #33-Ubuntu SMP Tue Mar 11 18:48:34 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux


$ llvm-config  --version
3.5.0svn

$ llvm-config  --build-mode
Debug+Asserts

$ llvm-config  --cxxflags
-I/home/lingkun/local_install/include  -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -g -std=c++11 -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fPIC -Woverloaded-virtual -ffunction-sections -fdata-sections -Wcast-qual

$ llvm-config  --targets-built
X86 Sparc PowerPC AArch64 ARM ARM64 Mips XCore MSP430 CppBackend NVPTX Hexagon SystemZ R600




Did your Ubuntu have multilib installed?
Comment 4 Evgenii Stepanov 2014-04-11 04:22:29 PDT
I think I might have installed some :i386 packages which brought /usr/include/i386-linux-gnu headers with them, and that confused the clang driver.

I can't reproduce it on another 13.10 machine. I'll get access to the first machine later today and update the bug.
Comment 5 Evgenii Stepanov 2014-04-13 05:57:52 PDT
So, I do have multilib installed, but I also have an :i386 gcc toolchain.
I think what happened is clang picked gcc installation in /usr/lib/gcc/i686-linux-gnu/4.8 from libgcc-4.8-dev:i386 package.

$ cat /etc/issue
Ubuntu 13.10 \n \l

$ dpkg -l | grep -E "(stdc\+\+|gcc|g\+\+|multilib)"
ii  g++                                       4:4.8.1-2ubuntu3                        amd64        GNU C++ compiler
ii  g++-4.7                                   4.7.3-7ubuntu3                          amd64        GNU C++ compiler
ii  g++-4.7-multilib                          4.7.3-7ubuntu3                          amd64        GNU C++ compiler (multilib files)
ii  g++-4.8                                   4.8.1-10ubuntu9                         amd64        GNU C++ compiler
ii  g++-4.8-multilib                          4.8.1-10ubuntu9                         amd64        GNU C++ compiler (multilib files)
ii  g++-multilib                              4:4.8.1-2ubuntu3                        amd64        GNU C++ compiler (multilib files)
ii  gcc                                       4:4.8.1-2ubuntu3                        amd64        GNU C compiler
ii  gcc-4.7                                   4.7.3-7ubuntu3                          amd64        GNU C compiler
ii  gcc-4.7-base:amd64                        4.7.3-7ubuntu3                          amd64        GCC, the GNU Compiler Collection (base package)
ii  gcc-4.7-multilib                          4.7.3-7ubuntu3                          amd64        GNU C compiler (multilib files)
ii  gcc-4.8                                   4.8.1-10ubuntu9                         amd64        GNU C compiler
ii  gcc-4.8-base:amd64                        4.8.1-10ubuntu9                         amd64        GCC, the GNU Compiler Collection (base package)
ii  gcc-4.8-base:i386                         4.8.1-10ubuntu9                         i386         GCC, the GNU Compiler Collection (base package)
ii  gcc-4.8-multilib                          4.8.1-10ubuntu9                         amd64        GNU C compiler (multilib files)
ii  gcc-multilib                              4:4.8.1-2ubuntu3                        amd64        GNU C compiler (multilib files)
ii  lib32gcc-4.7-dev                          4.7.3-7ubuntu3                          amd64        GCC support library (32 bit development files)
ii  lib32gcc-4.8-dev                          4.8.1-10ubuntu9                         amd64        GCC support library (32 bit development files)
ii  lib32gcc1                                 1:4.8.1-10ubuntu9                       amd64        GCC support library (32 bit Version)
ii  lib32stdc++-4.8-dev                       4.8.1-10ubuntu9                         amd64        GNU Standard C++ Library v3 (development files)
ii  lib32stdc++6                              4.8.1-10ubuntu9                         amd64        GNU Standard C++ Library v3 (32 bit Version)
ii  lib32stdc++6-4.7-dev                      4.7.3-7ubuntu3                          amd64        GNU Standard C++ Library v3 (development files)
ii  libgcc-4.7-dev:amd64                      4.7.3-7ubuntu3                          amd64        GCC support library (development files)
ii  libgcc-4.8-dev:amd64                      4.8.1-10ubuntu9                         amd64        GCC support library (development files)
ii  libgcc-4.8-dev:i386                       4.8.1-10ubuntu9                         i386         GCC support library (development files)
ii  libgcc1:amd64                             1:4.8.1-10ubuntu9                       amd64        GCC support library
ii  libgcc1:i386                              1:4.8.1-10ubuntu9                       i386         GCC support library
ii  libstdc++-4.8-dev:amd64                   4.8.1-10ubuntu9                         amd64        GNU Standard C++ Library v3 (development files)
ii  libstdc++-4.8-dev:i386                    4.8.1-10ubuntu9                         i386         GNU Standard C++ Library v3 (development files)
ii  libstdc++6:amd64                          4.8.1-10ubuntu9                         amd64        GNU Standard C++ Library v3
ii  libstdc++6:i386                           4.8.1-10ubuntu9                         i386         GNU Standard C++ Library v3
ii  libstdc++6-4.7-dev:amd64                  4.7.3-7ubuntu3                          amd64        GNU Standard C++ Library v3 (development files)
ii  libx32gcc-4.7-dev                         4.7.3-7ubuntu3                          amd64        GCC support library (x32 development files)
ii  libx32gcc-4.8-dev                         4.8.1-10ubuntu9                         amd64        GCC support library (x32 development files)
ii  libx32gcc1                                1:4.8.1-10ubuntu9                       amd64        GCC support library (x32)
ii  libx32stdc++-4.8-dev                      4.8.1-10ubuntu9                         amd64        GNU Standard C++ Library v3 (development files)
ii  libx32stdc++6                             4.8.1-10ubuntu9                         amd64        GNU Standard C++ Library v3 (x32)
ii  libx32stdc++6-4.7-dev                     4.7.3-7ubuntu3                          amd64        GNU Standard C++ Library v3 (development files)


$ ./bin/clang++ -c ../1.cc -m32 -v
clang version 3.5.0 (205056)
Target: i386-unknown-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.8.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.3
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.1
Selected GCC installation: /usr/lib/gcc/i686-linux-gnu/4.8
Candidate multilib: .;@m32
Selected multilib: .;@m32
 "/build/llvm/build0/bin/clang-3.5" -cc1 -triple i386-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-file-name 1.cc -mrelocation-model static -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -fuse-init-array -target-cpu pentium4 -v -coverage-file /build/llvm/build0/1.o -resource-dir /build/llvm/build0/bin/../lib/clang/3.5.0 -internal-isystem /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8 -internal-isystem /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/i686-linux-gnu -internal-isystem /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/backward -internal-isystem /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/i686-linux-gnu/c++/4.8 -internal-isystem /usr/local/include -internal-isystem /build/llvm/build0/bin/../lib/clang/3.5.0/include -internal-externc-isystem /usr/include/i386-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /build/llvm/build0 -ferror-limit 19 -fmessage-length 173 -mstackrealign -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -vectorize-slp -o 1.o -x c++ ../1.cc
clang -cc1 version 3.5.0 based upon LLVM 3.5.0svn default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/i686-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/i686-linux-gnu/c++/4.8"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8
 /usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/backward
 /usr/local/include
 /build/llvm/build0/bin/../lib/clang/3.5.0/include
 /usr/include/i386-linux-gnu
 /usr/include
End of search list.
In file included from ../1.cc:1:
/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/limits:42:10: fatal error: 'bits/c++config.h' file not found
#include <bits/c++config.h>
         ^
1 error generated.


$ find /usr/include/ /usr/lib -name c++config.h
/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.8/32/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.8/x32/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.7/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.7/32/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/4.7/x32/bits/c++config.h
/usr/include/i386-linux-gnu/c++/4.8/bits/c++config.h
Comment 6 Chandler Carruth 2014-08-27 03:43:42 PDT
This was pretty terrible. The code trying to support the multiarch setup was... very strange. I may have written or reviewed it, but it was quite wrong.

I've fixed this (and possibly other issues) in r216528. Sorry for the trouble. Re-open if it still is busted.
Comment 7 Chandler Carruth 2014-08-27 03:46:47 PDT
That should have been r216531. Sorry.