diff options
-rw-r--r-- | clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp | 8 | ||||
-rw-r--r-- | clang-tools-extra/test/clang-tidy/bugprone-dangling-handle.cpp | 6 |
2 files changed, 11 insertions, 3 deletions
diff --git a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp index 5388684ad36..a22dcad6581 100644 --- a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp @@ -25,8 +25,12 @@ namespace { ast_matchers::internal::BindableMatcher<Stmt> handleFrom(const ast_matchers::internal::Matcher<RecordDecl> &IsAHandle, const ast_matchers::internal::Matcher<Expr> &Arg) { - return cxxConstructExpr(hasDeclaration(cxxMethodDecl(ofClass(IsAHandle))), - hasArgument(0, Arg)); + return expr( + anyOf(cxxConstructExpr(hasDeclaration(cxxMethodDecl(ofClass(IsAHandle))), + hasArgument(0, Arg)), + cxxMemberCallExpr(hasType(cxxRecordDecl(IsAHandle)), + callee(memberExpr(member(cxxConversionDecl()))), + on(Arg)))); } ast_matchers::internal::Matcher<Stmt> handleFromTemporaryValue( diff --git a/clang-tools-extra/test/clang-tidy/bugprone-dangling-handle.cpp b/clang-tools-extra/test/clang-tidy/bugprone-dangling-handle.cpp index 80c84103126..d11a2f2d650 100644 --- a/clang-tools-extra/test/clang-tidy/bugprone-dangling-handle.cpp +++ b/clang-tools-extra/test/clang-tidy/bugprone-dangling-handle.cpp @@ -45,10 +45,15 @@ class map { value_type& operator[](Key&& key); }; +class basic_string_view; + class basic_string { public: basic_string(); basic_string(const char*); + + operator basic_string_view() const noexcept; + ~basic_string(); }; @@ -57,7 +62,6 @@ typedef basic_string string; class basic_string_view { public: basic_string_view(const char*); - basic_string_view(const basic_string&); }; typedef basic_string_view string_view; |