From b9f3059509c32f31d03b016b550ed0421aa4dbb7 Mon Sep 17 00:00:00 2001 From: Angel Garcia Gomez Date: Mon, 5 Oct 2015 12:20:17 +0000 Subject: [PATCH] Use better mocks in modernize-make-unique, and fix matcher. Summary: Add the second template argument to the unique_ptr mock, and update the matcher so that it only matches against cases where the second argument is the default. Reviewers: klimek Subscribers: alexfh, cfe-commits Differential Revision: http://reviews.llvm.org/D13433 llvm-svn: 249305 --- .../clang-tidy/modernize/MakeUniqueCheck.cpp | 14 +++++++++++--- .../test/clang-tidy/modernize-make-unique.cpp | 5 ++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/clang-tidy/modernize/MakeUniqueCheck.cpp b/clang-tools-extra/clang-tidy/modernize/MakeUniqueCheck.cpp index 77c684984de8..bdf5538a59c3 100644 --- a/clang-tools-extra/clang-tidy/modernize/MakeUniqueCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/MakeUniqueCheck.cpp @@ -29,10 +29,18 @@ void MakeUniqueCheck::registerMatchers(MatchFinder *Finder) { cxxConstructExpr( hasType(qualType(hasDeclaration(classTemplateSpecializationDecl( matchesName("::std::unique_ptr"), - templateArgumentCountIs(1), + templateArgumentCountIs(2), + hasTemplateArgument(0, templateArgument(refersToType( + qualType().bind(PointerType)))), hasTemplateArgument( - 0, templateArgument( - refersToType(qualType().bind(PointerType)))))))), + 1, templateArgument(refersToType(qualType( + hasDeclaration(classTemplateSpecializationDecl( + matchesName("::std::default_delete"), + templateArgumentCountIs(1), + hasTemplateArgument( + 0, templateArgument(refersToType( + qualType(equalsBoundNode( + PointerType))))))))))))))), argumentCountIs(1), hasArgument(0, cxxNewExpr(hasType(pointsTo(qualType( equalsBoundNode(PointerType))))) diff --git a/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp b/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp index e285be5d09ed..f8851b51077a 100644 --- a/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp @@ -2,7 +2,10 @@ namespace std { -template +template +class default_delete {}; + +template > class unique_ptr { public: unique_ptr(type *ptr);