aaron.ballman added inline comments.

================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:33
+bool isExitFunction(StringRef FnName) {
+  return FnName == "_Exit" || FnName == "exit" || FnName == "quick_exit";
+}
----------------
Because this rule applies in C++ as well as C, you should protect these names 
so that calling something like this doesn't trigger the check:
```
namespace menu_items {
void exit(int);
}
```
I think we want `::_Exit` and `::std::_Exit` to check the fully qualified names 
(I believe this will still work in C, but should be tested). The same goes for 
the other names (including `atexit` and `at_quick_exit` above).


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:64
+/// argument.
+void ExitHandlerCheck::registerMatchers(MatchFinder *Finder) {
+  const auto IsRegisterFunction =
----------------
whisperity wrote:
> What happens if this test is run on C++ code calling the same functions? I 
> see the rule is only applicable to C, for some reason... Should it be 
> disabled from registering if by accident the check is enabled on a C++ source 
> file?
The CERT C++ rules inherit many of the C rules, including this one. It's listed 
towards the bottom of the set of inherited rules here: 
https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=88046336


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:70
+             .bind("handler_expr"));
+  Finder->addMatcher(
+      callExpr(IsRegisterFunction, HasHandlerAsFirstArg).bind("register_call"),
----------------
I am not at all certain whether this is plausible, but I *think* this check can 
be almost entirely implemented in the matchers rather than having to do manual 
work. I think you can bind the argument node from the call to `at_quick_exit()` 
and then use `equalsBoundNode()` to find the function calls within the bound 
`functionDecl()` node.

However, if that's not workable, I think you can get rid of the 
`CalledFunctionsCollector` entirely and just use matchers directly within the 
`check()` function because by that point, you'll know exactly which AST nodes 
you want to traverse through.


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:112-113
+      diag(RegisterCall->getBeginLoc(),
+           "exit-handler potentially calls an exit function. Handlers should "
+           "terminate by returning");
+      diag(HandlerDecl->getBeginLoc(), "handler function declared here",
----------------
whisperity wrote:
> Same as below, suggestion: "exit hander potentially calls exit function 
> instead of terminating normally with a return".
> 
> ("exit handler" and "exit function" without - is more in line with the SEI 
> CERT rule's phrasing too, they don't say "exit-handler".)
Slight tweak to the suggestion: `exit hander potentially calls an exit function 
instead of terminating normally with a return`


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:124-125
+      diag(RegisterCall->getSourceRange().getBegin(),
+           "exit-handler potentially calls a jump function. Handlers should "
+           "terminate by returning");
+      diag(HandlerDecl->getBeginLoc(), "handler function declared here",
----------------
whisperity wrote:
> This semi-sentence structure of starting with lowercase but also terminating 
> the sentence and leaving in another but unterminated sentences looks really 
> odd.
> 
> Suggestion: "exit handler potentially jumps instead of terminating normally 
> with a return"
Slight tweak here as well. I don't think we'll ever see a jump function other 
than longjmp for this rule, so what about writing `potentially calls 'longjmp'` 
instead of `potentially jumps`?


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:128
+           DiagnosticIDs::Note);
+      diag(CurrentUsage->getBeginLoc(), "jump function called here",
+           DiagnosticIDs::Note);
----------------
If you make the suggested change above, I'd do a similar change here.


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:1
+//===--- Env32CCheck.cpp - clang-tidy 
-------------------------------------===//
+//
----------------
steakhal wrote:
> Env32CCheck.cpp -> ExitHandlerCheck.cpp
This comment was marked done but appears to still be an issue.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D83717

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

Reply via email to