Index: clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp @@ -302,9 +302,19 @@ auto Diag = diag(Location, "use '= default' to define a trivial " + SpecialFunctionName); - if (ApplyFix) - Diag << FixItHint::CreateReplacement(Body->getSourceRange(), "= default;") + if (ApplyFix) { + // Peek ahead to see if there's a semicolon after Body->getSourceRange() + Optional Token; + do { + Token = Lexer::findNextToken( + Body->getSourceRange().getEnd().getLocWithOffset(1), + Result.Context->getSourceManager(), Result.Context->getLangOpts()); + } while (Token && Token->is(tok::comment)); + StringRef Replacement = + Token && Token->is(tok::semi) ? "= default" : "= default;"; + Diag << FixItHint::CreateReplacement(Body->getSourceRange(), Replacement) << RemoveInitializers; + } } } // namespace modernize Index: clang-tools-extra/test/clang-tidy/checkers/modernize-use-equals-default-copy.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/modernize-use-equals-default-copy.cpp +++ clang-tools-extra/test/clang-tidy/checkers/modernize-use-equals-default-copy.cpp @@ -119,7 +119,7 @@ struct BF { BF() = default; BF(const BF &Other) : Field1(Other.Field1), Field2(Other.Field2), Field3(Other.Field3), - Field4(Other.Field4) {} + Field4(Other.Field4) {}; // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: use '= default' // CHECK-FIXES: BF(const BF &Other) {{$}} // CHECK-FIXES: = default; Index: clang-tools-extra/test/clang-tidy/checkers/modernize-use-equals-default.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/modernize-use-equals-default.cpp +++ clang-tools-extra/test/clang-tidy/checkers/modernize-use-equals-default.cpp @@ -7,7 +7,7 @@ ~OL(); }; -OL::OL() {} +OL::OL() {}; // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use '= default' to define a trivial default constructor [modernize-use-equals-default] // CHECK-FIXES: OL::OL() = default; OL::~OL() {} @@ -17,9 +17,9 @@ // Inline definitions. class IL { public: - IL() {} + IL() {} ; // Note embedded tab on this line // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default' - // CHECK-FIXES: IL() = default; + // CHECK-FIXES: IL() = default ; // Note embedded tab on this line ~IL() {} // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default' // CHECK-FIXES: ~IL() = default; @@ -46,18 +46,20 @@ // Default member initializer class DMI { public: - DMI() {} - // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default' - // CHECK-FIXES: DMI() = default; + DMI() {} // Comment before semi-colon on next line + ; + // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: use '= default' + // CHECK-FIXES: DMI() = default // Comment before semi-colon on next line + // CHECK-FIXES-NEXT: ; int Field = 5; }; // Class member class CM { public: - CM() {} + CM() {} /* Comments */ /* before */ /* semicolon */; // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default' - // CHECK-FIXES: CM() = default; + // CHECK-FIXES: CM() = default /* Comments */ /* before */ /* semicolon */; OL o; }; @@ -66,7 +68,7 @@ Priv() {} // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default' // CHECK-FIXES: Priv() = default; - ~Priv() {} + ~Priv() {}; // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default' // CHECK-FIXES: ~Priv() = default; };