<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/b4d02201add7b3e5758513e2df61a140692ead57">https://github.com/macports/macports-ports/commit/b4d02201add7b3e5758513e2df61a140692ead57</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new b4d02201add clang-11: backport include-next fix
</span>b4d02201add is described below

<span style='display:block; white-space:pre;color:#808000;'>commit b4d02201add7b3e5758513e2df61a140692ead57
</span>Author: Ken Cunningham <ken.cunningham.webuse@gmail.com>
AuthorDate: Mon May 3 18:01:22 2021 -0700

<span style='display:block; white-space:pre;color:#404040;'>    clang-11: backport include-next fix
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    thanks to @landonf for spelunking this one
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Currently, Clang looks for libc++ headers alongside the installation
</span><span style='display:block; white-space:pre;color:#404040;'>    directory of Clang, and it also adds a search path for headers in the
</span><span style='display:block; white-space:pre;color:#404040;'>    -isysroot. This is problematic if headers are found in both the toolchain
</span><span style='display:block; white-space:pre;color:#404040;'>    and in the sysroot, since #include_next will end up finding the libc++
</span><span style='display:block; white-space:pre;color:#404040;'>    headers in the sysroot instead of the intended system headers.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This patch changes the logic such that if the toolchain contains libc++
</span><span style='display:block; white-space:pre;color:#404040;'>    headers, no C++ header paths are added in the sysroot. However, if the
</span><span style='display:block; white-space:pre;color:#404040;'>    toolchain does *not* contain libc++ headers, the sysroot is searched as
</span><span style='display:block; white-space:pre;color:#404040;'>    usual.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This should not be a breaking change, since any code that previously
</span><span style='display:block; white-space:pre;color:#404040;'>    relied on some libc++ headers being found in the sysroot suffered from
</span><span style='display:block; white-space:pre;color:#404040;'>    the #include_next issue described above, which renders any libc++ header
</span><span style='display:block; white-space:pre;color:#404040;'>    basically useless.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    closes: https://trac.macports.org/ticket/62770
</span>---
 lang/llvm-11/Portfile                              |   5 +-
 ...clang-fix-include-next-sysroot-cpp-headers.diff | 251 +++++++++++++++++++++
 2 files changed, 254 insertions(+), 2 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-11/Portfile b/lang/llvm-11/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index f658b8435ae..c7f59592658 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/llvm-11/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/llvm-11/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -25,7 +25,7 @@ checksums               rmd160  f566b4b75c8f30418f19069a9a84864ead766401 \
</span> 
 name                    llvm-${llvm_version}
 revision                0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-subport                 clang-${llvm_version} { revision 1 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport                 clang-${llvm_version} { revision 2 }
</span> subport                 flang-${llvm_version} { revision 0 }
 subport                 lldb-${llvm_version} { revision 0 }
 set suffix              mp-${llvm_version}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -151,7 +151,8 @@ if {${subport} eq "clang-${llvm_version}"} {
</span>         openmp-locations.patch \
         leopard-no-asan.patch \
         5000-patch-compilerrtdarwinutils-find-macosxsdkversion.diff \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        5002-patch-toolchains-darwin-add-back-pre-10.6-link-libs.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        5002-patch-toolchains-darwin-add-back-pre-10.6-link-libs.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patch-clang-fix-include-next-sysroot-cpp-headers.diff
</span> }
 
 if {${subport} eq "flang-${llvm_version}"} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/llvm-11/files/patch-clang-fix-include-next-sysroot-cpp-headers.diff b/lang/llvm-11/files/patch-clang-fix-include-next-sysroot-cpp-headers.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..8f5d699f597
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/llvm-11/files/patch-clang-fix-include-next-sysroot-cpp-headers.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,251 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://reviews.llvm.org/D89001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Currently, Clang looks for libc++ headers alongside the installation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+directory of Clang, and it also adds a search path for headers in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-isysroot. This is problematic if headers are found in both the toolchain
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and in the sysroot, since #include_next will end up finding the libc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+headers in the sysroot instead of the intended system headers.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This patch changes the logic such that if the toolchain contains libc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+headers, no C++ header paths are added in the sysroot. However, if the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+toolchain does *not* contain libc++ headers, the sysroot is searched as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+usual.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This should not be a breaking change, since any code that previously
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+relied on some libc++ headers being found in the sysroot suffered from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the #include_next issue described above, which renders any libc++ header
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+basically useless.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/lib/Driver/ToolChains/Darwin.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/clang/lib/Driver/ToolChains/Darwin.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2021,21 +2021,42 @@ void DarwinClang::AddClangCXXStdlibIncludeArgs(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   switch (GetCXXStdlibType(DriverArgs)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   case ToolChain::CST_Libcxx: {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    // On Darwin, libc++ is installed alongside the compiler in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    // include/c++/v1, so get from '<install>/bin' to '<install>/include/c++/v1'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      llvm::SmallString<128> P = llvm::StringRef(getDriver().getInstalledDir());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      // Note that P can be relative, so we have to '..' and not parent_path.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      llvm::sys::path::append(P, "..", "include", "c++", "v1");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      addSystemInclude(DriverArgs, CC1Args, P);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // On Darwin, libc++ can be installed in one of the following two places:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // 1. Alongside the compiler in         <install>/include/c++/v1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // 2. In a SDK (or a custom sysroot) in <sysroot>/usr/include/c++/v1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // The precendence of paths is as listed above, i.e. we take the first path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // that exists. Also note that we never include libc++ twice -- we take the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // first path that exists and don't send the other paths to CC1 (otherwise
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // include_next could break).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Check for (1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Get from '<install>/bin' to '<install>/include/c++/v1'.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Note that InstallBin can be relative, so we use '..' instead of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // parent_path.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    llvm::SmallString<128> InstallBin =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        llvm::StringRef(getDriver().getInstalledDir()); // <install>/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    llvm::sys::path::append(InstallBin, "..", "include", "c++", "v1");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (getVFS().exists(InstallBin)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      addSystemInclude(DriverArgs, CC1Args, InstallBin);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else if (DriverArgs.hasArg(options::OPT_v)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      llvm::errs() << "ignoring nonexistent directory \"" << InstallBin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   << "\"\n";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    // Also add <sysroot>/usr/include/c++/v1 unless -nostdinc is used,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    // to match the legacy behavior in CC1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!DriverArgs.hasArg(options::OPT_nostdinc)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      llvm::SmallString<128> P = Sysroot;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      llvm::sys::path::append(P, "usr", "include", "c++", "v1");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      addSystemInclude(DriverArgs, CC1Args, P);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Otherwise, check for (2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    llvm::SmallString<128> SysrootUsr = Sysroot;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    llvm::sys::path::append(SysrootUsr, "usr", "include", "c++", "v1");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (getVFS().exists(SysrootUsr)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      addSystemInclude(DriverArgs, CC1Args, SysrootUsr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else if (DriverArgs.hasArg(options::OPT_v)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      llvm::errs() << "ignoring nonexistent directory \"" << SysrootUsr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   << "\"\n";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Otherwise, don't add any path.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tools/clang/test/Driver/darwin-header-search-libcxx.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tools/clang/test/Driver/darwin-header-search-libcxx.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -13,39 +13,57 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:   | FileCheck --check-prefix=CHECK-LIBCXX-NONE %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-NONE: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// Check with only headers alongside the installation (those should be used,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// but we should still add /usr/include/c++/v1 after to preserve legacy).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Check with only headers alongside the installation (those should be used).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -target x86_64-apple-darwin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -stdlib=libc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     --sysroot="" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:   | FileCheck -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain --check-prefix=CHECK-LIBCXX-TOOLCHAIN-1 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               --check-prefix=CHECK-LIBCXX-TOOLCHAIN-1 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-TOOLCHAIN-1: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-TOOLCHAIN-1: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// CHECK-LIBCXX-TOOLCHAIN-1: "-internal-isystem" "/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-TOOLCHAIN-1-NOT: "-internal-isystem" "/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -target x86_64-apple-darwin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -stdlib=libc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -isysroot %S/Inputs/basic_darwin_sdk_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:   | FileCheck -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain --check-prefix=CHECK-LIBCXX-TOOLCHAIN-2 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               -DSYSROOT=%S/Inputs/basic_darwin_sdk_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               --check-prefix=CHECK-LIBCXX-TOOLCHAIN-2 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-TOOLCHAIN-2: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-TOOLCHAIN-2: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-TOOLCHAIN-2-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Check with only headers in the sysroot (those should be used).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -target x86_64-apple-darwin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -stdlib=libc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               --check-prefix=CHECK-LIBCXX-SYSROOT-1 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-SYSROOT-1: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-SYSROOT-1: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-SYSROOT-1-NOT: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Check with both headers in the sysroot and headers alongside the installation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// (the headers in <sysroot> should be added after the toolchain headers).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// Ensure that both -isysroot and --sysroot work, and that isysroot has precedence.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// (the headers in the toolchain should be preferred over the <sysroot> headers).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Ensure that both -isysroot and --sysroot work, and that isysroot has precedence
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// over --sysroot.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -target x86_64-apple-darwin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -stdlib=libc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -resource-dir=%S/Inputs/resource_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:               -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:               --check-prefix=CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -54,8 +72,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -stdlib=libc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -resource-dir=%S/Inputs/resource_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:     --sysroot %S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     --sysroot %S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:               -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:               --check-prefix=CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -64,32 +82,46 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -stdlib=libc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -resource-dir=%S/Inputs/resource_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     --sysroot %S/Inputs/basic_darwin_sdk_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:               -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:               --check-prefix=CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-SYSROOT_AND_TOOLCHAIN-1-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// Make sure that using -nostdinc will drop the sysroot C++ library include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// path, but not the toolchain one.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Make sure that using -nostdinc does not drop any C++ library include path.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// This behavior is strange, but it is compatible with the legacy CC1 behavior.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -target x86_64-apple-darwin16 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -resource-dir=%S/Inputs/resource_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -stdlib=platform \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -nostdinc \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:               -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:               --check-prefix=CHECK-LIBCXX-NOSTDINC %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// CHECK-LIBCXX-NOSTDINC: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// CHECK-LIBCXX-NOSTDINC: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// CHECK-LIBCXX-NOSTDINC-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               --check-prefix=CHECK-LIBCXX-NOSTDINC-1 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-NOSTDINC-1: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-NOSTDINC-1-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-NOSTDINC-1: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -target x86_64-apple-darwin16 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -resource-dir=%S/Inputs/resource_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -stdlib=platform \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -nostdinc \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               --check-prefix=CHECK-LIBCXX-NOSTDINC-2 %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-NOSTDINC-2: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-NOSTDINC-2: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-NOSTDINC-2-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Make sure that using -nostdinc++ or -nostdlib will drop both the toolchain
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // C++ include path and the sysroot one.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -98,7 +130,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -target x86_64-apple-darwin16 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -resource-dir=%S/Inputs/resource_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_usr_cxx_v1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -stdlib=platform \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:     -nostdinc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -121,3 +153,26 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-NOSTDLIBINC: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-NOSTDLIBINC-NOT: "-internal-isystem" "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // CHECK-LIBCXX-NOSTDLIBINC-NOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Make sure we explain that we considered a path but didn't add it when it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// doesn't exist.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN: %clang -no-canonical-prefixes %s -fsyntax-only -v 2>&1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -target x86_64-apple-darwin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -isysroot %S/Inputs/basic_darwin_sdk \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -stdlib=libc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               --check-prefix=CHECK-LIBCXX-MISSING-TOOLCHAIN %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-MISSING-TOOLCHAIN: ignoring nonexistent directory "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN: %clang -no-canonical-prefixes %s -fsyntax-only -v 2>&1 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -target x86_64-apple-darwin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -ccc-install-dir %S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -isysroot %S/Inputs/basic_darwin_sdk_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:     -stdlib=libc++ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:   | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               -DTOOLCHAIN=%S/Inputs/basic_darwin_toolchain_no_libcxx \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// RUN:               --check-prefix=CHECK-LIBCXX-MISSING-BOTH %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-MISSING-BOTH: ignoring nonexistent directory "[[TOOLCHAIN]]/usr/bin/../include/c++/v1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// CHECK-LIBCXX-MISSING-BOTH: ignoring nonexistent directory "[[SYSROOT]]/usr/include/c++/v1"
</span></pre><pre style='margin:0'>

</pre>