The keywords "true" and "false" shouldn't warn under -Wundef.
authorEli Friedman <eli.friedman@gmail.com>
Thu, 20 Sep 2012 02:38:38 +0000 (02:38 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 20 Sep 2012 02:38:38 +0000 (02:38 +0000)
llvm-svn: 164279

clang/lib/Lex/PPExpressions.cpp
clang/test/Preprocessor/cxx_true.cpp

index 7cac63e..49dfa19 100644 (file)
@@ -178,7 +178,9 @@ static bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT,
     // preprocessor keywords and it wasn't macro expanded, it turns
     // into a simple 0, unless it is the C++ keyword "true", in which case it
     // turns into "1".
-    if (ValueLive)
+    if (ValueLive &&
+        II->getTokenID() != tok::kw_true &&
+        II->getTokenID() != tok::kw_false)
       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.
index b123e0c..5ee2972 100644 (file)
@@ -1,6 +1,7 @@
 /* RUN: %clang_cc1 -E %s -x c++ | grep block_1
    RUN: %clang_cc1 -E %s -x c++ | not grep block_2
    RUN: %clang_cc1 -E %s -x c | not grep block
+   RUN: %clang_cc1 -E %s -x c++ -verify -Wundef
 */
 
 #if true