diff --git a/clang-tools-extra/test/clang-tidy/modernize-make-unique-cxx14.cpp b/clang-tools-extra/test/clang-tidy/modernize-make-unique-cxx14.cpp --- a/clang-tools-extra/test/clang-tidy/modernize-make-unique-cxx14.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-make-unique-cxx14.cpp @@ -1,10 +1,67 @@ -// RUN: %check_clang_tidy -std=c++14-or-later %s modernize-make-unique %t -- -- -I %S/Inputs/modernize-smart-ptr +// RUN: %check_clang_tidy -std=c++14 %s modernize-make-unique %t -- -- -I %S/Inputs/modernize-smart-ptr #include "unique_ptr.h" // CHECK-FIXES: #include +struct NoCopyMoveCtor { + NoCopyMoveCtor(const NoCopyMoveCtor &) = delete; // implies move ctor is deleted +}; + +struct NoCopyMoveCtorVisible { +private: + NoCopyMoveCtorVisible(const NoCopyMoveCtorVisible&) = default; + NoCopyMoveCtorVisible(NoCopyMoveCtorVisible&&) = default; +}; + +struct OnlyMoveCtor { + OnlyMoveCtor() = default; + OnlyMoveCtor(OnlyMoveCtor&&) = default; + OnlyMoveCtor(const OnlyMoveCtor &) = delete; +}; + +struct OnlyCopyCtor { + OnlyCopyCtor(const OnlyCopyCtor&) = default; + OnlyCopyCtor(OnlyCopyCtor&&) = delete; +}; + +struct OnlyCopyCtorVisible { + OnlyCopyCtorVisible(const OnlyCopyCtorVisible &) = default; + +private: + OnlyCopyCtorVisible(OnlyCopyCtorVisible &&) = default; +}; + +struct ImplicitDeletedCopyCtor { + const OnlyMoveCtor ctor; +}; + void f() { auto my_ptr = std::unique_ptr(new int(1)); // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: use std::make_unique instead // CHECK-FIXES: auto my_ptr = std::make_unique(1); + + // No fixes for classes with deleted copy&move constructors. + auto PNoCopyMoveCtor = std::unique_ptr(new NoCopyMoveCtor{}); + // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: use std::make_unique instead + // CHECK-FIXES: auto PNoCopyMoveCtor = std::unique_ptr(new NoCopyMoveCtor{}); + + auto PNoCopyMoveCtorVisible = std::unique_ptr(new NoCopyMoveCtorVisible{}); + // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: use std::make_unique instead + // CHECK-FIXES: auto PNoCopyMoveCtorVisible = std::unique_ptr(new NoCopyMoveCtorVisible{}); + + auto POnlyMoveCtor = std::unique_ptr(new OnlyMoveCtor{}); + // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: use std::make_unique instead + // CHECK-FIXES: auto POnlyMoveCtor = std::unique_ptr(new OnlyMoveCtor{}); + + auto POnlyCopyCtor = std::unique_ptr(new OnlyCopyCtor{}); + // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: use std::make_unique instead + // CHECK-FIXES: auto POnlyCopyCtor = std::unique_ptr(new OnlyCopyCtor{}); + + auto POnlyCopyCtorVisible = std::unique_ptr(new OnlyCopyCtorVisible{}); + // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: use std::make_unique instead + // CHECK-FIXES: auto POnlyCopyCtorVisible = std::unique_ptr(new OnlyCopyCtorVisible{}); + + auto PImplicitDeletedCopyCtor = std::unique_ptr(new ImplicitDeletedCopyCtor{}); + // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: use std::make_unique instead + // CHECK-FIXES: auto PImplicitDeletedCopyCtor = std::unique_ptr(new ImplicitDeletedCopyCtor{}); } diff --git a/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp b/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp --- a/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-make-unique.cpp @@ -1,5 +1,4 @@ -// RUN: %check_clang_tidy -std=c++14,c++17 %s modernize-make-unique %t -- -- -I %S/Inputs/modernize-smart-ptr -// FIXME: Fix the test code in C++2a mode. +// RUN: %check_clang_tidy -std=c++14-or-later %s modernize-make-unique %t -- -- -I %S/Inputs/modernize-smart-ptr #include "unique_ptr.h" #include "initializer_list.h" @@ -32,37 +31,6 @@ struct Empty {}; -struct NoCopyMoveCtor { - NoCopyMoveCtor(const NoCopyMoveCtor &) = delete; // implies move ctor is deleted -}; - -struct NoCopyMoveCtorVisible { -private: - NoCopyMoveCtorVisible(const NoCopyMoveCtorVisible&) = default; - NoCopyMoveCtorVisible(NoCopyMoveCtorVisible&&) = default; -}; - -struct OnlyMoveCtor { - OnlyMoveCtor() = default; - OnlyMoveCtor(OnlyMoveCtor&&) = default; - OnlyMoveCtor(const OnlyMoveCtor &) = delete; -}; - -struct OnlyCopyCtor { - OnlyCopyCtor(const OnlyCopyCtor&) = default; - OnlyCopyCtor(OnlyCopyCtor&&) = delete; -}; - -struct OnlyCopyCtorVisible { - OnlyCopyCtorVisible(const OnlyCopyCtorVisible &) = default; - -private: - OnlyCopyCtorVisible(OnlyCopyCtorVisible &&) = default; -}; - -struct ImplicitDeletedCopyCtor { - const OnlyMoveCtor ctor; -}; struct E { E(std::initializer_list); @@ -314,33 +282,6 @@ // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: use std::make_unique instead // CHECK-FIXES: std::unique_ptr PEmpty = std::make_unique(Empty{}); - // No fixes for classes with deleted copy&move constructors. - auto PNoCopyMoveCtor = std::unique_ptr(new NoCopyMoveCtor{}); - // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: use std::make_unique instead - // CHECK-FIXES: auto PNoCopyMoveCtor = std::unique_ptr(new NoCopyMoveCtor{}); - - auto PNoCopyMoveCtorVisible = std::unique_ptr(new NoCopyMoveCtorVisible{}); - // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: use std::make_unique instead - // CHECK-FIXES: auto PNoCopyMoveCtorVisible = std::unique_ptr(new NoCopyMoveCtorVisible{}); - - auto POnlyMoveCtor = std::unique_ptr(new OnlyMoveCtor{}); - // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: use std::make_unique instead - // CHECK-FIXES: auto POnlyMoveCtor = std::unique_ptr(new OnlyMoveCtor{}); - - // Fix for classes with classes with move constructor. - auto POnlyCopyCtor = std::unique_ptr(new OnlyCopyCtor{}); - // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: use std::make_unique instead - // CHECK-FIXES: auto POnlyCopyCtor = std::unique_ptr(new OnlyCopyCtor{}); - - // Fix for classes with classes with move constructor. - auto POnlyCopyCtorVisible = std::unique_ptr(new OnlyCopyCtorVisible{}); - // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: use std::make_unique instead - // CHECK-FIXES: auto POnlyCopyCtorVisible = std::unique_ptr(new OnlyCopyCtorVisible{}); - - auto PImplicitDeletedCopyCtor = std::unique_ptr(new ImplicitDeletedCopyCtor{}); - // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: use std::make_unique instead - // CHECK-FIXES: auto PImplicitDeletedCopyCtor = std::unique_ptr(new ImplicitDeletedCopyCtor{}); - // Initialization with default constructor. std::unique_ptr PE1 = std::unique_ptr(new E{}); // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use std::make_unique instead