[clang-tools-extra] [clang-tidy] Ignore implicit functions in readability-implicit-bool-conversion (PR #94512)

2024-06-09 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL closed 
https://github.com/llvm/llvm-project/pull/94512
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Ignore implicit functions in readability-implicit-bool-conversion (PR #94512)

2024-06-08 Thread Julian Schmidt via cfe-commits

https://github.com/5chmidti approved this pull request.


https://github.com/llvm/llvm-project/pull/94512
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Ignore implicit functions in readability-implicit-bool-conversion (PR #94512)

2024-06-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-tidy

Author: Piotr Zegar (PiotrZSL)


Changes

Ignore implicit declarations and defaulted functions. Helps with issues in 
generated code like, C++
spaceship operator.

Closes #93409

---
Full diff: https://github.com/llvm/llvm-project/pull/94512.diff


3 Files Affected:

- (modified) 
clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp (+5-2) 
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+2-1) 
- (added) 
clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-cxx20.cpp
 (+31) 


``diff
diff --git 
a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
index 28f5eada6d825..aa115cd450c4f 100644
--- a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
@@ -279,6 +279,9 @@ void 
ImplicitBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
   hasParent(callExpr()),
   hasSourceExpression(binaryOperator(hasAnyOperatorName("==", "!=";
 
+  auto IsInCompilerGeneratedFunction = hasAncestor(namedDecl(anyOf(
+  isImplicit(), functionDecl(isDefaulted()), functionTemplateDecl(;
+
   Finder->addMatcher(
   traverse(TK_AsIs,
implicitCastExpr(
@@ -299,7 +302,7 @@ void 
ImplicitBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
// additional parens in replacement.
optionally(hasParent(stmt().bind("parentStmt"))),
unless(isInTemplateInstantiation()),
-   unless(hasAncestor(functionTemplateDecl(
+   unless(IsInCompilerGeneratedFunction))
.bind("implicitCastToBool")),
   this);
 
@@ -331,7 +334,7 @@ void 
ImplicitBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
   anyOf(hasParent(implicitCastExpr().bind("furtherImplicitCast")),
 anything()),
   unless(isInTemplateInstantiation()),
-  unless(hasAncestor(functionTemplateDecl(),
+  unless(IsInCompilerGeneratedFunction))),
   this);
 }
 
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 33b65caf2b02c..6e2344de3e09f 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -397,7 +397,8 @@ Changes in existing checks
   valid fix suggestions for ``static_cast`` without a preceding space and
   fixed problem with duplicate parentheses in double implicit casts. Corrected
   the fix suggestions for C23 and later by using C-style casts instead of
-  ``static_cast``.
+  ``static_cast``. Fixed false positives in C++20 spaceship operator by 
ignoring
+  casts in implicit and defaulted functions.
 
 - Improved :doc:`readability-redundant-inline-specifier
   ` check to properly
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-cxx20.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-cxx20.cpp
new file mode 100644
index 0..13aa5c5774b47
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-cxx20.cpp
@@ -0,0 +1,31 @@
+// RUN: %check_clang_tidy -std=c++20 %s readability-implicit-bool-conversion %t
+
+namespace std {
+struct strong_ordering {
+  int n;
+  constexpr operator int() const { return n; }
+  static const strong_ordering equal, greater, less;
+};
+constexpr strong_ordering strong_ordering::equal = {0};
+constexpr strong_ordering strong_ordering::greater = {1};
+constexpr strong_ordering strong_ordering::less = {-1};
+} // namespace std
+
+namespace PR93409 {
+  struct X
+  {
+  auto operator<=>(const X&) const = default;
+  bool m_b;
+  };
+
+  struct Y
+  {
+  auto operator<=>(const Y&) const = default;
+  X m_x;
+  };
+  
+  bool compare(const Y& y1, const Y& y2)
+  {
+ return y1 == y2 || y1 < y2 || y1 > y2;
+  }
+}

``




https://github.com/llvm/llvm-project/pull/94512
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] Ignore implicit functions in readability-implicit-bool-conversion (PR #94512)

2024-06-05 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL created 
https://github.com/llvm/llvm-project/pull/94512

Ignore implicit declarations and defaulted functions. Helps with issues in 
generated code like, C++
spaceship operator.

Closes #93409

>From 22cd99f5288f53eb561a3040ce78c5143a9a7dad Mon Sep 17 00:00:00 2001
From: Piotr Zegar 
Date: Wed, 5 Jun 2024 17:40:18 +
Subject: [PATCH] [clang-tidy] Ignore implicit functions in
 readability-implicit-bool-conversion

Ignore implicit declarations and defaulted functions.
Helps with issues in generated code like, C++
spaceship operator.

Closes #93409
---
 .../ImplicitBoolConversionCheck.cpp   |  7 +++--
 clang-tools-extra/docs/ReleaseNotes.rst   |  3 +-
 .../implicit-bool-conversion-cxx20.cpp| 31 +++
 3 files changed, 38 insertions(+), 3 deletions(-)
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-cxx20.cpp

diff --git 
a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
index 28f5eada6d825..aa115cd450c4f 100644
--- a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
@@ -279,6 +279,9 @@ void 
ImplicitBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
   hasParent(callExpr()),
   hasSourceExpression(binaryOperator(hasAnyOperatorName("==", "!=";
 
+  auto IsInCompilerGeneratedFunction = hasAncestor(namedDecl(anyOf(
+  isImplicit(), functionDecl(isDefaulted()), functionTemplateDecl(;
+
   Finder->addMatcher(
   traverse(TK_AsIs,
implicitCastExpr(
@@ -299,7 +302,7 @@ void 
ImplicitBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
// additional parens in replacement.
optionally(hasParent(stmt().bind("parentStmt"))),
unless(isInTemplateInstantiation()),
-   unless(hasAncestor(functionTemplateDecl(
+   unless(IsInCompilerGeneratedFunction))
.bind("implicitCastToBool")),
   this);
 
@@ -331,7 +334,7 @@ void 
ImplicitBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
   anyOf(hasParent(implicitCastExpr().bind("furtherImplicitCast")),
 anything()),
   unless(isInTemplateInstantiation()),
-  unless(hasAncestor(functionTemplateDecl(),
+  unless(IsInCompilerGeneratedFunction))),
   this);
 }
 
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 33b65caf2b02c..6e2344de3e09f 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -397,7 +397,8 @@ Changes in existing checks
   valid fix suggestions for ``static_cast`` without a preceding space and
   fixed problem with duplicate parentheses in double implicit casts. Corrected
   the fix suggestions for C23 and later by using C-style casts instead of
-  ``static_cast``.
+  ``static_cast``. Fixed false positives in C++20 spaceship operator by 
ignoring
+  casts in implicit and defaulted functions.
 
 - Improved :doc:`readability-redundant-inline-specifier
   ` check to properly
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-cxx20.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-cxx20.cpp
new file mode 100644
index 0..13aa5c5774b47
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-cxx20.cpp
@@ -0,0 +1,31 @@
+// RUN: %check_clang_tidy -std=c++20 %s readability-implicit-bool-conversion %t
+
+namespace std {
+struct strong_ordering {
+  int n;
+  constexpr operator int() const { return n; }
+  static const strong_ordering equal, greater, less;
+};
+constexpr strong_ordering strong_ordering::equal = {0};
+constexpr strong_ordering strong_ordering::greater = {1};
+constexpr strong_ordering strong_ordering::less = {-1};
+} // namespace std
+
+namespace PR93409 {
+  struct X
+  {
+  auto operator<=>(const X&) const = default;
+  bool m_b;
+  };
+
+  struct Y
+  {
+  auto operator<=>(const Y&) const = default;
+  X m_x;
+  };
+  
+  bool compare(const Y& y1, const Y& y2)
+  {
+ return y1 == y2 || y1 < y2 || y1 > y2;
+  }
+}

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits