[PATCH] D53187: [clang-tidy] Optimize query in bugprone-exception-escape
Balogh, Ádám via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Oct 13 01:28:57 PDT 2018
baloghadamsoftware updated this revision to Diff 169552.
baloghadamsoftware added a comment.
Warning added to the docs.
https://reviews.llvm.org/D53187
Files:
clang-tidy/bugprone/ExceptionEscapeCheck.cpp
docs/clang-tidy/checks/bugprone-exception-escape.rst
test/clang-tidy/bugprone-exception-escape.cpp
Index: test/clang-tidy/bugprone-exception-escape.cpp
===================================================================
--- test/clang-tidy/bugprone-exception-escape.cpp
+++ test/clang-tidy/bugprone-exception-escape.cpp
@@ -258,6 +258,31 @@
throw ignored1();
}
+void thrower(int n) {
+ throw n;
+}
+
+int directly_recursive(int n) noexcept {
+ // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: an exception may be thrown in funcion 'directly_recursive' which should not throw exceptions
+ if (n == 0)
+ thrower(n);
+ return directly_recursive(n);
+}
+
+int indirectly_recursive(int n) noexcept;
+// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: an exception may be thrown in functin 'indirectly_recursive' which should not throw exceptions
+
+int recursion_helper(int n) {
+ indirectly_recursive(n);
+}
+
+int indirectly_recursive(int n) noexcept {
+ // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: an exception may be thrown in funcion 'indirectly_recursive' which should not throw exceptions
+ if (n == 0)
+ thrower(n);
+ return recursion_helper(n);
+}
+
int main() {
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: an exception may be thrown in function 'main' which should not throw exceptions
throw 1;
Index: docs/clang-tidy/checks/bugprone-exception-escape.rst
===================================================================
--- docs/clang-tidy/checks/bugprone-exception-escape.rst
+++ docs/clang-tidy/checks/bugprone-exception-escape.rst
@@ -21,6 +21,8 @@
operations are also used to create move operations. A throwing ``main()``
function also results in unexpected termination.
+WARNING! This check may be expensive on large source files.
+
Options
-------
Index: clang-tidy/bugprone/ExceptionEscapeCheck.cpp
===================================================================
--- clang-tidy/bugprone/ExceptionEscapeCheck.cpp
+++ clang-tidy/bugprone/ExceptionEscapeCheck.cpp
@@ -190,12 +190,12 @@
return;
Finder->addMatcher(
- functionDecl(allOf(throws(unless(isIgnored(IgnoredExceptions))),
- anyOf(isNoThrow(), cxxDestructorDecl(),
+ functionDecl(allOf(anyOf(isNoThrow(), cxxDestructorDecl(),
cxxConstructorDecl(isMoveConstructor()),
cxxMethodDecl(isMoveAssignmentOperator()),
hasName("main"), hasName("swap"),
- isEnabled(FunctionsThatShouldNotThrow))))
+ isEnabled(FunctionsThatShouldNotThrow)),
+ throws(unless(isIgnored(IgnoredExceptions)))))
.bind("thrower"),
this);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D53187.169552.patch
Type: text/x-patch
Size: 2648 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181013/a16ca2b5/attachment.bin>
More information about the cfe-commits
mailing list