diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2014-11-11 19:59:16 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2014-11-11 19:59:16 +0000 |
commit | c5fd4844da5233d514a43762d1670a912d7ce3ac (patch) | |
tree | da6e7139c3ace3f9bc837af0d7b0f96e310f9a68 /clang/lib/Sema/SemaChecking.cpp | |
parent | 944547deab183814b199018a7389df91cd384cdb (diff) | |
download | bcm5719-llvm-c5fd4844da5233d514a43762d1670a912d7ce3ac.tar.gz bcm5719-llvm-c5fd4844da5233d514a43762d1670a912d7ce3ac.zip |
Patch to warn when logical evaluation of operand evalutes to a true value;
That this is a c-only patch. c++ already has this warning.
This addresses rdar://18716393
llvm-svn: 221702
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index ea4f3476b6c..fe47bfb12e9 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -6748,6 +6748,17 @@ void Sema::DiagnoseAlwaysNonNullPointer(Expr *E, << FixItHint::CreateInsertion(getLocForEndOfToken(E->getLocEnd()), "()"); } +void Sema::CheckAlwaysNonNullPointer(Expr *OrigExpr) { + if (const UnaryOperator *U = dyn_cast<UnaryOperator>(OrigExpr)) + if (U->getOpcode() == UO_LNot) + return CheckAlwaysNonNullPointer(U->getSubExpr()); + + Expr *E = OrigExpr->IgnoreParenImpCasts(); + QualType Source = E->getType(); + if (Source->isPointerType() || Source->canDecayToPointerType()) + DiagnoseAlwaysNonNullPointer(E, Expr::NPCK_NotNull, /*IsEqual*/ false, + SourceRange()); +} /// Diagnoses "dangerous" implicit conversions within the given /// expression (which is a full expression). Implements -Wconversion |