================
@@ -534,11 +534,24 @@ class LifetimeSafetySemaHelperImpl : public 
LifetimeSafetySemaHelper {
     return "expression";
   }
 
+  bool isInValidExpr(const Expr *E) {
+    if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {
+      return DRE->getDecl()->isImplicit();
+    }
+
+    if (const auto *CE = dyn_cast<CallExpr>(E)) {
+      if (const auto *FE = CE->getDirectCallee())
+        return FE->isImplicit();
+    }
----------------
suoyuan666 wrote:

Yeah, that makes sense. I have added a fallback that `returns false` when 
`CallExpr->getDirectCallee()` is `nullptr`.

If our goal is simply to avoid printing internal variable names, I think that 
should be sufficient, since `getDiagSubjectDescription()` only prints the 
callee name when the `FunctionDecl` is available.

As for a test case where a function pointer appears on the RHS, I don't have 
much experience with that yet, so I wasn't able to come up with one that 
actually triggers the warning. The following example doesn't seem to work:

```cpp
void foo() {
  int *s;
  {
    int *(*func)(int *);
    int tgt = 2;
    int *a = &tgt;
    s = func(a);
  }

  (void)*s;
}
```

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

Reply via email to