diff options
| -rw-r--r-- | clang/lib/Lex/PPMacroExpansion.cpp | 5 | ||||
| -rw-r--r-- | clang/test/Preprocessor/is_target_unknown_environment.c | 15 |
2 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index e79d76c..ffc758d 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/lib/Lex/PPMacroExpansion.cpp @@ -1447,6 +1447,11 @@ static bool isTargetEnvironment(const TargetInfo &TI, const IdentifierInfo *II) { std::string EnvName = (llvm::Twine("---") + II->getName().lower()).str(); llvm::Triple Env(EnvName); + // The unknown environment is matched only if + // '__is_target_environment(unknown)' is used. + if (Env.getEnvironment() == llvm::Triple::UnknownEnvironment && + EnvName != "---unknown") + return false; return TI.getTriple().getEnvironment() == Env.getEnvironment(); } diff --git a/clang/test/Preprocessor/is_target_unknown_environment.c b/clang/test/Preprocessor/is_target_unknown_environment.c new file mode 100644 index 0000000..9462ef4 --- /dev/null +++ b/clang/test/Preprocessor/is_target_unknown_environment.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-macos12 -verify %s + +// expected-no-diagnostics + +#if !__is_target_environment(unknown) +#error "mismatching environment" +#endif + +#if __is_target_environment(simulator) || __is_target_environment(SIMULATOR) +#error "mismatching environment" +#endif + +#if __is_target_environment(invalidEnv) +#error "invalid environment must not be matched" +#endif |
