Author: alexfh Date: Wed Mar 21 07:39:24 2018 New Revision: 328101 URL: http://llvm.org/viewvc/llvm-project?rev=328101&view=rev Log: [clang-tidy][modernize-make-unique] Checks c++14 flag before using std::make_unique
Summary: For a c++11 code, the clang-tidy rule "modernize-make-unique" should return immediately, as std::make_unique is not supported. Reviewers: hokein, aaron.ballman, ilya-biryukov, alexfh Reviewed By: hokein, aaron.ballman, alexfh Subscribers: Quuxplusone, xazax.hun, cfe-commits Tags: #clang-tools-extra Patch by Frederic Tingaud! Differential Revision: https://reviews.llvm.org/D43766 Added: clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx11.cpp clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx14.cpp Modified: clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.cpp clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.h clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.cpp clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.h clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-macros.cpp clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique.cpp Modified: clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.cpp?rev=328101&r1=328100&r2=328101&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.cpp Wed Mar 21 07:39:24 2018 @@ -61,8 +61,13 @@ void MakeSmartPtrCheck::storeOptions(Cla Options.store(Opts, "IgnoreMacros", IgnoreMacros); } +bool MakeSmartPtrCheck::isLanguageVersionSupported( + const LangOptions &LangOpts) const { + return LangOpts.CPlusPlus11; +} + void MakeSmartPtrCheck::registerPPCallbacks(CompilerInstance &Compiler) { - if (getLangOpts().CPlusPlus11) { + if (isLanguageVersionSupported(getLangOpts())) { Inserter.reset(new utils::IncludeInserter( Compiler.getSourceManager(), Compiler.getLangOpts(), IncludeStyle)); Compiler.getPreprocessor().addPPCallbacks(Inserter->CreatePPCallbacks()); @@ -70,7 +75,7 @@ void MakeSmartPtrCheck::registerPPCallba } void MakeSmartPtrCheck::registerMatchers(ast_matchers::MatchFinder *Finder) { - if (!getLangOpts().CPlusPlus11) + if (!isLanguageVersionSupported(getLangOpts())) return; // Calling make_smart_ptr from within a member function of a type with a Modified: clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.h?rev=328101&r1=328100&r2=328101&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.h (original) +++ clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.h Wed Mar 21 07:39:24 2018 @@ -40,6 +40,9 @@ protected: /// in this class. virtual SmartPtrTypeMatcher getSmartPointerTypeMatcher() const = 0; + /// Returns whether the C++ version is compatible with current check. + virtual bool isLanguageVersionSupported(const LangOptions &LangOpts) const; + static const char PointerType[]; static const char ConstructorCall[]; static const char ResetCall[]; Modified: clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.cpp?rev=328101&r1=328100&r2=328101&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.cpp Wed Mar 21 07:39:24 2018 @@ -17,7 +17,8 @@ namespace modernize { MakeUniqueCheck::MakeUniqueCheck(StringRef Name, clang::tidy::ClangTidyContext *Context) - : MakeSmartPtrCheck(Name, Context, "std::make_unique") {} + : MakeSmartPtrCheck(Name, Context, "std::make_unique"), + RequireCPlusPlus14(Options.get("MakeSmartPtrFunction", "").empty()) {} MakeUniqueCheck::SmartPtrTypeMatcher MakeUniqueCheck::getSmartPointerTypeMatcher() const { @@ -36,6 +37,11 @@ MakeUniqueCheck::getSmartPointerTypeMatc equalsBoundNode(PointerType)))))))))))))))); } +bool MakeUniqueCheck::isLanguageVersionSupported( + const LangOptions &LangOpts) const { + return RequireCPlusPlus14 ? LangOpts.CPlusPlus14 : LangOpts.CPlusPlus11; +} + } // namespace modernize } // namespace tidy } // namespace clang Modified: clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.h?rev=328101&r1=328100&r2=328101&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.h (original) +++ clang-tools-extra/trunk/clang-tidy/modernize/MakeUniqueCheck.h Wed Mar 21 07:39:24 2018 @@ -31,6 +31,11 @@ public: protected: SmartPtrTypeMatcher getSmartPointerTypeMatcher() const override; + + bool isLanguageVersionSupported(const LangOptions &LangOpts) const override; + +private: + const bool RequireCPlusPlus14; }; } // namespace modernize Added: clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx11.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx11.cpp?rev=328101&view=auto ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx11.cpp (added) +++ clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx11.cpp Wed Mar 21 07:39:24 2018 @@ -0,0 +1,10 @@ +// RUN: %check_clang_tidy %s modernize-make-unique %t -- -- -std=c++11 \ +// RUN: -I%S/Inputs/modernize-smart-ptr + +#include "unique_ptr.h" +// CHECK-FIXES: #include "unique_ptr.h" + +void f() { + auto my_ptr = std::unique_ptr<int>(new int(1)); + // CHECK-FIXES: auto my_ptr = std::unique_ptr<int>(new int(1)); +} Added: clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx14.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx14.cpp?rev=328101&view=auto ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx14.cpp (added) +++ clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-cxx14.cpp Wed Mar 21 07:39:24 2018 @@ -0,0 +1,11 @@ +// RUN: %check_clang_tidy %s modernize-make-unique %t -- -- -std=c++14 \ +// RUN: -I%S/Inputs/modernize-smart-ptr + +#include "unique_ptr.h" +// CHECK-FIXES: #include <memory> + +void f() { + auto my_ptr = std::unique_ptr<int>(new int(1)); + // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: use std::make_unique instead + // CHECK-FIXES: auto my_ptr = std::make_unique<int>(1); +} Modified: clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-macros.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-macros.cpp?rev=328101&r1=328100&r2=328101&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-macros.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique-macros.cpp Wed Mar 21 07:39:24 2018 @@ -1,6 +1,6 @@ // RUN: %check_clang_tidy %s modernize-make-unique %t -- \ // RUN: -config="{CheckOptions: [{key: modernize-make-unique.IgnoreMacros, value: 0}]}" \ -// RUN: -- -std=c++11 -I%S/Inputs/modernize-smart-ptr +// RUN: -- -std=c++14 -I%S/Inputs/modernize-smart-ptr #include "unique_ptr.h" Modified: clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique.cpp?rev=328101&r1=328100&r2=328101&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique.cpp Wed Mar 21 07:39:24 2018 @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s modernize-make-unique %t -- -- -std=c++11 \ +// RUN: %check_clang_tidy %s modernize-make-unique %t -- -- -std=c++14 \ // RUN: -I%S/Inputs/modernize-smart-ptr #include "unique_ptr.h" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits