This revision was automatically updated to reflect the committed changes.
Closed by commit rG6c07bda7a75c: [clang-tidy] Avoid adding unnecessary
semicolon in modernize-use-equals-default (authored by alexander-shaposhnikov).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136399/new/
https://reviews.llvm.org/D136399
Files:
clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp
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
@@ -91,7 +91,7 @@
// Private constructor/destructor.
class Priv {
Priv();
- ~Priv() {};
+ ~Priv() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
// CHECK-FIXES: ~Priv() = default;
};
@@ -100,14 +100,28 @@
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use '= default'
// CHECK-FIXES: Priv::Priv() = default;
+struct SemiColon {
+ SemiColon() {};
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
+ // CHECK-FIXES: SemiColon() = default;{{$}}
+};
+
+struct SemiColonOutOfLine {
+ SemiColonOutOfLine();
+};
+
+SemiColonOutOfLine::SemiColonOutOfLine() {};
+// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: use '= default'
+// CHECK-FIXES: SemiColonOutOfLine::SemiColonOutOfLine() = default;{{$}}
+
// struct.
struct ST {
ST() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ST() = default;
+ // CHECK-FIXES: ST() = default;{{$}}
~ST() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ST() = default;
+ // CHECK-FIXES: ST() = default;{{$}}
};
// Deleted constructor/destructor.
@@ -200,7 +214,13 @@
DC() : KW() {}
~DC() override {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ~DC() override = default;
+ // CHECK-FIXES: ~DC() override = default;{{$}}
+};
+
+struct OverrideWithSemiColon : KW {
+ ~OverrideWithSemiColon() override {};
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
+ // CHECK-FIXES: ~OverrideWithSemiColon() override = default;{{$}}
};
struct Comments {
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -159,6 +159,7 @@
with empty body is not equivalent to the explicitly defaulted one, variadic
constructors
since they cannot be explicitly defaulted. The check also skips copy
assignment operators
with nonstandard return types, private/protected default constructors for
C++17 or earlier.
+ The automatic fixit has been adjusted to avoid adding superfluous semicolon.
The check is restricted to C++11 or later.
- Change the default behavior of :doc:`readability-avoid-const-params-in-decls
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
@@ -337,10 +337,13 @@
Diag << MemberType;
if (ApplyFix) {
+ SourceLocation UnifiedEnd = utils::lexer::getUnifiedEndLoc(
+ *Body, Result.Context->getSourceManager(),
+ Result.Context->getLangOpts());
// Skipping comments, check for a semicolon after Body->getSourceRange()
Optional<Token> Token = utils::lexer::findNextTokenSkippingComments(
- Body->getSourceRange().getEnd().getLocWithOffset(1),
- Result.Context->getSourceManager(), Result.Context->getLangOpts());
+ UnifiedEnd, Result.Context->getSourceManager(),
+ Result.Context->getLangOpts());
StringRef Replacement =
Token && Token->is(tok::semi) ? "= default" : "= default;";
Diag << FixItHint::CreateReplacement(Body->getSourceRange(), Replacement)
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
@@ -91,7 +91,7 @@
// Private constructor/destructor.
class Priv {
Priv();
- ~Priv() {};
+ ~Priv() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
// CHECK-FIXES: ~Priv() = default;
};
@@ -100,14 +100,28 @@
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use '= default'
// CHECK-FIXES: Priv::Priv() = default;
+struct SemiColon {
+ SemiColon() {};
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
+ // CHECK-FIXES: SemiColon() = default;{{$}}
+};
+
+struct SemiColonOutOfLine {
+ SemiColonOutOfLine();
+};
+
+SemiColonOutOfLine::SemiColonOutOfLine() {};
+// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: use '= default'
+// CHECK-FIXES: SemiColonOutOfLine::SemiColonOutOfLine() = default;{{$}}
+
// struct.
struct ST {
ST() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ST() = default;
+ // CHECK-FIXES: ST() = default;{{$}}
~ST() {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ST() = default;
+ // CHECK-FIXES: ST() = default;{{$}}
};
// Deleted constructor/destructor.
@@ -200,7 +214,13 @@
DC() : KW() {}
~DC() override {}
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
- // CHECK-FIXES: ~DC() override = default;
+ // CHECK-FIXES: ~DC() override = default;{{$}}
+};
+
+struct OverrideWithSemiColon : KW {
+ ~OverrideWithSemiColon() override {};
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= default'
+ // CHECK-FIXES: ~OverrideWithSemiColon() override = default;{{$}}
};
struct Comments {
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -159,6 +159,7 @@
with empty body is not equivalent to the explicitly defaulted one, variadic constructors
since they cannot be explicitly defaulted. The check also skips copy assignment operators
with nonstandard return types, private/protected default constructors for C++17 or earlier.
+ The automatic fixit has been adjusted to avoid adding superfluous semicolon.
The check is restricted to C++11 or later.
- Change the default behavior of :doc:`readability-avoid-const-params-in-decls
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
@@ -337,10 +337,13 @@
Diag << MemberType;
if (ApplyFix) {
+ SourceLocation UnifiedEnd = utils::lexer::getUnifiedEndLoc(
+ *Body, Result.Context->getSourceManager(),
+ Result.Context->getLangOpts());
// Skipping comments, check for a semicolon after Body->getSourceRange()
Optional<Token> Token = utils::lexer::findNextTokenSkippingComments(
- Body->getSourceRange().getEnd().getLocWithOffset(1),
- Result.Context->getSourceManager(), Result.Context->getLangOpts());
+ UnifiedEnd, Result.Context->getSourceManager(),
+ Result.Context->getLangOpts());
StringRef Replacement =
Token && Token->is(tok::semi) ? "= default" : "= default;";
Diag << FixItHint::CreateReplacement(Body->getSourceRange(), Replacement)
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits