Skip to content

[test][Driver][clang] Fix darwin-embedded-search-paths.c when CLANG_DEFAULT_CXX_STDLIB is libc++ #122145

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions clang/test/Driver/darwin-embedded-search-paths-libcxx.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// REQUIRES: default-cxx-stdlib=libc++
// UNSUPPORTED: system-windows
// Windows is unsupported because we use the Unix path separator `/` in the test.

// Unlike the Darwin driver, the MachO driver doesn't add any framework search paths,
// only the normal header ones.
// RUN: %clang -x c -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk -### -c %s 2>&1 \
// RUN: | FileCheck --check-prefixes=CC1,NO-CXX,ULI,CI,UI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s

// Unlike the Darwin driver, the MachO driver doesn't default to libc++, but when
// CLANG_DEFAULT_CXX_STDLIB is libc++ then the MachO driver should find the search path.
// RUN: %clang -x c++ -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk -### -c %s 2>&1 \
// RUN: | FileCheck --check-prefixes=CC1,CXX,ULI,CI,UI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s

// If the user requests libc++, the MachO driver should still find the search path.
// RUN: %clang -x c++ -stdlib=libc++ -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk -### -c %s 2>&1 \
// RUN: | FileCheck --check-prefixes=CC1,CXX,ULI,CI,UI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s

// Verify that embedded uses can swap in alternate usr/include and usr/local/include directories.
// usr/local/include is specified in the driver as -internal-isystem, however, the driver generated
// paths come before the paths in the driver arguments. In order to keep usr/local/include in the
// same position, -isystem has to be used instead of -Xclang -internal-isystem. There isn't an
// -externc-isystem, but it's ok to use -Xclang -internal-externc-isystem since the driver doesn't
// use that if -nostdlibinc or -nostdinc is passed.
// RUN: %clang -x c++ -stdlib=libc++ -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk \
// RUN: -nostdlibinc -isystem %S/Inputs/MacOSX15.1.sdk/embedded/usr/local/include \
// RUN: -Xclang -internal-externc-isystem -Xclang %S/Inputs/MacOSX15.1.sdk/embedded/usr/include \
// RUN: -### -c %s 2>&1 | FileCheck --check-prefixes=CC1,NO-CXX,EULI,CI,EUI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s


// The ordering of these flags doesn't matter, and so this test is a little
// fragile. i.e. all of the -internal-isystem paths will be searched before the
// -internal-externc-isystem ones, and their order on the command line doesn't
// matter. The line order here is just the current order that the driver writes
// the cc1 arguments.

// CC1: "-cc1"
// NO-CXX-NOT: "-internal-isystem" "{{.*}}/include/c++/v1"
// CXX-SAME: "-internal-isystem" "{{.*}}/include/c++/v1"
// ULI-SAME: "-internal-isystem" "[[SDKROOT]]/usr/local/include"
// EULI-SAME: "-isystem" "[[SDKROOT]]/embedded/usr/local/include"
// CI-SAME: "-internal-isystem" "{{.*}}/clang/{{[[:digit:].]*}}/include"
// UI-SAME: "-internal-externc-isystem" "[[SDKROOT]]/usr/include"
// EUI-SAME: "-internal-externc-isystem" "[[SDKROOT]]/embedded/usr/include"
// NO-FW-NOT: "-internal-iframework"
4 changes: 3 additions & 1 deletion clang/test/Driver/darwin-embedded-search-paths.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// REQUIRES: !(default-cxx-stdlib=libc++)
// UNSUPPORTED: system-windows
// Windows is unsupported because we use the Unix path separator `/` in the test.

Expand All @@ -6,7 +7,8 @@
// RUN: %clang -x c -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk -### -c %s 2>&1 \
// RUN: | FileCheck --check-prefixes=CC1,NO-CXX,ULI,CI,UI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s

// Unlike the Darwin driver, the MachO driver doesn't default to libc++
// Unlike the Darwin driver, the MachO driver doesn't default to libc++, and unless
// CLANG_DEFAULT_CXX_STDLIB is libc++ it won't add any search paths.
// RUN: %clang -x c++ -target arm64-apple-none-macho -isysroot %S/Inputs/MacOSX15.1.sdk -### -c %s 2>&1 \
// RUN: | FileCheck --check-prefixes=CC1,NO-CXX,ULI,CI,UI,NO-FW -DSDKROOT=%S/Inputs/MacOSX15.1.sdk %s

Expand Down
Loading