================
@@ -321,29 +344,48 @@ class RawPtrRefLocalVarsChecker
return;
if (auto *DD = dyn_cast<DecompositionDecl>(V)) {
+ const auto *InitList =
+ Value ? dyn_cast<InitListExpr>(Value->IgnoreParenCasts()) : nullptr;
+ if (InitList && InitList->getNumInits() != DD->bindings().size())
+ InitList = nullptr;
+
+ unsigned BindingIndex = 0;
for (auto *BD : DD->bindings()) {
+ const unsigned Index = BindingIndex++;
auto *Binding = BD->getBinding();
if (!Binding)
continue;
std::optional<bool> IsUncountedPtr = isUnsafePtr(Binding->getType());
if (!IsUncountedPtr || !*IsUncountedPtr)
continue;
- reportBug(V, V->getType(), nullptr, BD, DeclWithIssue);
+
+ const Expr *Origin = nullptr;
+ if (Model->checksForInteriorDestruction()) {
+ const Expr *Source = InitList ? InitList->getInit(Index) : Value;
+ if (!Source || isPtrOriginSafe(V, Source, DeclWithIssue, &Origin))
----------------
geoffreygaren wrote:
Actually, `!Source` is impossible, so I'll just remove it.
https://github.com/llvm/llvm-project/pull/225274
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits