diff options
-rw-r--r-- | lib/Lex/PPExpressions.cpp | 3 | ||||
-rw-r--r-- | test/Preprocessor/expr_liveness.c | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/Lex/PPExpressions.cpp b/lib/Lex/PPExpressions.cpp index 168c9d08ad..86f93e407a 100644 --- a/lib/Lex/PPExpressions.cpp +++ b/lib/Lex/PPExpressions.cpp @@ -91,7 +91,8 @@ static bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, // into a simple 0, unless it is the C++ keyword "true", in which case it // turns into "1". if (II->getPPKeywordID() != tok::pp_defined) { - PP.Diag(PeekTok, diag::warn_pp_undef_identifier) << II; + if (ValueLive) + PP.Diag(PeekTok, diag::warn_pp_undef_identifier) << II; Result.Val = II->getTokenID() == tok::kw_true; Result.Val.setIsUnsigned(false); // "0" is signed intmax_t 0. Result.setRange(PeekTok.getLocation()); diff --git a/test/Preprocessor/expr_liveness.c b/test/Preprocessor/expr_liveness.c index 3f4003ea3a..d9e5d7cb25 100644 --- a/test/Preprocessor/expr_liveness.c +++ b/test/Preprocessor/expr_liveness.c @@ -1,4 +1,4 @@ -/* RUN: clang -E %s -DNO_ERRORS && +/* RUN: clang -E %s -DNO_ERRORS -Werror -Wundef && RUN: not clang -E %s */ @@ -44,3 +44,9 @@ baz #endif + +// rdar://6505352 +// -Wundef should not warn about use of undefined identifier if not live. +#if (!defined(XXX) || XXX > 42) +#endif + |