[PATCH] D148461: [clang-tidy] Support C++17/20 in bugprone-exception-escape
Piotr Zegar via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Apr 16 03:37:19 PDT 2023
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;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D148461.513985.patch
Type: text/x-patch
Size: 2409 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230416/1b9394c2/attachment-0001.bin>
More information about the cfe-commits
mailing list