PiotrZSL created this revision. PiotrZSL added reviewers: njames93, carlosgalvezp. Herald added a subscriber: xazax.hun. Herald added a project: All. PiotrZSL requested review of this revision. Herald added a project: clang-tools-extra. Herald added a subscriber: cfe-commits.
Added support for C++17 or later in tests Pointers to member functions are now handled correctly in C++20 Depends on D148458 <https://reviews.llvm.org/D148458> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D148461 Files: clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp Index: clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp +++ 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) { } } } Index: clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp =================================================================== --- clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp +++ 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;
Index: clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/bugprone/exception-escape.cpp +++ 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) { } } } Index: clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp =================================================================== --- clang-tools-extra/clang-tidy/utils/ExceptionAnalyzer.cpp +++ 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;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits