[PATCH] D54222: [clang-tidy] Add a check to detect returning static locals in public headers

Jonas Toth via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 7 14:20:03 PST 2018


JonasToth added a comment.

I agree with @Eugene.Zelenko that this check should rather live in `bugprone-` as the issue its diagnosing is not LLVM specific. It is ok to add an alias into the llvm module.



================
Comment at: clang-tidy/llvm/ProblematicStaticsCheck.cpp:22
+void ProblematicStaticsCheck::registerMatchers(MatchFinder *Finder) {
+  auto Matcher = returnStmt(hasReturnValue(ignoringImplicit(unaryOperator(
+                                hasOperatorName("&"),
----------------
Nit: you can inline this variable, having it does not improve readability (IMHO) nor does it reduce duplication.


================
Comment at: clang-tidy/llvm/ProblematicStaticsCheck.cpp:26
+                                    varDecl(isStaticLocal()).bind("var"))))))),
+                            isExpansionInFileMatching("/include/.*\\.h"))
+                     .bind("return");
----------------
I think the matching on `include` should not be done. Maybe it's ok to filter for header files, but we should not assume they live in `include/...` (as i think this check is generally useful and not too LLVM specific).

More filters for false positives could be checking if the function itself is `static` or in an anonymous namespace.


================
Comment at: clang-tidy/llvm/ProblematicStaticsCheck.cpp:33
+  const auto *VD = Result.Nodes.getNodeAs<VarDecl>("var");
+  const auto *Return = Result.Nodes.getNodeAs<ReturnStmt>("return");
+  diag(Return->getBeginLoc(), "address of static local variable %0 may not "
----------------
Please `assert` on `VD` and `Return`


================
Comment at: test/clang-tidy/llvm-problematic-statics.cpp:3
+
+#include "include/ProblematicStatics.h"
+// CHECK-MESSAGES: ProblematicStatics.h:7:5: warning: address of static local variable 'index' may not be identical across library boundaries [llvm-problematic-statics]
----------------
I think the testing should include more cases. At least normal functions, and a false case as well.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D54222





More information about the cfe-commits mailing list