forked from OSchip/llvm-project
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. llvm-svn: 126739
This commit is contained in:
parent
96a7a59119
commit
477a999788
|
@ -1939,8 +1939,8 @@ bool Sema::CheckPointerConversion(Expr *From, QualType ToType,
|
|||
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>()) {
|
||||
|
|
|
@ -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 <int N> struct S {};
|
||||
S<sizeof(f(false))> s;
|
||||
|
|
Loading…
Reference in New Issue