[PATCH] D59523: Thread Safety: also look at ObjC methods

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 21 05:18:11 PDT 2019


aaron.ballman added a reviewer: delesley.
aaron.ballman added a comment.

Adding Delesley in case he has input on design.



================
Comment at: lib/Analysis/ThreadSafetyCommon.cpp:280
     unsigned I = PV->getFunctionScopeIndex();
-
-    if (Ctx && Ctx->FunArgs && FD == Ctx->AttrDecl->getCanonicalDecl()) {
-      // Substitute call arguments for references to function parameters
-      assert(I < Ctx->NumArgs);
-      return translate(Ctx->FunArgs[I], Ctx->Prev);
+    const auto *D = PV->getDeclContext();
+    if (Ctx && Ctx->FunArgs) {
----------------
Please don't use `auto` when the type is not explicitly spelled out in the initialization.


================
Comment at: lib/Analysis/ThreadSafetyCommon.cpp:282
+    if (Ctx && Ctx->FunArgs) {
+      const auto *Canonical = Ctx->AttrDecl->getCanonicalDecl();
+      if (isa<FunctionDecl>(D)
----------------
Same.


================
Comment at: lib/Analysis/ThreadSafetyCommon.cpp:283-285
+      if (isa<FunctionDecl>(D)
+              ? (cast<FunctionDecl>(D)->getCanonicalDecl() == Canonical)
+              : (cast<ObjCMethodDecl>(D)->getCanonicalDecl() == Canonical)) {
----------------
Also somewhat orthogonal to your changes, but... ugh, the lack of any common base between `FunctionDecl` and `ObjcMethodDecl` strikes again. I sort of wish we would introduce a CallableDecl base class that these two (and BlockDecl) could all inherit from to take care of this sort of ugly hack.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59523/new/

https://reviews.llvm.org/D59523





More information about the cfe-commits mailing list