aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorLeonard Chan <leonardchan@google.com>2020-06-10 12:20:54 -0700
committerLeonard Chan <leonardchan@google.com>2020-06-10 12:20:54 -0700
commit2f6bb2a69215f9cae883da12f8f596d3f80f8d71 (patch)
treea508a22c67463c10b5b74103d0220e513e1b78fa /clang/lib/Sema/SemaInit.cpp
parentbf124017a23ca4092178e58f86c31de02644efe3 (diff)
downloadllvm-2f6bb2a69215f9cae883da12f8f596d3f80f8d71.zip
llvm-2f6bb2a69215f9cae883da12f8f596d3f80f8d71.tar.gz
llvm-2f6bb2a69215f9cae883da12f8f596d3f80f8d71.tar.bz2
[clang][Attribute] Fix noderef attribute false-negatives
`noderef` was failing to trigger warnings in some cases related to c++ style casting. This patch addresses them. Differential Revision: https://reviews.llvm.org/D77836
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r--clang/lib/Sema/SemaInit.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index 0a98cb2..d46e7f86 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -8200,9 +8200,13 @@ ExprResult InitializationSequence::Perform(Sema &S,
if (const auto *ToPtrType = Step->Type->getAs<PointerType>()) {
if (FromPtrType->getPointeeType()->hasAttr(attr::NoDeref) &&
!ToPtrType->getPointeeType()->hasAttr(attr::NoDeref)) {
- S.Diag(CurInit.get()->getExprLoc(),
- diag::warn_noderef_to_dereferenceable_pointer)
- << CurInit.get()->getSourceRange();
+ // Do not check static casts here because they are checked earlier
+ // in Sema::ActOnCXXNamedCast()
+ if (!Kind.isStaticCast()) {
+ S.Diag(CurInit.get()->getExprLoc(),
+ diag::warn_noderef_to_dereferenceable_pointer)
+ << CurInit.get()->getSourceRange();
+ }
}
}
}