diff options
author | Leonard Chan <leonardchan@google.com> | 2020-06-10 12:20:54 -0700 |
---|---|---|
committer | Leonard Chan <leonardchan@google.com> | 2020-06-10 12:20:54 -0700 |
commit | 2f6bb2a69215f9cae883da12f8f596d3f80f8d71 (patch) | |
tree | a508a22c67463c10b5b74103d0220e513e1b78fa /clang/lib/Sema/SemaInit.cpp | |
parent | bf124017a23ca4092178e58f86c31de02644efe3 (diff) | |
download | llvm-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.cpp | 10 |
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(); + } } } } |