ziqingluo-90 added inline comments.

================
Comment at: clang/lib/Sema/AnalysisBasedWarnings.cpp:2335
+      // To analyze callables:
+      if (isa<FunctionDecl, BlockDecl, ObjCMethodDecl>(Node)) {
+        // For code in dependent contexts, we'll do this at instantiation time:
----------------
NoQ wrote:
> The intended way to make recursive visitors is to have 
> `TraverseFunctionDecl`, `TraverseBlockDecl`, etc., which automatically do the 
> `isa` check and fall through to the superclass if the method isn't defined. 
> Then they can all call a common method to analyze the body.
> 
> This doesn't necessarily lead to better code though, just to more traditional 
> code, so up to you^^ in this case it probably doesn't matter. But it's 
> definitely nice to separate the common part (the part that invokes all 
> individual analyses) into its own method. And then you can eg. isolate the 
> special `hasBody()` check in the `TraverseFunctionDecl()` method, so that 
> other code paths didn't have an extra runtime check.
yeah, I think overriding `VisitFunctionDecl` and others separately is a better 
form because I was clearly dealing with `FunctionDecl` and others case by case 
there.  So put the specific logic for `FunctionDecl` in `VisitFunctionDecl` 
makes it clear.

Thanks for your advice.


================
Comment at: clang/lib/Sema/AnalysisBasedWarnings.cpp:2343-2345
+          // `FunctionDecl->hasBody()` returns true if the function has a body
+          // somewhere defined.  But we want to know if this `Node` has a body
+          // child.  So we use `doesThisDeclarationHaveABody`:
----------------
NoQ wrote:
> I wonder if `ObjCMethodDecl` has the same problem. They too can have 
> prototypes and definitions separate from each other.
It looks like `hasBody()` works properly for  `ObjCMethodDecl`.  I'm adding a 
test for it.


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

https://reviews.llvm.org/D146342

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to