[clang] 1204f6b - [clang][Driver] Fix libc++ include path on OpenBSD (#212979)

via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 21 20:58:54 PDT 2026


Author: Brad Smith
Date: 2026-10-21T23:58:48-04:00
New Revision: 1204f6b4e9d6bef8ec319d121942dca5cbf94a26

URL: https://github.com/llvm/llvm-project/commit/1204f6b4e9d6bef8ec319d121942dca5cbf94a26
DIFF: https://github.com/llvm/llvm-project/commit/1204f6b4e9d6bef8ec319d121942dca5cbf94a26.diff

LOG: [clang][Driver] Fix libc++ include path on OpenBSD (#212979)

`clang++` defaults to `-stdlib=libc++` on OpenBSD. When building with both
`clang` and `libcxx` included, the freshly built `clang++` uses the system
version of the `libc++` headers. However, this is from the bundled `libc++`
22.1.8, thus inconsistent with the `libc++` being built.

OpenBSD has its own version of addLibCxxIncludePaths which just includes
`/usr/include/c++/v1`.

This patch removes OpenBSD::addLibCxxIncludePaths in favour of the generic
version in `Gnu.cpp`.

Added: 
    

Modified: 
    clang/lib/Driver/ToolChains/OpenBSD.cpp
    clang/lib/Driver/ToolChains/OpenBSD.h
    clang/test/Driver/openbsd.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp
index 03bd56e5f4e45..dcae87afcfc01 100644
--- a/clang/lib/Driver/ToolChains/OpenBSD.cpp
+++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp
@@ -349,12 +349,6 @@ void OpenBSD::AddClangSystemIncludeArgs(
                           concat(D.SysRoot, "/usr/include"));
 }
 
-void OpenBSD::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
-                                    llvm::opt::ArgStringList &CC1Args) const {
-  addSystemInclude(DriverArgs, CC1Args,
-                   concat(getDriver().SysRoot, "/usr/include/c++/v1"));
-}
-
 void OpenBSD::AddCXXStdlibLibArgs(const ArgList &Args,
                                   ArgStringList &CmdArgs) const {
   bool Profiling = Args.hasArg(options::OPT_pg);

diff  --git a/clang/lib/Driver/ToolChains/OpenBSD.h b/clang/lib/Driver/ToolChains/OpenBSD.h
index a92c4d321bac6..47c86d95313be 100644
--- a/clang/lib/Driver/ToolChains/OpenBSD.h
+++ b/clang/lib/Driver/ToolChains/OpenBSD.h
@@ -73,9 +73,6 @@ class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF {
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
                             llvm::opt::ArgStringList &CC1Args) const override;
-
-  void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
-                             llvm::opt::ArgStringList &CC1Args) const override;
   void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
                            llvm::opt::ArgStringList &CmdArgs) const override;
 

diff  --git a/clang/test/Driver/openbsd.cpp b/clang/test/Driver/openbsd.cpp
index 01aa09b75f27f..108fbf5d6580b 100644
--- a/clang/test/Driver/openbsd.cpp
+++ b/clang/test/Driver/openbsd.cpp
@@ -20,22 +20,32 @@
 // RUN:   | FileCheck --check-prefix=CHECK-PG-CXX %s
 // CHECK-PG-CXX: "-lc++_p" "-lc++abi_p" "-lpthread_p" "-lm_p"
 
+// Test that OpenBSD prefers install tree libc++ headers over system ones.
+// RUN: %clang -### %s --target=amd64-pc-openbsd -r 2>&1 \
+// RUN:     -ccc-install-dir %S/Inputs/install_tree_with_libcxx/bin \
+// RUN:     --sysroot=%S/Inputs/basic_openbsd_libcxx_tree \
+// RUN:   | FileCheck %s --check-prefix=DRIVER-INSTALL-INCLUDES
+// DRIVER-INSTALL-INCLUDES:      "-internal-isystem" "{{.*}}bin[[SEP:/|\\\\]]..[[SEP]]include[[SEP]]c++[[SEP]]v1"
+// DRIVER-INSTALL-INCLUDES-NOT:  "-internal-isystem" "{{.*}}usr[[SEP]]include[[SEP]]c++[[SEP]]v1"
+
 // Test include paths with a sysroot.
 // RUN: %clangxx %s -### -fsyntax-only 2>&1 \
 // RUN:     --target=amd64-pc-openbsd \
+// RUN:     -ccc-install-dir %S/Inputs/install_tree_without_libcxx/bin \
 // RUN:     --sysroot=%S/Inputs/basic_openbsd_libcxx_tree \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
 // RUN:   | FileCheck --check-prefix=CHECK-LIBCXX-SYSROOT %s
 // CHECK-LIBCXX-SYSROOT: "-cc1"
 // CHECK-LIBCXX-SYSROOT-SAME: "-isysroot" "[[SYSROOT:[^"]+]]"
-// CHECK-LIBCXX-SYSROOT-SAME: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
+// CHECK-LIBCXX-SYSROOT-SAME: "-internal-isystem" "[[SYSROOT]][[SEP:/|\\\\]]usr[[SEP]]include[[SEP]]c++[[SEP]]v1"
 
 // Test include paths when the sysroot path ends with `/`.
 // RUN: %clangxx %s -### -fsyntax-only 2>&1 \
 // RUN:     --target=amd64-pc-openbsd \
+// RUN:     -ccc-install-dir %S/Inputs/install_tree_without_libcxx/bin \
 // RUN:     --sysroot=%S/Inputs/basic_openbsd_libcxx_tree/ \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
 // RUN:   | FileCheck --check-prefix=CHECK-LIBCXX-SYSROOT-SLASH %s
 // CHECK-LIBCXX-SYSROOT-SLASH: "-cc1"
 // CHECK-LIBCXX-SYSROOT-SLASH-SAME: "-isysroot" "[[SYSROOT:[^"]+/]]"
-// CHECK-LIBCXX-SYSROOT-SLASH-SAME: "-internal-isystem" "[[SYSROOT]]usr/include/c++/v1"
+// CHECK-LIBCXX-SYSROOT-SLASH-SAME: "-internal-isystem" "[[SYSROOT]]usr[[SEP:/|\\\\]]include[[SEP]]c++[[SEP]]v1"


        


More information about the cfe-commits mailing list