aaron.ballman added inline comments.

================
Comment at: clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp:199-200
+    const FunctionDecl *HandlerDecl, const Expr *HandlerRef) {
+  int CallLevel = Itr.getPathLength() - 2;
+  const CallGraphNode *Caller = Itr.getPath(CallLevel + 1), *Callee = nullptr;
+  while (CallLevel >= 0) {
----------------
balazske wrote:
> aaron.ballman wrote:
> > Do we have to worry about `CallLevel + 1` being negative here? (Is there a 
> > need for an assert?)
> Really yes, but here is no assert because it is on line 161 and the function 
> is called only there. A `df_iterator` path contains the start and end node, 
> and there should be at least one function if we have any report do show, the 
> path length should be at least 1 (make assert for that?). (Later there could 
> be cases when the function is called with path length 1.)
Thanks for the explanation -- an assert that the path has at least 1 element 
wouldn't be awful, but also doesn't seem like something we'd get a lot of value 
from here. It's up to you if you want to add an assert or not.


================
Comment at: clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp:207-208
+         DiagnosticIDs::Note)
+        << cast<FunctionDecl>(Callee->getDecl())
+        << cast<FunctionDecl>(Caller->getDecl());
+    --CallLevel;
----------------
balazske wrote:
> aaron.ballman wrote:
> > Do we have to worry about call expressions for which we cannot find the 
> > declaration (like a call through a function pointer)? (Should we add some 
> > test coverage involving a call stack with a call through a function 
> > pointer?)
> A declaration should always be there in the `CallGraphNode`, probably not a 
> definition. The call graph does not insert nodes for function pointer calls.
Oh! I didn't know the CallGraph didn't model calls through function pointers (I 
had assumed we would model that because there's still a `CallExpr` involved.)

Can you add a test case involving a call stack with a call through a function 
pointer (with comments), just to demonstrate the behavior?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118224

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

Reply via email to