================
@@ -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

Reply via email to