diff options
author | Nico Weber <nicolasweber@gmx.de> | 2017-05-05 16:11:08 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2017-05-05 16:11:08 +0000 |
commit | d7ba86b6bf54740dd4007e65a927151cb9f510b4 (patch) | |
tree | f74f2de716ddadb5b2a99864578e05bb341aceb7 /clang/lib/Sema/Sema.cpp | |
parent | 8b66b00ecd04c3d37fcfa6bfd03595365c7efd30 (diff) | |
download | bcm5719-llvm-d7ba86b6bf54740dd4007e65a927151cb9f510b4.tar.gz bcm5719-llvm-d7ba86b6bf54740dd4007e65a927151cb9f510b4.zip |
Introduce Wzero-as-null-pointer-constant.
Add an opt-in warning that fires when 0 is used as a null pointer.
gcc has this warning, and there's some demand for it.
https://reviews.llvm.org/D32914
llvm-svn: 302247
Diffstat (limited to 'clang/lib/Sema/Sema.cpp')
-rw-r--r-- | clang/lib/Sema/Sema.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 94e792c1d17..2f493fa5fbe 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -383,6 +383,19 @@ void Sema::diagnoseNullableToNonnullConversion(QualType DstType, Diag(Loc, diag::warn_nullability_lost) << SrcType << DstType; } +void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr* E) { + if (Kind != CK_NullToPointer && Kind != CK_NullToMemberPointer) + return; + if (E->getType()->isNullPtrType()) + return; + // nullptr only exists from C++11 on, so don't warn on its absence earlier. + if (!getLangOpts().CPlusPlus11) + return; + + Diag(E->getLocStart(), diag::warn_zero_as_null_pointer_constant) + << FixItHint::CreateReplacement(E->getSourceRange(), "nullptr"); +} + /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast. /// If there is already an implicit cast, merge into the existing one. /// The result is of the given category. @@ -407,6 +420,7 @@ ExprResult Sema::ImpCastExprToType(Expr *E, QualType Ty, #endif diagnoseNullableToNonnullConversion(Ty, E->getType(), E->getLocStart()); + diagnoseZeroToNullptrConversion(Kind, E); QualType ExprTy = Context.getCanonicalType(E->getType()); QualType TypeTy = Context.getCanonicalType(Ty); |