[Driver] Detect libstdc++ include paths for native gcc (-m32 and -m64) on Debian...
authorFangrui Song <i@maskray.me>
Sun, 4 Apr 2021 17:15:12 +0000 (10:15 -0700)
committerFangrui Song <i@maskray.me>
Sun, 4 Apr 2021 17:15:12 +0000 (10:15 -0700)
commite92d2b80c6c913b5c506df06a913a2ecbf761617
treeff5c8de7314a30a8a61c0d28546772cf49b463a4
parentf6197838827942f212ebd1e18837f3ed1ddb1868
[Driver] Detect libstdc++ include paths for native gcc (-m32 and -m64) on Debian i386

Take gcc-8 on Debian i386 as an example. The target-specific libstdc++ search
path (`GPLUSPLUS_TOOL_INCLUDE_DIR`) uses the multiarch name `i386-linux-gnu`,
instead of the triple of the GCC installation `i686-linux-gnu` (the directory
under `usr/lib/gcc/`):

```
/usr/include/c++/8
/usr/include/i386-linux-gnu/c++/8
/usr/include/c++/8/backward
```

Clang currently detects `/usr/lib/gcc/i686-linux-gnu/8/../../../include/i686-linux-gnu/c++/8`.
This patch changes the second i686-linux-gnu to i386-linux-gnu so that
`/usr/include/i386-linux-gnu/c++/8` can be found.

Fix PR49827 - this was somehow regressed by my previous libstdc++ include path
cleanups and fixes for gcc-cross, but it seems that the paths were never properly tested before.

Differential Revision: https://reviews.llvm.org/D99852
20 files changed:
clang/lib/Driver/ToolChains/Gnu.cpp
clang/test/Driver/Inputs/debian_i386_tree/lib/i386-linux-gnu/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/lib/x86_64-linux-gnu/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/lib64/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/include/c++/10/backward/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/include/i386-linux-gnu/c++/10/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/include/i386-linux-gnu/c++/10/64/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/include/x86_64-linux-gnu/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib/gcc/i686-linux-gnu/10/64/crtbegin.o [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib/gcc/i686-linux-gnu/10/crtbegin.o [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib/gcc/i686-linux-gnu/10/crtend.o [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib/i386-linux-gnu/crt1.o [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib/i386-linux-gnu/crti.o [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib/i386-linux-gnu/crtn.o [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib/x86_64-linux-gnu/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib64/.keep [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib64/crt1.o [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib64/crti.o [new file with mode: 0644]
clang/test/Driver/Inputs/debian_i386_tree/usr/lib64/crtn.o [new file with mode: 0644]
clang/test/Driver/linux-cross.cpp