From f7432755d0c09b8c01ced9c3b0f337a85a1ccf96 Mon Sep 17 00:00:00 2001 From: Richard Trieu Date: Fri, 6 Jun 2014 21:39:26 +0000 Subject: Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings to detect underfined behavior involving pointers. llvm-svn: 210372 --- clang/lib/Sema/SemaChecking.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'clang/lib/Sema/SemaChecking.cpp') 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(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(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. -- cgit v1.2.3