diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Driver/Options.td | 3 | ||||
| -rw-r--r-- | clang/lib/Driver/CrossWindowsToolChain.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 7 | ||||
| -rw-r--r-- | clang/test/Driver/windows-cross.c | 7 |
4 files changed, 19 insertions, 0 deletions
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 5c240f36b48..00523666de1 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1277,6 +1277,9 @@ def isysroot : JoinedOrSeparate<["-"], "isysroot">, Group<clang_i_Group>, Flags< def isystem : JoinedOrSeparate<["-"], "isystem">, Group<clang_i_Group>, Flags<[CC1Option]>, HelpText<"Add directory to SYSTEM include search path">, MetaVarName<"<directory>">; +def isystem_after : JoinedOrSeparate<["-"], "isystem-after">, + Group<clang_i_Group>, Flags<[DriverOption]>, MetaVarName<"<directory>">, + HelpText<"Add directory to end of the SYSTEM include search path">; def iwithprefixbefore : JoinedOrSeparate<["-"], "iwithprefixbefore">, Group<clang_i_Group>, HelpText<"Set directory to include search path with prefix">, MetaVarName<"<dir>">, Flags<[CC1Option]>; diff --git a/clang/lib/Driver/CrossWindowsToolChain.cpp b/clang/lib/Driver/CrossWindowsToolChain.cpp index 57bf8963598..4ebbc533232 100644 --- a/clang/lib/Driver/CrossWindowsToolChain.cpp +++ b/clang/lib/Driver/CrossWindowsToolChain.cpp @@ -62,6 +62,8 @@ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, llvm::sys::path::append(ResourceDir, "include"); addSystemInclude(DriverArgs, CC1Args, ResourceDir); } + for (const auto &P : DriverArgs.getAllArgValues(options::OPT_isystem_after)) + addSystemInclude(DriverArgs, CC1Args, P); addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include"); } diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 62738e66990..b911c17e2bc 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -502,6 +502,13 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, << A->getAsString(Args); } } + } else if (A->getOption().matches(options::OPT_isystem_after)) { + // Handling of paths which must come late. These entries are handled by + // the toolchain itself after the resource dir is inserted in the right + // search order. + // Do not claim the argument so that the use of the argument does not + // silently go unnoticed on toolchains which do not honour the option. + continue; } // Not translated, render as usual. diff --git a/clang/test/Driver/windows-cross.c b/clang/test/Driver/windows-cross.c index 083e4b00368..0b08762a4af 100644 --- a/clang/test/Driver/windows-cross.c +++ b/clang/test/Driver/windows-cross.c @@ -67,3 +67,10 @@ // CHECK-SANITIZE-TSAN: error: unsupported argument 'tsan' to option 'fsanitize=' // CHECK-SANITIZE-TSAN-NOT: "-fsanitize={{.*}}" +// RUN: %clang -### -target armv7-windows-itanium -isystem-after "Windows Kits/10/Include/10.0.10586.0/ucrt" -isystem-after "Windows Kits/10/Include/10.0.10586.0/um" -isystem-after "Windows Kits/10/Include/10.0.10586.0/shared" -c %s -o /dev/null 2>&1 \ +// RUN: | FileCheck %s --check-prefix CHECK-ISYSTEM-AFTER +// CHECK-ISYSTEM-AFTER: "-internal-isystem" "{{.*}}/clang/3.9.0/include" +// CHECK-ISYSTEM-AFTER: "-internal-isystem" "Windows Kits/10/Include/10.0.10586.0/ucrt" +// CHECK-ISYSTEM-AFTER: "-internal-isystem" "Windows Kits/10/Include/10.0.10586.0/um" +// CHECK-ISYSTEM-AFTER: "-internal-isystem" "Windows Kits/10/Include/10.0.10586.0/shared" + |

