From e34e3f16580c586b032035e2612d12ae4569f21e Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 1 Mar 2011 03:29:37 +0000 Subject: [PATCH] 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126739 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaOverload.cpp | 4 ++-- test/SemaCXX/warn_false_to_pointer.cpp | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index f5316b564e..14d545d3e4 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -1939,8 +1939,8 @@ bool Sema::CheckPointerConversion(Expr *From, QualType ToType, if (CXXBoolLiteralExpr* LitBool = dyn_cast(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()) if (const PointerType *ToPtrType = ToType->getAs()) { diff --git a/test/SemaCXX/warn_false_to_pointer.cpp b/test/SemaCXX/warn_false_to_pointer.cpp index fb6f9551a7..26b54f6e68 100644 --- a/test/SemaCXX/warn_false_to_pointer.cpp +++ b/test/SemaCXX/warn_false_to_pointer.cpp @@ -8,3 +8,10 @@ void foo(int* i, int *j=(false)) // expected-warning{{ initialization of pointer foo((int*)false); } +char f(struct Undefined*); +double f(...); + +// Ensure that when using false in metaprogramming machinery its conversion +// isn't flagged. +template struct S {}; +S s; -- 2.50.1