================
@@ -471,13 +474,46 @@ class LifetimeSafetySemaHelperImpl : public 
LifetimeSafetySemaHelper {
   }
 
   std::string getDiagSubjectDescription(const Expr *E) {
+    // FIXME: Ideally, this should use IgnoreParenImpCasts().
+    // However, according to the comment on IgnoreParenImpCasts(),
+    // it is not fully equivalent to IgnoreImpCasts() + IgnoreParens().
+    // Once the FIXME in IgnoreParenImpCasts() is resolved,
+    // this can be switched to use IgnoreParenImpCasts().
+    E = E->IgnoreImpCasts()->IgnoreParens();
     if (isa<MaterializeTemporaryExpr>(E))
       return "local temporary object";
 
     if (const auto *DRE = dyn_cast<DeclRefExpr>(E))
       return getDiagSubjectDescription(DRE->getDecl());
     // TODO: Handle other expression types.
-    return "";
+    return "expression";
+  }
+
+  void reportAliasingChain(llvm::ArrayRef<const Expr *> OriginExprChain) {
+    std::string IssueStr;
+    const Expr *IssueExpr = nullptr;
+    const Expr *LastExpr = nullptr;
+
+    for (const Expr *CurrExpr : reverse(OriginExprChain)) {
+      if (!IssueExpr) {
+        IssueStr = getDiagSubjectDescription(CurrExpr);
+        IssueExpr = CurrExpr;
+        LastExpr = CurrExpr;
+        continue;
+      }
+
+      if (CurrExpr->getSourceRange() == LastExpr->getSourceRange())
+        continue;
+      if (isa<MaterializeTemporaryExpr>(CurrExpr) &&
+          isa<MaterializeTemporaryExpr>(IssueExpr))
+        continue;
----------------
usx95 wrote:

Also this should take care of not showing `ParenExpr`. I think this is the 
reason why we have unhelpful notes in the following case:
```
p = ((GetPointer((a))));  // expected-warning {{local variable 'a' does not 
live long enough}} \
                              // expected-note {{local variable 'a' aliases the 
storage of local variable 'a'}} \
                              // expected-note {{expression aliases the storage 
of local variable 'a'}}
```

https://github.com/llvm/llvm-project/pull/199345
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to