balazske marked an inline comment as done.
balazske added inline comments.
================
Comment at: clang-tools-extra/clang-tidy/cert/SignalHandlerCheck.cpp:33
+
+  for (const FunctionDecl *D : Node.redecls())
+    if (D->getASTContext().getSourceManager().isInSystemHeader(
----------------
aaron.ballman wrote:
> I'm not certain I understand why we're looking through the entire 
> redeclaration chain to see if the function is ever mentioned in a system 
> header. I was expecting we'd look at the expansion location of the 
> declaration and see if that's in a system header, which is already handled by 
> the `isExpansionInSystemHeader()` matcher. Similar below.
This function is called from ` SignalHandlerCheck::check` when any function 
call is found. So the check for system header is needed. It was unclear to me 
what the "expansion location" means but it seems to work if using that 
expansion location and checking for system header, instead of this loop. I will 
update the code.


================
Comment at: clang-tools-extra/clang-tidy/cert/SignalHandlerCheck.cpp:84
+      functionDecl(hasName(SignalFun), parameterCountIs(2),
+                   anyOf(isInStdNamespace(), isTopLevelSystemFunction()));
+  auto HandlerExpr =
----------------
aaron.ballman wrote:
> I think this can be simplified to remove the `anyOf`:
> ```
> functionDecl(hasAnyName("::signal", "::std::signal"), 
> isExpansionInSystemHeader())
> ```
> should be sufficient (if there's a function named `signal` in a system header 
> that has the wrong parameter count, I'd be surprised).
I was not aware of the possibility of using namespaces in the name, it is 
really more simple this way (and the `isExpansionInSystemHeader` seems to work 
good here).


================
Comment at: clang-tools-extra/docs/clang-tidy/checks/cert-sig30-c.rst:13
+(for ``signal`` there are additional conditions that are not checked).
+Every other system call is considered as non asynchronous-safe by the checker.
+
----------------
aaron.ballman wrote:
> I would document this as: `Any function that cannot be determined to be an 
> asynchronous-safe function call is assumed to be non-asynchronous-safe by the 
> checker, including function calls for which only the declaration of the 
> called function is visible.`
"including function calls for which only the declaration of the called function 
is visible": Is this the better approach? The checker does not make warning for 
such functions in the current state.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D87449

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

Reply via email to