[PATCH] D76029: Summary: Fix DanglingHandleCheck to match conversion operator whose return type is a type alias, e.g. `std::string`'s conversion operator to `std::string_view`.

Xiaoyi Zhang via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 11 15:20:05 PDT 2020


zhangxy988 created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
zhangxy988 added a reviewer: alexfh.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D76029

Files:
  clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
  clang-tools-extra/test/clang-tidy/checkers/bugprone-dangling-handle.cpp


Index: clang-tools-extra/test/clang-tidy/checkers/bugprone-dangling-handle.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/bugprone-dangling-handle.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/bugprone-dangling-handle.cpp
@@ -45,26 +45,30 @@
   value_type& operator[](Key&& key);
 };
 
+template <typename _CharT>
 class basic_string_view;
 
+template <typename _CharT>
 class basic_string {
- public:
+public:
+  typedef basic_string_view<_CharT> __self_view;
   basic_string();
   basic_string(const char*);
 
-  operator basic_string_view() const noexcept;
+  operator __self_view() const noexcept;
 
   ~basic_string();
 };
 
-typedef basic_string string;
+typedef basic_string<char> string;
 
+template <typename _CharT>
 class basic_string_view {
- public:
+public:
   basic_string_view(const char*);
 };
 
-typedef basic_string_view string_view;
+typedef basic_string_view<char> string_view;
 
 }  // namespace std
 
Index: clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
+++ clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
@@ -27,7 +27,8 @@
   return expr(
       anyOf(cxxConstructExpr(hasDeclaration(cxxMethodDecl(ofClass(IsAHandle))),
                              hasArgument(0, Arg)),
-            cxxMemberCallExpr(hasType(cxxRecordDecl(IsAHandle)),
+            cxxMemberCallExpr(hasType(hasUnqualifiedDesugaredType(recordType(
+                                  hasDeclaration(cxxRecordDecl(IsAHandle))))),
                               callee(memberExpr(member(cxxConversionDecl()))),
                               on(Arg))));
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76029.249769.patch
Type: text/x-patch
Size: 1788 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200311/9d0ba34d/attachment-0001.bin>


More information about the cfe-commits mailing list