[PATCH] D80371: [clang-tidy] Fix potential assert in use-noexcept check

Nathan James via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat May 23 16:59:03 PDT 2020


njames93 updated this revision to Diff 265899.
njames93 added a comment.

- Isolated exact cause of the assert.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80371

Files:
  clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp
  clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h


Index: clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h
===================================================================
--- clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h
+++ clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.h
@@ -41,7 +41,7 @@
 
 private:
   const std::string NoexceptMacro;
-  bool UseNoexceptFalse;
+  const bool UseNoexceptFalse;
 };
 
 } // namespace modernize
Index: clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp
+++ clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp
@@ -16,6 +16,10 @@
 namespace tidy {
 namespace modernize {
 
+namespace {
+AST_MATCHER(NamedDecl, isValid) { return !Node.isInvalidDecl(); }
+} // namespace
+
 UseNoexceptCheck::UseNoexceptCheck(StringRef Name, ClangTidyContext *Context)
     : ClangTidyCheck(Name, Context),
       NoexceptMacro(Options.get("ReplacementString", "")),
@@ -29,20 +33,12 @@
 void UseNoexceptCheck::registerMatchers(MatchFinder *Finder) {
   Finder->addMatcher(
       functionDecl(
-          cxxMethodDecl(
-              hasTypeLoc(loc(functionProtoType(hasDynamicExceptionSpec()))),
-              anyOf(hasOverloadedOperatorName("delete[]"),
-                    hasOverloadedOperatorName("delete"), cxxDestructorDecl()))
-              .bind("del-dtor"))
-          .bind("funcDecl"),
-      this);
-
-  Finder->addMatcher(
-      functionDecl(
+          isValid(),
           hasTypeLoc(loc(functionProtoType(hasDynamicExceptionSpec()))),
-          unless(anyOf(hasOverloadedOperatorName("delete[]"),
-                       hasOverloadedOperatorName("delete"),
-                       cxxDestructorDecl())))
+          optionally(cxxMethodDecl(anyOf(hasAnyOverloadedOperatorName(
+                                             "delete[]", "delete"),
+                                         cxxDestructorDecl()))
+                         .bind("del-dtor")))
           .bind("funcDecl"),
       this);
 
@@ -80,6 +76,9 @@
                   .castAs<FunctionProtoTypeLoc>()
                   .getExceptionSpecRange();
   }
+
+  assert(Range.isValid() && "Exception Source Range is invalid.");
+
   CharSourceRange CRange = Lexer::makeFileCharRange(
       CharSourceRange::getTokenRange(Range), *Result.SourceManager,
       Result.Context->getLangOpts());


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80371.265899.patch
Type: text/x-patch
Size: 2426 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200523/6a32cd12/attachment-0001.bin>


More information about the cfe-commits mailing list