Index: clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/modernize/MakeSmartPtrCheck.cpp @@ -121,6 +121,15 @@ if (New->getNumPlacementArgs() != 0) return; + // Be conservative for cases where we construct an array without any + // initalization. + // For example, + // P.reset(new int[5]) // check fix: P = make_unique(5) + // + // The fix of the check has side effect, it introduces default initialization + // which maybe unexpected and cause performance regression. + if (New->isArray() && !New->hasInitializer()) + return; if (Construct) checkConstruct(SM, Result.Context, Construct, Type, New); else if (Reset) Index: clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique.cpp +++ clang-tools-extra/trunk/test/clang-tidy/modernize-make-unique.cpp @@ -403,18 +403,15 @@ // CHECK-FIXES: FFs = std::make_unique(Num2); std::unique_ptr FI; - FI.reset(new int[5]); - // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: - // CHECK-FIXES: FI = std::make_unique(5); - FI.reset(new int[5]()); + FI.reset(new int[5]()); // default initialization. // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: // CHECK-FIXES: FI = std::make_unique(5); + + // The check doesn't give warnings and fixes for cases where the original new + // expresion doesn't do any initialization. + FI.reset(new int[5]); FI.reset(new int[Num]); - // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: - // CHECK-FIXES: FI = std::make_unique(Num); FI.reset(new int[Num2]); - // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: - // CHECK-FIXES: FI = std::make_unique(Num2); } void aliases() {