[cfe-commits] r126739 - in /cfe/trunk: lib/Sema/SemaOverload.cpp test/SemaCXX/warn_false_to_pointer.cpp

Chandler Carruth chandlerc at gmail.com
Mon Feb 28 19:29:37 PST 2011


Author: chandlerc
Date: Mon Feb 28 21:29:37 2011
New Revision: 126739

URL: http://llvm.org/viewvc/llvm-project?rev=126739&view=rev
Log:
Move the bool-conversions behind the DiagRuntimeBehavior logic. It's
possible for these to show up due to metaprogramming both in unevaluated
contexts and compile-time dead branches.

Those aren't the bugs we're looking for.

Modified:
    cfe/trunk/lib/Sema/SemaOverload.cpp
    cfe/trunk/test/SemaCXX/warn_false_to_pointer.cpp

Modified: cfe/trunk/lib/Sema/SemaOverload.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=126739&r1=126738&r2=126739&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaOverload.cpp (original)
+++ cfe/trunk/lib/Sema/SemaOverload.cpp Mon Feb 28 21:29:37 2011
@@ -1939,8 +1939,8 @@
   if (CXXBoolLiteralExpr* LitBool
                           = dyn_cast<CXXBoolLiteralExpr>(From->IgnoreParens()))
     if (!IsCStyleOrFunctionalCast && LitBool->getValue() == false)
-      Diag(LitBool->getExprLoc(), diag::warn_init_pointer_from_false)
-        << ToType;
+      DiagRuntimeBehavior(LitBool->getExprLoc(), From,
+                          PDiag(diag::warn_init_pointer_from_false) << ToType);
 
   if (const PointerType *FromPtrType = FromType->getAs<PointerType>())
     if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {

Modified: cfe/trunk/test/SemaCXX/warn_false_to_pointer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn_false_to_pointer.cpp?rev=126739&r1=126738&r2=126739&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/warn_false_to_pointer.cpp (original)
+++ cfe/trunk/test/SemaCXX/warn_false_to_pointer.cpp Mon Feb 28 21:29:37 2011
@@ -8,3 +8,10 @@
   foo((int*)false);
 }
 
+char f(struct Undefined*);
+double f(...);
+
+// Ensure that when using false in metaprogramming machinery its conversion
+// isn't flagged.
+template <int N> struct S {};
+S<sizeof(f(false))> s;





More information about the cfe-commits mailing list