summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Lex/PPMacroExpansion.cpp7
-rw-r--r--clang/test/Preprocessor/is_target_environment_version.c6
2 files changed, 9 insertions, 4 deletions
diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp
index 9b062643b9b..41633f90c34 100644
--- a/clang/lib/Lex/PPMacroExpansion.cpp
+++ b/clang/lib/Lex/PPMacroExpansion.cpp
@@ -1643,10 +1643,9 @@ static bool isTargetOS(const TargetInfo &TI, const IdentifierInfo *II) {
/// Implements the __is_target_environment builtin macro.
static bool isTargetEnvironment(const TargetInfo &TI,
const IdentifierInfo *II) {
- StringRef EnvName = TI.getTriple().getEnvironmentName();
- if (EnvName.empty())
- EnvName = "unknown";
- return EnvName.equals_lower(II->getName());
+ std::string EnvName = (llvm::Twine("---") + II->getName().lower()).str();
+ llvm::Triple Env(EnvName);
+ return TI.getTriple().getEnvironment() == Env.getEnvironment();
}
/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded
diff --git a/clang/test/Preprocessor/is_target_environment_version.c b/clang/test/Preprocessor/is_target_environment_version.c
new file mode 100644
index 00000000000..e93386013c3
--- /dev/null
+++ b/clang/test/Preprocessor/is_target_environment_version.c
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc18.0.0 -verify %s
+// expected-no-diagnostics
+
+#if !__is_target_environment(msvc)
+ #error "mismatching environment"
+#endif
OpenPOWER on IntegriCloud