[PATCH] D83717: [clang-tidy] Add check fo SEI CERT item ENV32-C
Balázs Benics via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 14 06:07:42 PDT 2020
steakhal added a comment.
Unfortunately, I'm not qualified enough to have much to say.
================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:1
+//===--- Env32CCheck.cpp - clang-tidy -------------------------------------===//
+//
----------------
Env32CCheck.cpp -> ExitHandlerCheck.cpp
================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:38
+bool isExitFunction(StringRef FnName) {
+ return FnName == EF__Exit || FnName == EF_exit || FnName == EF_quick_exit;
+}
----------------
If `EF__Exit`, `EF_exit` and `EF_quick_exit` referred only once, we could simply inline those,
Same for the `isJumpFunction`.
================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:60
+ /// Iteration over the collector is iteration over the found FunctionDecls.
+ auto begin() const -> decltype(CalledFunctions.begin()) {
+ return CalledFunctions.begin();
----------------
IMO `-> decltype(CalledFunctions.begin())` is unnecessary.
Return type deduction does the right thing for this case.
Same for the `auto end() ...`
================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:84
+ hasArgument(
+ 0, // the first argument is the handler function
+ declRefExpr(
----------------
If you disabled clang-format for having inline comments, Then you could create smaller matchers and give names for them.
Something similar to this:
```lang=cpp
const auto DesciptiveName = hasArgument(0, declRefExpr(hasDeclaration(functionDecl().bind("handler_decl"))));
```
================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:132
+ "terminate by returning");
+ break;
+ }
----------------
Why don't we `return` here?
Same for the next `break`.
================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.cpp:148-154
+ // Collect all the referenced FunctionDecls.
+ Collector.TraverseStmt(CurrentDefWithBody->getBody());
+ // Add called functions to the worklist.
+ std::copy(Collector.begin(), Collector.end(),
+ std::back_inserter(CalledFunctions));
+ // Reset the ASTVisitor instance results.
+ Collector.clear();
----------------
nit: I would clear the `Collector` before the `TraverseStmt`.
================
Comment at: clang-tools-extra/clang-tidy/cert/ExitHandlerCheck.h:20
+/// Checker for SEI CERT rule ENV32-C
+/// All exit handlers must return normal.
+/// Exit handlers must terminate by returning. It is important and potentially
----------------
In the documentation you use the:
clang-tools-extra/docs/clang-tidy/checks/cert-env32-c.rst
> All exit handlers must return normally.
You should be consistent.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83717/new/
https://reviews.llvm.org/D83717
More information about the cfe-commits
mailing list