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";
+}
----------------
njames93 wrote:
> whisperity wrote:
> > aaron.ballman wrote:
> > > 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).
> > > 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).
> > 
> > Tested with Clang-Query:
> > 
> > ```
> > clang-query> m functionDecl(hasName("::atexit"))
> > 
> > Match #1:
> > 
> > /home/whisperity/LLVM/Build/foo.c:1:1: note: "root" binds here
> > int atexit(int) {}
> > ^~~~~~~~~~~~~~~~~~
> > 1 match.
> > ```
> That only works because the logic inside the `hasName`matcher 
That's the bit I was worried about, too, thanks for confirming @njames93. 


================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:64
+/// argument.
+void ExitHandlerCheck::registerMatchers(MatchFinder *Finder) {
+  const auto IsRegisterFunction =
----------------
whisperity wrote:
> aaron.ballman wrote:
> > 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
> Right, thanks for the heads-up. This should be somewhat more indicative on 
> the Wiki on the page for the rule (especially because people won't 
> immediately understand why a `-c` check reports on their cpp code, assuming 
> they understand `-c` means C.)
I would imagine people shouldn't be confused by a C check triggering in C++ 
given that C++ incorporates much of C so there's a considerable amount of 
overlap (for instance, this hasn't been an issue with `cert-env33-c` which 
applies in both C and C++).

That said, what do you think should be indicated on the wiki (I assume you mean 
the CERT wiki and not the clang-tidy documentation)? I'm happy to pass the 
suggestion along to folks I still know at CERT.


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