Index: lib/Sema/Sema.cpp =================================================================== --- lib/Sema/Sema.cpp +++ lib/Sema/Sema.cpp @@ -438,7 +438,7 @@ void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) { if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer) return; - if (E->getType()->isNullPtrType()) + if (E->IgnoreImpCasts()->getType()->isNullPtrType()) return; // nullptr only exists from C++11 on, so don't warn on its absence earlier. if (!getLangOpts().CPlusPlus11) Index: test/SemaCXX/warn-zero-nullptr.cpp =================================================================== --- test/SemaCXX/warn-zero-nullptr.cpp +++ test/SemaCXX/warn-zero-nullptr.cpp @@ -25,3 +25,7 @@ // 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(0); // expected-warning{{zero as null pointer constant}} + +// Shouldn't warn. +struct pr34362 { operator int*() { return nullptr; } }; +void pr34362_func() { if (nullptr == pr34362()) {} }