diff options
| author | Richard Trieu <rtrieu@google.com> | 2014-06-06 21:39:26 +0000 |
|---|---|---|
| committer | Richard Trieu <rtrieu@google.com> | 2014-06-06 21:39:26 +0000 |
| commit | f7432755d0c09b8c01ced9c3b0f337a85a1ccf96 (patch) | |
| tree | 98eb15262ae6867573cf0d0d7a538149d0b1494d /clang/lib/Sema/SemaChecking.cpp | |
| parent | d0700b29195b72c3af8dc8f05dfb6ed04ca3e907 (diff) | |
| download | bcm5719-llvm-f7432755d0c09b8c01ced9c3b0f337a85a1ccf96.tar.gz bcm5719-llvm-f7432755d0c09b8c01ced9c3b0f337a85a1ccf96.zip | |
Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings
to detect underfined behavior involving pointers.
llvm-svn: 210372
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 916ce7d9855..570f7498156 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -6189,6 +6189,13 @@ void Sema::DiagnoseAlwaysNonNullPointer(Expr *E, const bool IsCompare = NullKind != Expr::NPCK_NotNull; + if (isa<CXXThisExpr>(E)) { + unsigned DiagID = IsCompare ? diag::warn_this_null_compare + : diag::warn_this_bool_conversion; + Diag(E->getExprLoc(), DiagID) << E->getSourceRange() << Range << IsEqual; + return; + } + bool IsAddressOf = false; if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E)) { @@ -6218,9 +6225,14 @@ void Sema::DiagnoseAlwaysNonNullPointer(Expr *E, // Address of function is used to silence the function warning. if (IsFunction) return; - // Address of reference can be null. - if (T->isReferenceType()) + + if (T->isReferenceType()) { + unsigned DiagID = IsCompare + ? diag::warn_address_of_reference_null_compare + : diag::warn_address_of_reference_bool_conversion; + Diag(E->getExprLoc(), DiagID) << E->getSourceRange() << Range << IsEqual; return; + } } // Found nothing. |

