[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-15 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL closed 
https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-15 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL approved this pull request.


https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-15 Thread David Rivera via cfe-commits

RiverDave wrote:

Ping

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-12 Thread David Rivera via cfe-commits

https://github.com/RiverDave updated 
https://github.com/llvm/llvm-project/pull/129408

>From 8995f2517be1235e01cd68d0d68199505b8ffaad Mon Sep 17 00:00:00 2001
From: David Rivera 
Date: Sat, 1 Mar 2025 19:22:25 -0500
Subject: [PATCH] [clang-tidy] detect explicit casting within
 modernize-use-default-member-init

---
 .../modernize/UseDefaultMemberInitCheck.cpp   | 12 +--
 clang-tools-extra/docs/ReleaseNotes.rst   |  3 +-
 .../modernize/use-default-member-init.cpp | 36 +++
 3 files changed, 48 insertions(+), 3 deletions(-)

diff --git 
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 5b0b9b59d4e3b..bf99c738da1a3 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -176,6 +176,11 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
cast(E2)->getString();
   case Stmt::DeclRefExprClass:
 return cast(E1)->getDecl() == 
cast(E2)->getDecl();
+  case Stmt::CStyleCastExprClass:
+  case Stmt::CXXStaticCastExprClass:
+  case Stmt::CXXFunctionalCastExprClass:
+return sameValue(cast(E1)->getSubExpr(),
+ cast(E2)->getSubExpr());
   default:
 return false;
   }
@@ -206,10 +211,13 @@ void 
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
 cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
 declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
 
+  auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
+  auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
+
   auto Init =
-  anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
+  anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitMatcher)),
initCountIs(0), hasType(arrayType(,
-InitBase);
+InitBase, ExplicitCastExpr);
 
   Finder->addMatcher(
   cxxConstructorDecl(forEachConstructorInitializer(
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 110f949741c3f..3a5361e23b5b6 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -156,7 +156,8 @@ Changes in existing checks
 
 - Improved :doc:`modernize-use-default-member-init
   ` check by matching
-  ``constexpr`` and ``static`` values on member initialization.
+  ``constexpr`` and ``static``` values on member initialization and by 
detecting explicit
+  casting of built-in types within member list initialization.
 
 - Improved :doc:`performance/unnecessary-value-param
   ` check performance by
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 8b9bfaf0df34f..cac50be9e4368 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
@@ -536,4 +536,40 @@ namespace PR122480 {
 // CHECK-FIXES: int b{STATIC_VAL};
   };
 
+class CStyleCastInit {
+  CStyleCastInit() : a{(int)1.23}, b{(float)42}, c{(double)'C'} {}
+  // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: member initializer for 'c' is 
redundant [modernize-use-default-member-init]
+  // CHECK-FIXES: CStyleCastInit()  {}
+
+  int a;
+  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer 
for 'a' [modernize-use-default-member-init]
+  // CHECK-FIXES: int a{(int)1.23};
+  float b;
+  // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer 
for 'b' [modernize-use-default-member-init]
+  // CHECK-FIXES: float b{(float)42};
+  double c{(double)'C'};
+};
+
+class StaticCastInit {
+  StaticCastInit() : m(static_cast(9.99)), n(static_cast(65)) {}
+  // CHECK-MESSAGES: :[[@LINE-1]]:49: warning: member initializer for 'n' is 
redundant [modernize-use-default-member-init]
+  // CHECK-FIXES: StaticCastInit()  {}
+  int m;
+  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer 
for 'm' [modernize-use-default-member-init]
+  // CHECK-FIXES: int m{static_cast(9.99)};
+  char n{static_cast(65)};
+};
+
+class FunctionalCastInit {
+  FunctionalCastInit() : a(int(5.67)), b(float(2)), c(double('C')) {}
+  // CHECK-MESSAGES: :[[@LINE-1]]:40: warning: member initializer for 'b' is 
redundant [modernize-use-default-member-init]
+  int a;
+  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer 
for 'a' [modernize-use-default-member-init]
+  // CHECK-FIXES: int a{int(5.67)};
+  float b{float(2)};
+  double c;
+  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer 
for 'c' [modernize-use-default-member-init]
+  // CHECK-FIXES: double c{double('C')};
+};
+
 } //namespace PR122480


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-12 Thread David Rivera via cfe-commits

https://github.com/RiverDave updated 
https://github.com/llvm/llvm-project/pull/129408

>From a06de0100d34d3f18b8eca690161b3720620f4af Mon Sep 17 00:00:00 2001
From: David Rivera 
Date: Sat, 1 Mar 2025 19:22:25 -0500
Subject: [PATCH] [clang-tidy] detect explicit casting within
 modernize-use-default-member-init

---
 .../modernize/UseDefaultMemberInitCheck.cpp   | 12 +--
 clang-tools-extra/docs/ReleaseNotes.rst   |  3 +-
 .../modernize/use-default-member-init.cpp | 36 +++
 3 files changed, 48 insertions(+), 3 deletions(-)

diff --git 
a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
index 5b0b9b59d4e3b..bf99c738da1a3 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp
@@ -176,6 +176,11 @@ static bool sameValue(const Expr *E1, const Expr *E2) {
cast(E2)->getString();
   case Stmt::DeclRefExprClass:
 return cast(E1)->getDecl() == 
cast(E2)->getDecl();
+  case Stmt::CStyleCastExprClass:
+  case Stmt::CXXStaticCastExprClass:
+  case Stmt::CXXFunctionalCastExprClass:
+return sameValue(cast(E1)->getSubExpr(),
+ cast(E2)->getSubExpr());
   default:
 return false;
   }
@@ -206,10 +211,13 @@ void 
UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
 cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
 declRefExpr(to(anyOf(enumConstantDecl(), ConstExpRef;
 
+  auto ExplicitCastExpr = castExpr(hasSourceExpression(InitBase));
+  auto InitMatcher = anyOf(InitBase, ExplicitCastExpr);
+
   auto Init =
-  anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitBase)),
+  anyOf(initListExpr(anyOf(allOf(initCountIs(1), hasInit(0, InitMatcher)),
initCountIs(0), hasType(arrayType(,
-InitBase);
+InitBase, ExplicitCastExpr);
 
   Finder->addMatcher(
   cxxConstructorDecl(forEachConstructorInitializer(
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 110f949741c3f..58d43ab43dbcc 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -156,7 +156,8 @@ Changes in existing checks
 
 - Improved :doc:`modernize-use-default-member-init
   ` check by matching
-  ``constexpr`` and ``static`` values on member initialization.
+  ``constexpr`` and ``static``` values on member initialization and by 
detecting
+  explicit casting of built-in types within member list initialization.
 
 - Improved :doc:`performance/unnecessary-value-param
   ` check performance by
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 8b9bfaf0df34f..cac50be9e4368 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
@@ -536,4 +536,40 @@ namespace PR122480 {
 // CHECK-FIXES: int b{STATIC_VAL};
   };
 
+class CStyleCastInit {
+  CStyleCastInit() : a{(int)1.23}, b{(float)42}, c{(double)'C'} {}
+  // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: member initializer for 'c' is 
redundant [modernize-use-default-member-init]
+  // CHECK-FIXES: CStyleCastInit()  {}
+
+  int a;
+  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer 
for 'a' [modernize-use-default-member-init]
+  // CHECK-FIXES: int a{(int)1.23};
+  float b;
+  // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer 
for 'b' [modernize-use-default-member-init]
+  // CHECK-FIXES: float b{(float)42};
+  double c{(double)'C'};
+};
+
+class StaticCastInit {
+  StaticCastInit() : m(static_cast(9.99)), n(static_cast(65)) {}
+  // CHECK-MESSAGES: :[[@LINE-1]]:49: warning: member initializer for 'n' is 
redundant [modernize-use-default-member-init]
+  // CHECK-FIXES: StaticCastInit()  {}
+  int m;
+  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer 
for 'm' [modernize-use-default-member-init]
+  // CHECK-FIXES: int m{static_cast(9.99)};
+  char n{static_cast(65)};
+};
+
+class FunctionalCastInit {
+  FunctionalCastInit() : a(int(5.67)), b(float(2)), c(double('C')) {}
+  // CHECK-MESSAGES: :[[@LINE-1]]:40: warning: member initializer for 'b' is 
redundant [modernize-use-default-member-init]
+  int a;
+  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer 
for 'a' [modernize-use-default-member-init]
+  // CHECK-FIXES: int a{int(5.67)};
+  float b{float(2)};
+  double c;
+  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer 
for 'c' [modernize-use-default-member-init]
+  // CHECK-FIXES: double c{double('C')};
+};
+
 } //namespace PR122480


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-12 Thread via cfe-commits


@@ -156,7 +156,8 @@ Changes in existing checks
 
 - Improved :doc:`modernize-use-default-member-init
   ` check by matching
-  ``constexpr`` and ``static`` values on member initialization.
+  ``constexpr`` and ``static``` values on member initialization and by 
detecting explicit

EugeneZelenko wrote:

Please follow 80-characters limit.

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-12 Thread David Rivera via cfe-commits


@@ -158,6 +158,10 @@ Changes in existing checks
   ` check by matching
   ``constexpr`` and ``static`` values on member initialization.
 
+- Improved :doc:`modernize-use-default-member-init
+  ` check by detecting
+  explicit casting of built-in types within member list initialization.

RiverDave wrote:

Should be done now

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-12 Thread via cfe-commits


@@ -158,6 +158,10 @@ Changes in existing checks
   ` check by matching
   ``constexpr`` and ``static`` values on member initialization.
 
+- Improved :doc:`modernize-use-default-member-init
+  ` check by detecting
+  explicit casting of built-in types within member list initialization.

EugeneZelenko wrote:

Please merge with previous entry.

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-11 Thread David Rivera via cfe-commits


@@ -194,15 +199,21 @@ 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 ExplicitCastExpr = castExpr(hasSourceExpression(anyOf(
+  unaryOperator(hasAnyOperatorName("+", "-"),
+hasUnaryOperand(anyOf(integerLiteral(), floatLiteral(,
+  integerLiteral(), floatLiteral(), characterLiteral(;

RiverDave wrote:

Amazing, will apply these suggestions soon

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-11 Thread David Rivera via cfe-commits

https://github.com/RiverDave edited 
https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-11 Thread David Rivera via cfe-commits

https://github.com/RiverDave edited 
https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-11 Thread Piotr Zegar via cfe-commits


@@ -194,15 +199,21 @@ 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 ExplicitCastExpr = castExpr(hasSourceExpression(anyOf(
+  unaryOperator(hasAnyOperatorName("+", "-"),
+hasUnaryOperand(anyOf(integerLiteral(), floatLiteral(,
+  integerLiteral(), floatLiteral(), characterLiteral(;

PiotrZSL wrote:

on other hand, instead typing here all those literals and unary operators, you 
could simply use thing like this:
```
anyOf(InitBase, castExpr(hasSourceExpression(InitBase)))
```
should do a trick...

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-11 Thread Piotr Zegar via cfe-commits

PiotrZSL wrote:

@RiverDave If you rebase this change we can merge it, and then if you want you 
could work on next version in independent PR.

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-11 Thread David Rivera via cfe-commits

RiverDave wrote:

> Change looks correct, but looks like this check got one more limitation in 
> case of code like this:
> 
> ```
> class CastInit {
>   CastInit() : m(static_cast(9)) {}
>   int m = 9;
> };
> ```
> 
> And this:
> 
> ```
> class CastInit {
>   CastInit() : m(static_cast(0)) {}
>   int m {};
> };
> ```



> Change looks correct, but looks like this check got one more limitation in 
> case of code like this:
> 
> ```
> class CastInit {
>   CastInit() : m(static_cast(9)) {}
>   int m = 9;
> };
> ```
> 
> And this:
> 
> ```
> class CastInit {
>   CastInit() : m(static_cast(0)) {}
>   int m {};
> };
> ```

Hadn't thought of this, but your idea makes sense, I'll try to implement it.

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-11 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL edited 
https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-11 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL approved this pull request.

Change looks correct, but looks like this check got one more limitation in case 
of code like this:

```
class CastInit {
  CastInit() : m(static_cast(9)) {}
  int m = 9;
};
```

And this:

```
```
class CastInit {
  CastInit() : m(static_cast(0)) {}
  int m {};
};
```
```

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] detect explicit casting within modernize-use-default-member-init (PR #129408)

2025-03-08 Thread David Rivera via cfe-commits

RiverDave wrote:

ping

https://github.com/llvm/llvm-project/pull/129408
___
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits