[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/vbvictor closed https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping :) Is there anything else I should add in here? https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 8c35d9c91ba59de8ba188774385741e5f893ad55 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 30 +--
clang-tools-extra/docs/ReleaseNotes.rst | 2 +-
.../modernize/use-default-member-init.cpp | 23 ++
3 files changed, 45 insertions(+), 10 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index bf99c738da1a3..9ad6dcefbc1bb 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -199,17 +206,22 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto ConstExpRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+
+ auto ConstExprRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto ImmutableRef =
+ declRefExpr(to(decl(anyOf(enumConstantDecl(), ConstExprRef;
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, ImmutableRef, binaryOperator()),
+ anyOf(NumericLiteral, ImmutableRef, binaryOperator(;
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), ImmutableRef, BinaryNumericExpr);
auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 579fca54924d5..731c9dfaf7c3e 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -190,7 +190,7 @@ Changes in existing checks
- Improved :doc:`modernize-use-default-member-init
` check by matching
- ``constexpr`` and ``static``` values on member initialization and by
detecting
+ arithmetic operations, ``constexpr`` and ``static`` values, and detecting
explicit casting of built-in types within member list initialization.
- Improved :doc:`modernize-use-designated-initializers
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index cac50be9e4368..015216c4a9d59 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -572,4 +572,27 @@ class FunctionalCastInit {
// CHECK-FIXES: double c{double('C')};
};
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LIN
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping @5chmidti @PiotrZSL @carlosgalvezp https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 29fab49d83f244c95d76bf04ba38dcf394ad41cb Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 30 +--
clang-tools-extra/docs/ReleaseNotes.rst | 2 +-
.../modernize/use-default-member-init.cpp | 23 ++
3 files changed, 45 insertions(+), 10 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index bf99c738da1a3..9ad6dcefbc1bb 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -199,17 +206,22 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto ConstExpRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+
+ auto ConstExprRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto ImmutableRef =
+ declRefExpr(to(decl(anyOf(enumConstantDecl(), ConstExprRef;
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, ImmutableRef, binaryOperator()),
+ anyOf(NumericLiteral, ImmutableRef, binaryOperator(;
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), ImmutableRef, BinaryNumericExpr);
auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 761c1d3a80359..fc40d525d7bb8 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -179,7 +179,7 @@ Changes in existing checks
- Improved :doc:`modernize-use-default-member-init
` check by matching
- ``constexpr`` and ``static``` values on member initialization and by
detecting
+ arithmetic operations, ``constexpr`` and ``static`` values, and detecting
explicit casting of built-in types within member list initialization.
- Improved :doc:`modernize-use-ranges
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index cac50be9e4368..015216c4a9d59 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -572,4 +572,27 @@ class FunctionalCastInit {
// CHECK-FIXES: double c{double('C')};
};
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning:
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From cae6e099a40086bba0790783f4088058f5aead20 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 30 +--
clang-tools-extra/docs/ReleaseNotes.rst | 2 +-
.../modernize/use-default-member-init.cpp | 23 ++
3 files changed, 45 insertions(+), 10 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index bf99c738da1a3..9ad6dcefbc1bb 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -199,17 +206,22 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto ConstExpRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+
+ auto ConstExprRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto ImmutableRef =
+ declRefExpr(to(decl(anyOf(enumConstantDecl(), ConstExprRef;
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, ImmutableRef, binaryOperator()),
+ anyOf(NumericLiteral, ImmutableRef, binaryOperator(;
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), ImmutableRef, BinaryNumericExpr);
auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 761c1d3a80359..fc40d525d7bb8 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -179,7 +179,7 @@ Changes in existing checks
- Improved :doc:`modernize-use-default-member-init
` check by matching
- ``constexpr`` and ``static``` values on member initialization and by
detecting
+ arithmetic operations, ``constexpr`` and ``static`` values, and detecting
explicit casting of built-in types within member list initialization.
- Improved :doc:`modernize-use-ranges
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index cac50be9e4368..bb2a7388e75f1 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -572,4 +572,27 @@ class FunctionalCastInit {
// CHECK-FIXES: double c{double('C')};
};
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning:
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping @5chmidti @PiotrZSL @carlosgalvezp https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping @5chmidti @PiotrZSL @carlosgalvezp https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping @HerrCai0907 https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 82951dab6d1b834a5b296faddcf23603f3f05e84 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 30 +--
clang-tools-extra/docs/ReleaseNotes.rst | 2 +-
.../modernize/use-default-member-init.cpp | 23 ++
3 files changed, 45 insertions(+), 10 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index bf99c738da1a3..9ad6dcefbc1bb 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -199,17 +206,22 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto ConstExpRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+
+ auto ConstExprRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto ImmutableRef =
+ declRefExpr(to(decl(anyOf(enumConstantDecl(), ConstExprRef;
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, ImmutableRef, binaryOperator()),
+ anyOf(NumericLiteral, ImmutableRef, binaryOperator(;
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), ImmutableRef, BinaryNumericExpr);
auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 6cb8d572d3a78..f0021696f799c 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -165,7 +165,7 @@ Changes in existing checks
- Improved :doc:`modernize-use-default-member-init
` check by matching
- ``constexpr`` and ``static``` values on member initialization and by
detecting
+ arithmetic operations, ``constexpr`` and ``static`` values, and detecting
explicit casting of built-in types within member list initialization.
- Improved :doc:`modernize-use-ranges
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index cac50be9e4368..bb2a7388e75f1 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -572,4 +572,27 @@ class FunctionalCastInit {
// CHECK-FIXES: double c{double('C')};
};
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning:
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: @HerrCai0907 could we merge this? https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -159,8 +159,8 @@ Changes in existing checks - Improved :doc:`modernize-use-default-member-init ` check by matching - ``constexpr`` and ``static``` values on member initialization and by detecting - explicit casting of built-in types within member list initialization. + arithmetic operations, constexpr and static values, and detecting explicit RiverDave wrote: Thx, should be done now. https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 4e5e44c721e1867b9263d0a0ea4669d0bd3bdd4a Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 30 +--
clang-tools-extra/docs/ReleaseNotes.rst | 2 +-
.../modernize/use-default-member-init.cpp | 23 ++
3 files changed, 45 insertions(+), 10 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index bf99c738da1a3..9ad6dcefbc1bb 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -199,17 +206,22 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto ConstExpRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+
+ auto ConstExprRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto ImmutableRef =
+ declRefExpr(to(decl(anyOf(enumConstantDecl(), ConstExprRef;
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, ImmutableRef, binaryOperator()),
+ anyOf(NumericLiteral, ImmutableRef, binaryOperator(;
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), ImmutableRef, BinaryNumericExpr);
auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index ed7da975f3de7..7d9a6039ea5cb 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -168,7 +168,7 @@ Changes in existing checks
- Improved :doc:`modernize-use-default-member-init
` check by matching
- ``constexpr`` and ``static``` values on member initialization and by
detecting
+ arithmetic operations, ``constexpr`` and ``static`` values, and detecting
explicit casting of built-in types within member list initialization.
- Improved :doc:`modernize-use-ranges
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index cac50be9e4368..bb2a7388e75f1 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -572,4 +572,27 @@ class FunctionalCastInit {
// CHECK-FIXES: double c{double('C')};
};
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning:
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From c81ff04def9d2198c84b96fb5cfa1de90ca57a11 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 30 +--
clang-tools-extra/docs/ReleaseNotes.rst | 4 +--
.../modernize/use-default-member-init.cpp | 23 ++
3 files changed, 46 insertions(+), 11 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index bf99c738da1a3..9ad6dcefbc1bb 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -199,17 +206,22 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto ConstExpRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+
+ auto ConstExprRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto ImmutableRef =
+ declRefExpr(to(decl(anyOf(enumConstantDecl(), ConstExprRef;
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, ImmutableRef, binaryOperator()),
+ anyOf(NumericLiteral, ImmutableRef, binaryOperator(;
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), ImmutableRef, BinaryNumericExpr);
auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index ed7da975f3de7..27748e52f1707 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -168,8 +168,8 @@ Changes in existing checks
- Improved :doc:`modernize-use-default-member-init
` check by matching
- ``constexpr`` and ``static``` values on member initialization and by
detecting
- explicit casting of built-in types within member list initialization.
+ arithmetic operations, ``constexpr`` and ``static`` values, and detecting
explicit
+ casting of built-in types within member list initialization.
- Improved :doc:`modernize-use-ranges
` check by updating suppress
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index cac50be9e4368..bb2a7388e75f1 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -572,4 +572,27 @@ class FunctionalCastInit {
// CHECK-FIXES: double c{double('C')};
};
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-in
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -159,8 +159,8 @@ Changes in existing checks - Improved :doc:`modernize-use-default-member-init ` check by matching - ``constexpr`` and ``static``` values on member initialization and by detecting - explicit casting of built-in types within member list initialization. + arithmetic operations, constexpr and static values, and detecting explicit vbvictor wrote: I'd also suggest rebasing on fresh main (in case there are changes to ReleaseNotes) and ask HerrCai0907 to merge PR. https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -159,8 +159,8 @@ Changes in existing checks - Improved :doc:`modernize-use-default-member-init ` check by matching - ``constexpr`` and ``static``` values on member initialization and by detecting - explicit casting of built-in types within member list initialization. + arithmetic operations, constexpr and static values, and detecting explicit vbvictor wrote: ```suggestion arithmetic operations, ``constexpr`` and ``static`` values, and detecting explicit ``` https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 85796af53e845110824b11b0f35c7ab24827c7d5 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 30 +--
clang-tools-extra/docs/ReleaseNotes.rst | 4 +--
.../modernize/use-default-member-init.cpp | 23 ++
3 files changed, 46 insertions(+), 11 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index bf99c738da1a3..9ad6dcefbc1bb 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -199,17 +206,22 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto ConstExpRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+
+ auto ConstExprRef = varDecl(anyOf(isConstexpr(), isStaticStorageClass()));
+ auto ImmutableRef =
+ declRefExpr(to(decl(anyOf(enumConstantDecl(), ConstExprRef;
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, ImmutableRef, binaryOperator()),
+ anyOf(NumericLiteral, ImmutableRef, binaryOperator(;
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), ImmutableRef, BinaryNumericExpr);
auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index eaf37e746050e..da2fe319b9b87 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -159,8 +159,8 @@ Changes in existing checks
- Improved :doc:`modernize-use-default-member-init
` check by matching
- ``constexpr`` and ``static``` values on member initialization and by
detecting
- explicit casting of built-in types within member list initialization.
+ arithmetic operations, constexpr and static values, and detecting explicit
+ casting of built-in types within member list initialization.
- Improved :doc:`modernize-use-ranges
` check by updating suppress
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index cac50be9e4368..bb2a7388e75f1 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -572,4 +572,27 @@ class FunctionalCastInit {
// CHECK-FIXES: double c{double('C')};
};
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ //
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: > LGTM, but please address a nit Should be done now, thanks! https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 08049760b837d026fe9a69b8b6019c6d2bed06b1 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 27 +--
clang-tools-extra/docs/ReleaseNotes.rst | 6 -
.../modernize/use-default-member-init.cpp | 26 ++
3 files changed, 50 insertions(+), 9 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..6ce6c6af3fbb2 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -194,15 +201,19 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+ auto EnumRef = declRefExpr(to(enumConstantDecl()));
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, EnumRef, binaryOperator()),
+ anyOf(NumericLiteral, EnumRef, binaryOperator(;
+
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), EnumRef, BinaryNumericExpr);
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 951b7f20af4c8..66d2d63eb079b 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -136,7 +136,11 @@ Changes in existing checks
` check by fix false positives
for function or variable in header file which contains macro expansion.
-- Improved :doc:`performance/unnecessary-value-param
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
+ arithmetic operations within member list initialization.
+
+- Improved :doc:`performance-unnecessary-value-param
` check performance by
tolerating fix-it breaking compilation when functions is used as pointers
to avoid matching usage of functions within the current compilation unit.
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'c' [modernize-us
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -132,11 +132,15 @@ Changes in existing checks ` check by providing additional examples and fixing some macro related false positives. +- Improved :doc:`modernize-use-default-member-init RiverDave wrote: Done https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/HerrCai0907 approved this pull request. LGTM https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/HerrCai0907 edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/vbvictor approved this pull request. LGTM, but please address a nit https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/vbvictor edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -132,11 +132,15 @@ Changes in existing checks ` check by providing additional examples and fixing some macro related false positives. +- Improved :doc:`modernize-use-default-member-init vbvictor wrote: Please place this below `misc-use-internal-linkage` to follow alphabetical order https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 236cd9f21bd71b118a79356eb859dda31031bf80 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 27 +--
clang-tools-extra/docs/ReleaseNotes.rst | 6 -
.../modernize/use-default-member-init.cpp | 26 ++
3 files changed, 50 insertions(+), 9 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..6ce6c6af3fbb2 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return BinOp1->getOpcode() == BinOp2->getOpcode() &&
+ sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -194,15 +201,19 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+ auto EnumRef = declRefExpr(to(enumConstantDecl()));
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, EnumRef, binaryOperator()),
+ anyOf(NumericLiteral, EnumRef, binaryOperator(;
+
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), EnumRef, BinaryNumericExpr);
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 951b7f20af4c8..dd46494687eff 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -132,11 +132,15 @@ Changes in existing checks
` check by providing additional
examples and fixing some macro related false positives.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
+ arithmetic operations within member list initialization.
+
- Improved :doc:`misc-use-internal-linkage
` check by fix false positives
for function or variable in header file which contains macro expansion.
-- Improved :doc:`performance/unnecessary-value-param
+- Improved :doc:`performance-unnecessary-value-param
` check performance by
tolerating fix-it breaking compilation when functions is used as pointers
to avoid matching usage of functions within the current compilation unit.
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
RiverDave wrote:
That's a good edge case I hadn't thought about. yeah we totally need to make
sure `BinaryOp` is the same to prevent cases where both expressions are
numerically identical with different operands. should be fixed now, let me know
if test cases are needed for that.
https://github.com/llvm/llvm-project/pull/129370
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From e3c5641ee3a398d8fe12c0dcd030ee84667cc86e Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 27 +--
clang-tools-extra/docs/ReleaseNotes.rst | 6 -
.../modernize/use-default-member-init.cpp | 26 ++
3 files changed, 50 insertions(+), 9 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..8b0d499a96811 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,13 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS()) &&
+ BinOp1->getOpcode() == BinOp2->getOpcode();
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -194,15 +201,19 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+ auto EnumRef = declRefExpr(to(enumConstantDecl()));
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, EnumRef, binaryOperator()),
+ anyOf(NumericLiteral, EnumRef, binaryOperator(;
+
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), EnumRef, BinaryNumericExpr);
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 951b7f20af4c8..dd46494687eff 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -132,11 +132,15 @@ Changes in existing checks
` check by providing additional
examples and fixing some macro related false positives.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
+ arithmetic operations within member list initialization.
+
- Improved :doc:`misc-use-internal-linkage
` check by fix false positives
for function or variable in header file which contains macro expansion.
-- Improved :doc:`performance/unnecessary-value-param
+- Improved :doc:`performance-unnecessary-value-param
` check performance by
tolerating fix-it breaking compilation when functions is used as pointers
to avoid matching usage of functions within the current compilation unit.
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 64cec5f09ff2a9b2cb3811d52c66fabae90887be Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 26 +--
clang-tools-extra/docs/ReleaseNotes.rst | 6 -
.../modernize/use-default-member-init.cpp | 26 +++
3 files changed, 49 insertions(+), 9 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..ab6946588991e 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS()) &&
BinOp1->getOpcode() == BinOp2->getOpcode();
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -194,15 +200,19 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+ auto EnumRef = declRefExpr(to(enumConstantDecl()));
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, EnumRef, binaryOperator()),
+ anyOf(NumericLiteral, EnumRef, binaryOperator(;
+
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), EnumRef, BinaryNumericExpr);
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 951b7f20af4c8..dd46494687eff 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -132,11 +132,15 @@ Changes in existing checks
` check by providing additional
examples and fixing some macro related false positives.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
+ arithmetic operations within member list initialization.
+
- Improved :doc:`misc-use-internal-linkage
` check by fix false positives
for function or variable in header file which contains macro expansion.
-- Improved :doc:`performance/unnecessary-value-param
+- Improved :doc:`performance-unnecessary-value-param
` check performance by
tolerating fix-it breaking compilation when functions is used as pointers
to avoid matching usage of functions within the current compilation unit.
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/HerrCai0907 edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
HerrCai0907 wrote:
Should we compare BinaryOp here?
https://github.com/llvm/llvm-project/pull/129370
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
RiverDave wrote: Ping https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
llvmbot wrote:
@llvm/pr-subscribers-clang-tools-extra
Author: David Rivera (RiverDave)
Changes
This aims to address a portion of #122480 by adding matchers on binary
operators. **This allows explicit arithmetic operations within initializers.**
### Note
I'm aware of the other false-negatives presented in the issue above,
specifically not matching explicit castings & constexpr values. These will
be addressed separately on a different PR which is in the process and shouldn't
take long (let me know if that's the right approach).
Feedback is much appreciated.
---
Full diff: https://github.com/llvm/llvm-project/pull/129370.diff
3 Files Affected:
- (modified)
clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp (+12-1)
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+4)
- (modified)
clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
(+26)
``diff
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..a9d9e8b66ea7c 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -202,7 +208,12 @@ void
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
unaryOperator(hasAnyOperatorName("+", "-"),
hasUnaryOperand(floatLiteral())),
cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+declRefExpr(to(enumConstantDecl())),
+binaryOperator(
+hasLHS(anyOf(integerLiteral(), floatLiteral(),
+ declRefExpr(to(enumConstantDecl())),
binaryOperator())),
+hasRHS(anyOf(integerLiteral(), floatLiteral(),
+ declRefExpr(to(enumConstantDecl())),
binaryOperator();
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 07a79d6bbe807..6d909f9d7c6bd 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -137,6 +137,10 @@ Changes in existing checks
` check by fixing false
negatives
on ternary operators calling ``std::move``.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
arithmetic
+ operations within member list initialization.
+
Removed checks
^^
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'c' [modernize-use-default-member-init]
+ // CHECK-FIXES: int c{2 + (4 / 2) + 3 + (7 / 11)}
+ int d;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'd' [modernize-use-default-member-init]
+ // CHECK-FIXES: int d{ARITHMETIC_MACRO * 2};
+ double e;
+ // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer
for 'e' [modernize-use-default-member-init]
+ // CHECK-FIXES: double e{1.2 + 3.4};
+
+};
+} // namespace PR122480
``
https://github.com/llvm/llvm-project/pull/129370
___
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -202,7 +208,13 @@ void
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
unaryOperator(hasAnyOperatorName("+", "-"),
hasUnaryOperand(floatLiteral())),
cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+declRefExpr(to(enumConstantDecl())),
+binaryOperator(hasLHS(anyOf(integerLiteral(), floatLiteral(),
RiverDave wrote:
Done. I've improved not only my part but think I got rid of some redundancies
to make it more readable. There's still some duplicate code like:
```cpp
hasOperands(anyOf(NumericLiteral, EnumRef, binaryOperator()),
anyOf(NumericLiteral, EnumRef, binaryOperator(;
```
I'm not really sure if there's another way of avoiding that. for the rest let
me know if this is the right direction.
https://github.com/llvm/llvm-project/pull/129370
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 39900908f047c2c067eea93855a5e6f644d13830 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 26 +--
clang-tools-extra/docs/ReleaseNotes.rst | 4 +++
.../modernize/use-default-member-init.cpp | 26 +++
3 files changed, 48 insertions(+), 8 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..3afc047a02b7b 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -194,15 +200,19 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+ auto EnumRef = declRefExpr(to(enumConstantDecl()));
+
+ auto BinaryNumericExpr = binaryOperator(
+ hasOperands(anyOf(NumericLiteral, EnumRef, binaryOperator()),
+ anyOf(NumericLiteral, EnumRef, binaryOperator(;
+
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
+UnaryNumericLiteral, cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
+implicitValueInitExpr(), EnumRef, BinaryNumericExpr);
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 07a79d6bbe807..01892f4cde648 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -128,6 +128,10 @@ Changes in existing checks
` check by providing additional
examples and fixing some macro related false positives.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
arithmetic
+ operations within member list initialization.
+
- Improved :doc:`performance/unnecessary-value-param
` check performance by
tolerating fix-it breaking compilation when functions is used as pointers
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'c' [modernize-use-default-member-init]
+ // CHECK-FIXES: int c{2 + (4 / 2) + 3 + (7 / 11)}
+ int d;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'd' [modernize-use-default-member-
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave deleted https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -202,7 +208,13 @@ void
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
unaryOperator(hasAnyOperatorName("+", "-"),
hasUnaryOperand(floatLiteral())),
cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+declRefExpr(to(enumConstantDecl())),
+binaryOperator(hasLHS(anyOf(integerLiteral(), floatLiteral(),
RiverDave wrote:
I've improved it a bit, not only my changes but the rest as well as I think is
way more readable now, there's still some duplicate code like:
```cpp
binaryOperator(hasLHS(anyOf(NumericLiteral, EnumRef, binaryOperator())),
hasRHS(anyOf(NumericLiteral, EnumRef, binaryOperator();
```
But I still didn't wanted to change it as I think It's better for readability.
let me know if this is the right call.
https://github.com/llvm/llvm-project/pull/129370
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From b46375a39104f967bdb3b6a9bd3214545a5965cf Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 26 ---
clang-tools-extra/docs/ReleaseNotes.rst | 4 +++
.../modernize/use-default-member-init.cpp | 26 +++
3 files changed, 47 insertions(+), 9 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..16f04b5f555e1 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -194,15 +200,17 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
+ hasUnaryOperand(NumericLiteral));
+ auto EnumRef = declRefExpr(to(enumConstantDecl()));
+
+ auto InitBase = anyOf(
+ stringLiteral(), characterLiteral(), NumericLiteral, UnaryNumericLiteral,
+ cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
+ EnumRef,
+ binaryOperator(hasLHS(anyOf(NumericLiteral, EnumRef, binaryOperator())),
+ hasRHS(anyOf(NumericLiteral, EnumRef,
binaryOperator();
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 07a79d6bbe807..01892f4cde648 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -128,6 +128,10 @@ Changes in existing checks
` check by providing additional
examples and fixing some macro related false positives.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
arithmetic
+ operations within member list initialization.
+
- Improved :doc:`performance/unnecessary-value-param
` check performance by
tolerating fix-it breaking compilation when functions is used as pointers
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'c' [modernize-use-default-member-init]
+ // CHECK-FIXES: int c{2 + (4 / 2) + 3 + (7 / 11)}
+ int d;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'd' [modernize-use-default-member-init]
+ // CHECK-FIXES: int d{ARIT
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From be9f035f738c8ea2771c9e79d4c22ff0fa82542e Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 26 ---
clang-tools-extra/docs/ReleaseNotes.rst | 4 +++
.../modernize/use-default-member-init.cpp | 26 +++
3 files changed, 47 insertions(+), 9 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..639b594abaf30 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -194,15 +200,17 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
- auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
hasUnaryOperand(NumericLiteral));
+ auto EnumRef = declRefExpr(to(enumConstantDecl()));
+
+ auto InitBase = anyOf(
+ stringLiteral(), characterLiteral(), NumericLiteral, UnaryNumericLiteral,
+ cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
+ EnumRef,
+ binaryOperator(hasLHS(anyOf(NumericLiteral, EnumRef, binaryOperator())),
+ hasRHS(anyOf(NumericLiteral, EnumRef,
binaryOperator();
+
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 07a79d6bbe807..01892f4cde648 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -128,6 +128,10 @@ Changes in existing checks
` check by providing additional
examples and fixing some macro related false positives.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
arithmetic
+ operations within member list initialization.
+
- Improved :doc:`performance/unnecessary-value-param
` check performance by
tolerating fix-it breaking compilation when functions is used as pointers
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'c' [modernize-use-default-member-init]
+ // CHECK-FIXES: int c{2 + (4 / 2) + 3 + (7 / 11)}
+ int d;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'd' [modernize-use-default-member-init]
+ // CHECK-FIXES: int d{ARITHMETIC_MACRO * 2};
+ double e;
+ // CHE
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -137,6 +137,10 @@ Changes in existing checks ` check by fixing false negatives on ternary operators calling ``std::move``. +- Improved :doc:`modernize-use-default-member-init RiverDave wrote: Thx for pointing out, It's fixed now. https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 6dff411516cb4c0e807307fd36d15955e805d5c4 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 23 ++--
clang-tools-extra/docs/ReleaseNotes.rst | 4 +++
.../modernize/use-default-member-init.cpp | 26 +++
3 files changed, 45 insertions(+), 8 deletions(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..d01f440fe7e16 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -194,15 +200,16 @@ void UseDefaultMemberInitCheck::storeOptions(
}
void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
+ auto NumericLiteral = anyOf(integerLiteral(), floatLiteral());
+ auto UnaryNumericLiteral = unaryOperator(hasAnyOperatorName("+", "-"),
hasUnaryOperand(NumericLiteral));
+ auto EnumRef = declRefExpr(to(enumConstantDecl()));
+
auto InitBase =
- anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(integerLiteral())),
-floatLiteral(),
-unaryOperator(hasAnyOperatorName("+", "-"),
- hasUnaryOperand(floatLiteral())),
-cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+ anyOf(stringLiteral(), characterLiteral(), NumericLiteral,
UnaryNumericLiteral,
+cxxBoolLiteral(), cxxNullPtrLiteralExpr(),
implicitValueInitExpr(), EnumRef,
+binaryOperator(hasLHS(anyOf(NumericLiteral, EnumRef,
binaryOperator())),
+ hasRHS(anyOf(NumericLiteral, EnumRef,
binaryOperator();
+
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 07a79d6bbe807..01892f4cde648 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -128,6 +128,10 @@ Changes in existing checks
` check by providing additional
examples and fixing some macro related false positives.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
arithmetic
+ operations within member list initialization.
+
- Improved :doc:`performance/unnecessary-value-param
` check performance by
tolerating fix-it breaking compilation when functions is used as pointers
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'c' [modernize-use-default-member-init]
+ // CHECK-FIXES: int c{2 + (4 / 2) + 3 + (7 / 11)}
+ int d;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'd' [modernize-use-default-member-init]
+ // CHECK-FIXES: int d{ARITHMETIC_MACRO * 2};
+ double e;
+ // CHECK-MESSAG
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -137,6 +137,10 @@ Changes in existing checks ` check by fixing false negatives on ternary operators calling ``std::move``. +- Improved :doc:`modernize-use-default-member-init EugeneZelenko wrote: Please keep alphabetical order (by check name) in this list. https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/vbvictor edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
@@ -202,7 +208,13 @@ void
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
unaryOperator(hasAnyOperatorName("+", "-"),
hasUnaryOperand(floatLiteral())),
cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+declRefExpr(to(enumConstantDecl())),
+binaryOperator(hasLHS(anyOf(integerLiteral(), floatLiteral(),
vbvictor wrote:
Consider moving duplicate code to helper-mather like `auto Init`
https://github.com/llvm/llvm-project/pull/129370
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave updated
https://github.com/llvm/llvm-project/pull/129370
>From 68c371939323c9be13dba2e8e80ac4138859d845 Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 14 +-
clang-tools-extra/docs/ReleaseNotes.rst | 4 +++
.../modernize/use-default-member-init.cpp | 26 +++
3 files changed, 43 insertions(+), 1 deletion(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..d155207d2a3ea 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -202,7 +208,13 @@ void
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
unaryOperator(hasAnyOperatorName("+", "-"),
hasUnaryOperand(floatLiteral())),
cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+declRefExpr(to(enumConstantDecl())),
+binaryOperator(hasLHS(anyOf(integerLiteral(), floatLiteral(),
+declRefExpr(to(enumConstantDecl())),
+binaryOperator())),
+ hasRHS(anyOf(integerLiteral(), floatLiteral(),
+declRefExpr(to(enumConstantDecl())),
+binaryOperator();
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 07a79d6bbe807..6d909f9d7c6bd 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -137,6 +137,10 @@ Changes in existing checks
` check by fixing false
negatives
on ternary operators calling ``std::move``.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
arithmetic
+ operations within member list initialization.
+
Removed checks
^^
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'c' [modernize-use-default-member-init]
+ // CHECK-FIXES: int c{2 + (4 / 2) + 3 + (7 / 11)}
+ int d;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'd' [modernize-use-default-member-init]
+ // CHECK-FIXES: int d{ARITHMETIC_MACRO * 2};
+ double e;
+ // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer
for 'e' [modernize-use-default-member-init]
+ // CHECK-FIXES: double e{1.2 + 3.4};
+
+};
+} // namespace PR122480
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
github-actions[bot] wrote:
:warning: C/C++ code formatter, clang-format found issues in your code.
:warning:
You can test this locally with the following command:
``bash
git-clang-format --diff 83d2c68fc151ab50e005ecd36edb53a2af89e71c
60856b908e2b52cc512445d7d31e7fc72cd124cb --extensions cpp --
clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
``
View the diff from clang-format here.
``diff
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index a9d9e8b66e..d155207d2a 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -163,7 +163,7 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
const auto *BinOp1 = cast(E1);
const auto *BinOp2 = cast(E2);
return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
-sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ sameValue(BinOp1->getRHS(), BinOp2->getRHS());
}
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
@@ -209,11 +209,12 @@ void
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
hasUnaryOperand(floatLiteral())),
cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
declRefExpr(to(enumConstantDecl())),
-binaryOperator(
-hasLHS(anyOf(integerLiteral(), floatLiteral(),
- declRefExpr(to(enumConstantDecl())),
binaryOperator())),
-hasRHS(anyOf(integerLiteral(), floatLiteral(),
- declRefExpr(to(enumConstantDecl())),
binaryOperator();
+binaryOperator(hasLHS(anyOf(integerLiteral(), floatLiteral(),
+declRefExpr(to(enumConstantDecl())),
+binaryOperator())),
+ hasRHS(anyOf(integerLiteral(), floatLiteral(),
+declRefExpr(to(enumConstantDecl())),
+binaryOperator();
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
``
https://github.com/llvm/llvm-project/pull/129370
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave edited https://github.com/llvm/llvm-project/pull/129370 ___ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clang-tidy] detect arithmetic operations within member list initialization in modernize-use-default-member-init check (PR #129370)
https://github.com/RiverDave created
https://github.com/llvm/llvm-project/pull/129370
This aims to address a portion of #122480 by adding matchers on binary
operators. **This allows explicit arithmetic operations within initializers.**
### Note
I'm aware of the other false-negatives presented in the issue above,
specifically not matching explicit castings & constexpr values. These will be
addressed separately on a different PR which is in the process and shouldn't
take long (let me know if that's the right approach).
Feedback is much appreciated.
>From 60856b908e2b52cc512445d7d31e7fc72cd124cb Mon Sep 17 00:00:00 2001
From: David Rivera
Date: Sat, 1 Mar 2025 02:09:02 -0500
Subject: [PATCH] [clang-tidy] detect arithmetic operations within member list
initialization in modernize-use-default-member-init
---
.../modernize/UseDefaultMemberInitCheck.cpp | 13 +-
clang-tools-extra/docs/ReleaseNotes.rst | 4 +++
.../modernize/use-default-member-init.cpp | 26 +++
3 files changed, 42 insertions(+), 1 deletion(-)
diff --git
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 6c06b0af342f6..a9d9e8b66ea7c 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -159,6 +159,12 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
case Stmt::UnaryOperatorClass:
return sameValue(cast(E1)->getSubExpr(),
cast(E2)->getSubExpr());
+ case Stmt::BinaryOperatorClass: {
+const auto *BinOp1 = cast(E1);
+const auto *BinOp2 = cast(E2);
+return sameValue(BinOp1->getLHS(), BinOp2->getLHS()) &&
+sameValue(BinOp1->getRHS(), BinOp2->getRHS());
+ }
case Stmt::CharacterLiteralClass:
return cast(E1)->getValue() ==
cast(E2)->getValue();
@@ -202,7 +208,12 @@ void
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
unaryOperator(hasAnyOperatorName("+", "-"),
hasUnaryOperand(floatLiteral())),
cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
-declRefExpr(to(enumConstantDecl(;
+declRefExpr(to(enumConstantDecl())),
+binaryOperator(
+hasLHS(anyOf(integerLiteral(), floatLiteral(),
+ declRefExpr(to(enumConstantDecl())),
binaryOperator())),
+hasRHS(anyOf(integerLiteral(), floatLiteral(),
+ declRefExpr(to(enumConstantDecl())),
binaryOperator();
auto Init =
anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst
b/clang-tools-extra/docs/ReleaseNotes.rst
index 07a79d6bbe807..6d909f9d7c6bd 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -137,6 +137,10 @@ Changes in existing checks
` check by fixing false
negatives
on ternary operators calling ``std::move``.
+- Improved :doc:`modernize-use-default-member-init
+ ` check by matching
arithmetic
+ operations within member list initialization.
+
Removed checks
^^
diff --git
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
index 81c980e0217e6..ff8c80b682bdb 100644
---
a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
+++
b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-default-member-init.cpp
@@ -518,3 +518,29 @@ class ArrayBraceInitMultipleValues {
};
} // namespace PR63285
+
+namespace PR122480 {
+
+#define ARITHMETIC_MACRO (44 - 2)
+
+class DefaultMemberInitWithArithmetic {
+ DefaultMemberInitWithArithmetic() : a{1 + 1}, b{1 + 11 + 123 + 1234}, c{2
+ (4 / 2) + 3 + (7 / 11)}, d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is
redundant [modernize-use-default-member-init]
+ // CHECK-FIXES: DefaultMemberInitWithArithmetic() {}
+
+ int a{1 + 1};
+ int b;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'b' [modernize-use-default-member-init]
+ // CHECK-FIXES: int b{1 + 11 + 123 + 1234};
+ int c;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'c' [modernize-use-default-member-init]
+ // CHECK-FIXES: int c{2 + (4 / 2) + 3 + (7 / 11)}
+ int d;
+ // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer
for 'd' [modernize-use-default-member-init]
+ // CHECK-FIXES: int d{ARITHMETIC_MACRO * 2};
+ double e;
+ // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer
for 'e' [modernize-use-default-member-init]
+ // CHECK-FIXES: double e{1.2 + 3.4};
+
+};
+} // n
