[clang-tidy] prevent generated checks from triggering assertions on anonymous functions
authorBogdan Serea <bogdan.serea@arm.com>
Tue, 11 Aug 2020 13:41:48 +0000 (14:41 +0100)
committerDavid Truby <david.truby@arm.com>
Wed, 12 Aug 2020 11:43:40 +0000 (12:43 +0100)
Skeleton checks generated by clang-tidy add_check.py cause assertions to fail when run over anonymous functions(lambda functions). This patch introduces an additional check to verify that the target function is not anonymous before calling getName().
The code snippet from the [[ https://clang.llvm.org/extra/clang-tidy/Contributing.html | clang-tidy tutorial  ]]is also updated.

Reviewed By: alexfh, DavidTruby

Differential Revision: https://reviews.llvm.org/D85218

clang-tools-extra/clang-tidy/add_new_check.py
clang-tools-extra/docs/clang-tidy/Contributing.rst

index 231f43c..14fcfe8 100755 (executable)
@@ -136,7 +136,7 @@ void %(check_name)s::registerMatchers(MatchFinder *Finder) {
 void %(check_name)s::check(const MatchFinder::MatchResult &Result) {
   // FIXME: Add callback implementation.
   const auto *MatchedDecl = Result.Nodes.getNodeAs<FunctionDecl>("x");
-  if (MatchedDecl->getName().startswith("awesome_"))
+  if (!MatchedDecl->getIdentifier() || MatchedDecl->getName().startswith("awesome_"))
     return;
   diag(MatchedDecl->getLocation(), "function %%0 is insufficiently awesome")
       << MatchedDecl;
index 3ed6dad..6b7af47 100644 (file)
@@ -202,7 +202,7 @@ can further inspect them and report diagnostics.
 
   void AwesomeFunctionNamesCheck::check(const MatchFinder::MatchResult &Result) {
     const auto *MatchedDecl = Result.Nodes.getNodeAs<FunctionDecl>("x");
-    if (MatchedDecl->getName().startswith("awesome_"))
+    if (!MatchedDecl->getIdentifier() || MatchedDecl->getName().startswith("awesome_"))
       return;
     diag(MatchedDecl->getLocation(), "function %0 is insufficiently awesome")
         << MatchedDecl