Author: Joseph Huber
Date: 2026-01-30T08:04:13-06:00
New Revision: 13b7307ae96f5b96538d3b7e8adffdb0553afb88

URL: 
https://github.com/llvm/llvm-project/commit/13b7307ae96f5b96538d3b7e8adffdb0553afb88
DIFF: 
https://github.com/llvm/llvm-project/commit/13b7307ae96f5b96538d3b7e8adffdb0553afb88.diff

LOG: [Clang] Include clang standard lib header directory from Linux (#175593)

Summary:
The LLVM-libc stores its headers in the target-specific include
directory. This PR makes the Linux toolchain include the standard lib
directory when used. This allows LLVM-libc to work and any other
standard language headers installed there. We search this first.

Added: 
    clang/test/Driver/Inputs/basic_linux_tree/usr/bin/.keep
    
clang/test/Driver/Inputs/basic_linux_tree/usr/include/x86_64-unknown-linux-gnu/.keep

Modified: 
    clang/lib/Driver/ToolChains/Linux.cpp
    clang/test/Driver/linux-cross.cpp
    clang/test/Driver/linux-header-search.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/Linux.cpp 
b/clang/lib/Driver/ToolChains/Linux.cpp
index cd2c4deb63d14..7631781310d60 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -760,6 +760,11 @@ void Linux::AddClangSystemIncludeArgs(const ArgList 
&DriverArgs,
   if (DriverArgs.hasArg(options::OPT_nostdlibinc))
     return;
 
+  // After the resource directory, we prioritize the standard clang include
+  // directory.
+  if (std::optional<std::string> Path = getStdlibIncludePath())
+    addSystemInclude(DriverArgs, CC1Args, *Path);
+
   // LOCAL_INCLUDE_DIR
   addSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/usr/local/include"));
   // TOOL_INCLUDE_DIR

diff  --git a/clang/test/Driver/Inputs/basic_linux_tree/usr/bin/.keep 
b/clang/test/Driver/Inputs/basic_linux_tree/usr/bin/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git 
a/clang/test/Driver/Inputs/basic_linux_tree/usr/include/x86_64-unknown-linux-gnu/.keep
 
b/clang/test/Driver/Inputs/basic_linux_tree/usr/include/x86_64-unknown-linux-gnu/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git a/clang/test/Driver/linux-cross.cpp 
b/clang/test/Driver/linux-cross.cpp
index 7f46211b6ed8b..419df5047b954 100644
--- a/clang/test/Driver/linux-cross.cpp
+++ b/clang/test/Driver/linux-cross.cpp
@@ -32,6 +32,7 @@
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/x86_64-linux-gnu/c++/10"
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/backward"
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin/../include/x86_64-unknown-linux-gnu"
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/local/include"
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
 /// We set explicit -ccc-install-dir ensure that Clang does not pick up extra
@@ -61,6 +62,7 @@
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/x86_64-linux-gnu/c++/10/32"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/backward"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// DEBIAN_X86_64-M32-SAME: {{^}} "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin/../include/x86_64-unknown-linux-gnu"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/local/include"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
 // DEBIAN_X86_64_M32:      "-internal-externc-isystem"
@@ -112,6 +114,7 @@
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/i386-linux-gnu/c++/10/64"
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/c++/10/backward"
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin/../include/x86_64-unknown-linux-gnu"
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/local/include"
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../i686-linux-gnu/include"
 // DEBIAN_I686_M64:      "-internal-externc-isystem"

diff  --git a/clang/test/Driver/linux-header-search.cpp 
b/clang/test/Driver/linux-header-search.cpp
index 70a85deac89e4..e15d8f1a3b934 100644
--- a/clang/test/Driver/linux-header-search.cpp
+++ b/clang/test/Driver/linux-header-search.cpp
@@ -1,6 +1,19 @@
 // General tests that the header search paths detected by the driver and passed
 // to CC1 are sane.
 //
+// Test to see that the compiler include directory is present.
+// RUN: %clang -### %s -fsyntax-only 2>&1 \
+// RUN:     --target=x86_64-unknown-linux-gnu \
+// RUN:     -stdlib=libc++ \
+// RUN:     -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin \
+// RUN:     -resource-dir=%S/Inputs/resource_dir \
+// RUN:     --sysroot=%S/Inputs/basic_linux_tree/ \
+// RUN:   | FileCheck --check-prefix=CHECK-BASIC-CLANG-SYSROOT-SLASH %s
+// CHECK-BASIC-CLANG-SYSROOT-SLASH: "-cc1"
+// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-isysroot" "[[SYSROOT:[^"]+/]]"
+// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin[[SEP:/|\\\\]]..[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu"
+// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[SYSROOT]]usr/local/include"
+//
 // Test a simulated installation of libc++ on Linux, both through sysroot and
 // the installation path of Clang.
 // RUN: %clang -### %s -fsyntax-only 2>&1 \


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to