forked from OSchip/llvm-project
Ignore implicity casts for zero-as-null-pointer-constant warning
The repro in https://bugs.llvm.org/show_bug.cgi?id=34362 caused the left nullptr to be cast to a int* implicitly, which resulted diagnosing this falsely. Differential Revision: https://reviews.llvm.org/D39301 llvm-svn: 316605
This commit is contained in:
parent
cc7763ba92
commit
818cf5bcb3
|
@ -438,7 +438,7 @@ void Sema::diagnoseNullableToNonnullConversion(QualType DstType,
|
|||
void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) {
|
||||
if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer)
|
||||
return;
|
||||
if (E->getType()->isNullPtrType())
|
||||
if (E->IgnoreParenImpCasts()->getType()->isNullPtrType())
|
||||
return;
|
||||
// nullptr only exists from C++11 on, so don't warn on its absence earlier.
|
||||
if (!getLangOpts().CPlusPlus11)
|
||||
|
|
|
@ -25,3 +25,10 @@ void g() {
|
|||
// Warn on these too. Matches gcc and arguably makes sense.
|
||||
void* pp = (decltype(nullptr))0; // expected-warning{{zero as null pointer constant}}
|
||||
void* pp2 = static_cast<decltype(nullptr)>(0); // expected-warning{{zero as null pointer constant}}
|
||||
|
||||
// Shouldn't warn.
|
||||
namespace pr34362 {
|
||||
struct A { operator int*() { return nullptr; } };
|
||||
void func() { if (nullptr == A()) {} }
|
||||
void func2() { if ((nullptr) == A()) {} }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue