diff --git a/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp b/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp --- a/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp +++ b/clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp @@ -157,6 +157,9 @@ return false; if (To->isFunctionPointerType()) { + // FIXME: Two function pointers can differ in 'noexcept', but they still + // should be considered to be same, now this triggers false-positive because + // Type* != Type*. if (From->isFunctionPointerType()) return To->getPointeeType() == From->getPointeeType(); @@ -278,16 +281,17 @@ return false; if (!isSameP_i(From, To)) { - if (LangOpts.CPlusPlus20) { - if (From->isConstantArrayType() && !To->isIncompleteArrayType()) - return false; + if (!LangOpts.CPlusPlus20) + return false; - if (From->isIncompleteArrayType() && !To->isIncompleteArrayType()) - return false; + if (From->isConstantArrayType() && !To->isIncompleteArrayType()) + return false; - } else { + if (From->isIncompleteArrayType() && !To->isIncompleteArrayType()) + return false; + + if (From->isMemberPointerType() || To->isMemberPointerType()) return false; - } } ++I; diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp @@ -1,10 +1,9 @@ -// RUN: %check_clang_tidy -std=c++11,c++14 %s bugprone-exception-escape %t -- \ +// RUN: %check_clang_tidy -std=c++11-or-later %s bugprone-exception-escape %t -- \ // RUN: -config="{CheckOptions: [ \ // RUN: {key: bugprone-exception-escape.IgnoredExceptions, value: 'ignored1,ignored2'}, \ // RUN: {key: bugprone-exception-escape.FunctionsThatShouldNotThrow, value: 'enabled1,enabled2,enabled3'} \ // RUN: ]}" \ // RUN: -- -fexceptions -// FIXME: Fix the checker to work in C++17 or later mode. struct throwing_destructor { ~throwing_destructor() { @@ -412,7 +411,7 @@ void throw_noexcept_catch_regular() noexcept { try { throw &foo; - } catch(int (*)()) { + } catch(int (*)() noexcept) { } } }