From 7a325537fb199c674cb7034d12baee5f6f1e2937 Mon Sep 17 00:00:00 2001 From: Malcolm Parsons Date: Tue, 11 Oct 2016 10:47:06 +0000 Subject: [PATCH] [clang-tidy] modernize-use-default default constructor bugfix Summary: Only member initializers that are written should prevent using '= default' on a default constructor. Reviewers: klimek, sbenza, aaron.ballman, alexfh Subscribers: Eugene.Zelenko, alexfh, klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D24444 llvm-svn: 283869 --- .../clang-tidy/modernize/UseDefaultCheck.cpp | 14 +++++++------- .../test/clang-tidy/modernize-use-default.cpp | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp index c4e0498..38fb5f6 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp @@ -238,7 +238,7 @@ void UseDefaultCheck::registerMatchers(MatchFinder *Finder) { isDefinition(), anyOf( // Default constructor. - allOf(unless(hasAnyConstructorInitializer(anything())), + allOf(unless(hasAnyConstructorInitializer(isWritten())), parameterCountIs(0)), // Copy constructor. allOf(isCopyConstructor(), @@ -296,12 +296,12 @@ void UseDefaultCheck::check(const MatchFinder::MatchResult &Result) { if (!isCopyConstructorAndCanBeDefaulted(Result.Context, Ctor)) return; SpecialFunctionName = "copy constructor"; - } - // If there are constructor initializers, they must be removed. - if (Ctor->getNumCtorInitializers() != 0) { - StartLoc = getColonLoc(Result.Context, Ctor); - if (!StartLoc.isValid()) - return; + // If there are constructor initializers, they must be removed. + if (Ctor->getNumCtorInitializers() != 0) { + StartLoc = getColonLoc(Result.Context, Ctor); + if (!StartLoc.isValid()) + return; + } } } else if (isa(SpecialFunctionDecl)) { SpecialFunctionName = "destructor"; diff --git a/clang-tools-extra/test/clang-tidy/modernize-use-default.cpp b/clang-tools-extra/test/clang-tidy/modernize-use-default.cpp index 79dc862..4119a70 100644 --- a/clang-tools-extra/test/clang-tidy/modernize-use-default.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-use-default.cpp @@ -43,6 +43,24 @@ public: int Field; }; +// Default member initializer +class DMI { +public: + DMI() {} + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default' + // CHECK-FIXES: DMI() = default; + int Field = 5; +}; + +// Class member +class CM { +public: + CM() {} + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default' + // CHECK-FIXES: CM() = default; + OL o; +}; + // Private constructor/destructor. class Priv { Priv() {} -- 2.7.4