summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorRichard Trieu <rtrieu@google.com>2014-06-06 21:39:26 +0000
committerRichard Trieu <rtrieu@google.com>2014-06-06 21:39:26 +0000
commitf7432755d0c09b8c01ced9c3b0f337a85a1ccf96 (patch)
tree98eb15262ae6867573cf0d0d7a538149d0b1494d /clang/lib/Sema
parentd0700b29195b72c3af8dc8f05dfb6ed04ca3e907 (diff)
downloadbcm5719-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')
-rw-r--r--clang/lib/Sema/SemaChecking.cpp16
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.
OpenPOWER on IntegriCloud