================
@@ -415,6 +416,28 @@ class LifetimeChecker {
     }
   }
 
+  void reportMisplacedLifetimebound() {
+    const FunctionDecl *FDef = dyn_cast<FunctionDecl>(FD);
+    if (!FDef)
+      return;
+
+    const FunctionDecl *FDecl = FDef->getPreviousDecl();
----------------
usx95 wrote:

We add implicit attributes on redecl if we have attr in a previous decl. 
Therefore we could suggest attr on "first" decl in the TU (aka canonical decl). 

To prioritise "foo.h", we could instead suggest annotation on "first decl in a 
different file" but I would prefer to keep this policy simpler to understand by 
users. I would suggest to later have a separate warning enforcing that attrs on 
cross-tu redecls should match the canonical decl.

I also feel we should share this policy with annotation suggestions. Sharing 
this policy with `getCrossTUDecl` makes sense. To scope down this PR, we could 
change `getCrossTUDecl` in a separate PR to choose the canonical decl (instead 
of current: last decl in different file).

To summarise, we could:
1. (In this PR), introduce `getCanonicalDeclForAttr` to return the canonical 
decl and a warning scope (intra-tu vs xTU).
2. Next PR, replace `getCrossTUDecl` to use `getCanonicalDeclForAttr` for 
suggestions as well.
3. Next PR, identify unannotated cross-TU redeclarations not matching the 
canonical decl.

WDYT @Xazax-hun ?

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

Reply via email to