[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-21 Thread Chris White via cfe-commits

whiteio wrote:

I'll update my changes to fix the other tests that are failing this evening, 
sorry about that, should have ran the rest of them after making the change.

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-19 Thread Chris White via cfe-commits

https://github.com/whiteio created 
https://github.com/llvm/llvm-project/pull/116871

Fix -Wunused-private-field incorrectly suppressing warnings for friend 
defaulted comparison operators. The warning should only be suppressed when the 
defaulted comparison is a class member function.

Fixes #116270

>From c69426607d63b3a0cf7d839c82cde55273a5f942 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Tue, 19 Nov 2024 20:06:28 +
Subject: [PATCH] [Clang] Fix -Wunused-private-field false negative with
 defaulted comparison operators

Fix -Wunused-private-field suppressing warnings when defaulted comparison
operators are declared as friend functions. The warning should only be
suppressed for comparison operators that are class members.

Fixes #116270
---
 clang/lib/Sema/SemaDeclCXX.cpp   |  2 +-
 clang/test/SemaCXX/warn-unused-private-field.cpp | 11 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 26041e53de5061..e115eb0a3d7e10 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison())
+  if (DefKind.isComparison() && isa(FD->getDeclContext()))
 UnusedPrivateFields.clear();
 
   if (DefKind.isSpecialMember()
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index 1128eacc309d9f..bdd66807dca35f 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -20,6 +20,17 @@ class SpaceShipDefaultCompare {
   int operator<=>(const SpaceShipDefaultCompare &) const = default;
 };
 
+class UnusedConstPrivateField {
+ public:
+  UnusedConstPrivateField() : unused_(0) {}
+ private:
+  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+};
+
+class FriendEqDefaultCompare {
+  friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
+};
+
 #endif
 
 class NotFullyDefined {

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-20 Thread Chris White via cfe-commits


@@ -20,6 +20,17 @@ class SpaceShipDefaultCompare {
   int operator<=>(const SpaceShipDefaultCompare &) const = default;
 };
 
+class UnusedConstPrivateField {
+ public:
+  UnusedConstPrivateField() : unused_(0) {}
+ private:
+  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+};
+
+class FriendEqDefaultCompare {
+  friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;

whiteio wrote:

I've updated the tests, hopefully I didn't misinterpret your comments. I added 
a non-friend method to the unrelated class and added a case where the 
comparison is defined as a friend function.

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-20 Thread Chris White via cfe-commits

https://github.com/whiteio updated 
https://github.com/llvm/llvm-project/pull/116871

>From c69426607d63b3a0cf7d839c82cde55273a5f942 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Tue, 19 Nov 2024 20:06:28 +
Subject: [PATCH 1/2] [Clang] Fix -Wunused-private-field false negative with
 defaulted comparison operators

Fix -Wunused-private-field suppressing warnings when defaulted comparison
operators are declared as friend functions. The warning should only be
suppressed for comparison operators that are class members.

Fixes #116270
---
 clang/lib/Sema/SemaDeclCXX.cpp   |  2 +-
 clang/test/SemaCXX/warn-unused-private-field.cpp | 11 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 26041e53de5061..e115eb0a3d7e10 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison())
+  if (DefKind.isComparison() && isa(FD->getDeclContext()))
 UnusedPrivateFields.clear();
 
   if (DefKind.isSpecialMember()
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index 1128eacc309d9f..bdd66807dca35f 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -20,6 +20,17 @@ class SpaceShipDefaultCompare {
   int operator<=>(const SpaceShipDefaultCompare &) const = default;
 };
 
+class UnusedConstPrivateField {
+ public:
+  UnusedConstPrivateField() : unused_(0) {}
+ private:
+  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+};
+
+class FriendEqDefaultCompare {
+  friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
+};
+
 #endif
 
 class NotFullyDefined {

>From 1f64a2bb972f5cf9e6455eb721acfd8281ad6981 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Wed, 20 Nov 2024 18:34:52 +
Subject: [PATCH 2/2] Address review comments

---
 clang/lib/Sema/SemaDeclCXX.cpp   |  9 +++--
 clang/test/SemaCXX/warn-unused-private-field.cpp | 13 -
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index e115eb0a3d7e10..0123051a305611 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,8 +7535,13 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison() && isa(FD->getDeclContext()))
-UnusedPrivateFields.clear();
+  if (DefKind.isComparison()) {
+auto PT = FD->getParamDecl(0)->getType();
+CXXRecordDecl *RD = PT.getNonReferenceType()->getAsCXXRecordDecl();
+for (FieldDecl *Field : RD->fields()) {
+  UnusedPrivateFields.remove(Field);
+}
+  }
 
   if (DefKind.isSpecialMember()
   ? CheckExplicitlyDefaultedSpecialMember(cast(FD),
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index bdd66807dca35f..717b1864272140 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -20,17 +20,20 @@ class SpaceShipDefaultCompare {
   int operator<=>(const SpaceShipDefaultCompare &) const = default;
 };
 
-class UnusedConstPrivateField {
- public:
-  UnusedConstPrivateField() : unused_(0) {}
- private:
-  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+class HasUnusedField {
+  int unused_; // expected-warning{{private field 'unused_' is not used}}
 };
 
 class FriendEqDefaultCompare {
+  int used;
   friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
 };
 
+class UnrelatedFriendEqDefaultCompare {
+  friend auto operator==(UnrelatedFriendEqDefaultCompare, 
UnrelatedFriendEqDefaultCompare) -> bool = default;
+  int operator<=>(const UnrelatedFriendEqDefaultCompare &) const = default;
+};
+
 #endif
 
 class NotFullyDefined {

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-20 Thread Chris White via cfe-commits


@@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison())
+  if (DefKind.isComparison() && isa(FD->getDeclContext()))
 UnusedPrivateFields.clear();

whiteio wrote:

Thanks for the pointers! I believe I understand now. I've push a new commit 
with the changes 1f64a2bb972f5cf9e6455eb721acfd8281ad6981

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-12-05 Thread Chris White via cfe-commits

whiteio wrote:

@Maetveis I've disabled that settings now. Thanks!

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-12-04 Thread Chris White via cfe-commits

whiteio wrote:

@Maetveis Thanks for letting me know, I'll resolve the conflicts and let you 
know once they're resolved.

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-12-04 Thread Chris White via cfe-commits

https://github.com/whiteio updated 
https://github.com/llvm/llvm-project/pull/116871

>From 29330456191334afb6cd82ae44f496c522985877 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Tue, 19 Nov 2024 20:06:28 +
Subject: [PATCH 1/3] [Clang] Fix -Wunused-private-field false negative with
 defaulted comparison operators

Fix -Wunused-private-field suppressing warnings when defaulted comparison
operators are declared as friend functions. The warning should only be
suppressed for comparison operators that are class members.

Fixes #116270
---
 clang/lib/Sema/SemaDeclCXX.cpp   |  2 +-
 clang/test/SemaCXX/warn-unused-private-field.cpp | 11 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 7e8e321c4b90e6..7434a29191cdb5 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison())
+  if (DefKind.isComparison() && isa(FD->getDeclContext()))
 UnusedPrivateFields.clear();
 
   if (DefKind.isSpecialMember()
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index bf104b1a76a656..4448d4715faad0 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -40,6 +40,17 @@ class FriendEqDefaultCompareOutOfClass {
 
 bool operator==(const FriendEqDefaultCompareOutOfClass &, const 
FriendEqDefaultCompareOutOfClass &) = default;
 
+class UnusedConstPrivateField {
+ public:
+  UnusedConstPrivateField() : unused_(0) {}
+ private:
+  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+};
+
+class FriendEqDefaultCompare {
+  friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
+};
+
 #endif
 
 class NotFullyDefined {

>From a7885a848d7a439659af33d69a13b245c725c690 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Wed, 20 Nov 2024 18:34:52 +
Subject: [PATCH 2/3] Address review comments

---
 clang/lib/Sema/SemaDeclCXX.cpp | 11 +--
 .../test/SemaCXX/warn-unused-private-field.cpp | 18 ++
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 7434a29191cdb5..f7a0b3c059ec91 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,8 +7535,15 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison() && isa(FD->getDeclContext()))
-UnusedPrivateFields.clear();
+  if (DefKind.isComparison()) {
+auto PT = FD->getParamDecl(0)->getType();
+if (const CXXRecordDecl *RD =
+PT.getNonReferenceType()->getAsCXXRecordDecl()) {
+  for (FieldDecl *Field : RD->fields()) {
+UnusedPrivateFields.remove(Field);
+  }
+}
+  }
 
   if (DefKind.isSpecialMember()
   ? CheckExplicitlyDefaultedSpecialMember(cast(FD),
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index 4448d4715faad0..9eccfc20430439 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -41,16 +41,26 @@ class FriendEqDefaultCompareOutOfClass {
 bool operator==(const FriendEqDefaultCompareOutOfClass &, const 
FriendEqDefaultCompareOutOfClass &) = default;
 
 class UnusedConstPrivateField {
- public:
-  UnusedConstPrivateField() : unused_(0) {}
- private:
-  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+public:
+UnusedConstPrivateField() : unused_(0) {}
+private:
+const int unused_; // expected-warning{{private field 'unused_' is not 
used}}
+};
+
+class HasUnusedField {
+  int unused_; // expected-warning{{private field 'unused_' is not used}}
 };
 
 class FriendEqDefaultCompare {
+  int used;
   friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
 };
 
+class UnrelatedFriendEqDefaultCompare {
+  friend auto operator==(UnrelatedFriendEqDefaultCompare, 
UnrelatedFriendEqDefaultCompare) -> bool = default;
+  int operator<=>(const UnrelatedFriendEqDefaultCompare &) const = default;
+};
+
 #endif
 
 class NotFullyDefined {

>From 825f92f653d9961f7673e5f83bdea7ea12e97860 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Sat, 23 Nov 2024 14:55:47 +
Subject: [PATCH 3/3] Update release notes

---
 clang/docs/ReleaseNotes.rst | 14 ++
 1 file changed, 14 insertions(+)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 191b4cc0ce07ad..30fbdc9769c958 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -641,6 +641,20 @@ Improvements to Clang's diagnostics
 
 - Clang now diagnoses dangling refere

[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-12-04 Thread Chris White via cfe-commits

https://github.com/whiteio updated 
https://github.com/llvm/llvm-project/pull/116871

>From 29330456191334afb6cd82ae44f496c522985877 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Tue, 19 Nov 2024 20:06:28 +
Subject: [PATCH 1/3] [Clang] Fix -Wunused-private-field false negative with
 defaulted comparison operators

Fix -Wunused-private-field suppressing warnings when defaulted comparison
operators are declared as friend functions. The warning should only be
suppressed for comparison operators that are class members.

Fixes #116270
---
 clang/lib/Sema/SemaDeclCXX.cpp   |  2 +-
 clang/test/SemaCXX/warn-unused-private-field.cpp | 11 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 7e8e321c4b90e6..7434a29191cdb5 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison())
+  if (DefKind.isComparison() && isa(FD->getDeclContext()))
 UnusedPrivateFields.clear();
 
   if (DefKind.isSpecialMember()
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index bf104b1a76a656..4448d4715faad0 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -40,6 +40,17 @@ class FriendEqDefaultCompareOutOfClass {
 
 bool operator==(const FriendEqDefaultCompareOutOfClass &, const 
FriendEqDefaultCompareOutOfClass &) = default;
 
+class UnusedConstPrivateField {
+ public:
+  UnusedConstPrivateField() : unused_(0) {}
+ private:
+  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+};
+
+class FriendEqDefaultCompare {
+  friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
+};
+
 #endif
 
 class NotFullyDefined {

>From a7885a848d7a439659af33d69a13b245c725c690 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Wed, 20 Nov 2024 18:34:52 +
Subject: [PATCH 2/3] Address review comments

---
 clang/lib/Sema/SemaDeclCXX.cpp | 11 +--
 .../test/SemaCXX/warn-unused-private-field.cpp | 18 ++
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 7434a29191cdb5..f7a0b3c059ec91 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,8 +7535,15 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison() && isa(FD->getDeclContext()))
-UnusedPrivateFields.clear();
+  if (DefKind.isComparison()) {
+auto PT = FD->getParamDecl(0)->getType();
+if (const CXXRecordDecl *RD =
+PT.getNonReferenceType()->getAsCXXRecordDecl()) {
+  for (FieldDecl *Field : RD->fields()) {
+UnusedPrivateFields.remove(Field);
+  }
+}
+  }
 
   if (DefKind.isSpecialMember()
   ? CheckExplicitlyDefaultedSpecialMember(cast(FD),
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index 4448d4715faad0..9eccfc20430439 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -41,16 +41,26 @@ class FriendEqDefaultCompareOutOfClass {
 bool operator==(const FriendEqDefaultCompareOutOfClass &, const 
FriendEqDefaultCompareOutOfClass &) = default;
 
 class UnusedConstPrivateField {
- public:
-  UnusedConstPrivateField() : unused_(0) {}
- private:
-  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+public:
+UnusedConstPrivateField() : unused_(0) {}
+private:
+const int unused_; // expected-warning{{private field 'unused_' is not 
used}}
+};
+
+class HasUnusedField {
+  int unused_; // expected-warning{{private field 'unused_' is not used}}
 };
 
 class FriendEqDefaultCompare {
+  int used;
   friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
 };
 
+class UnrelatedFriendEqDefaultCompare {
+  friend auto operator==(UnrelatedFriendEqDefaultCompare, 
UnrelatedFriendEqDefaultCompare) -> bool = default;
+  int operator<=>(const UnrelatedFriendEqDefaultCompare &) const = default;
+};
+
 #endif
 
 class NotFullyDefined {

>From d95b9d995a19c10d394474fd67cde4d834476cad Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Sat, 23 Nov 2024 14:55:47 +
Subject: [PATCH 3/3] Update release notes

---
 clang/docs/ReleaseNotes.rst  | 14 ++
 clang/test/SemaCXX/warn-unused-private-field.cpp |  7 ---
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 191b4cc0ce07ad..30fbdc9769c958 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.

[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-12-04 Thread Chris White via cfe-commits

whiteio wrote:

Hey @Maetveis, I've addressed the conflicts 👍

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


[clang] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl and clang-dxc (PR #120644)

2024-12-19 Thread Chris White via cfe-commits

https://github.com/whiteio created 
https://github.com/llvm/llvm-project/pull/120644

Exposing `-fdiagnostic-color=` to clang-cl and clang-dxc. `-fcolor-diagnostics` 
and `-fno-color-diagnostics` are already allowed in both of these and 
`-fdiagnostics-color=` allows one additional value, `auto`.

I've added the tests for clang-cl to `cl-options.c` as per the comments in the 
issue linked below. I couldn't finding a suitable existing file to add the 
clang-dxc tests to so I've created a new one.

Resolves #119184

>From 1f52639c56681b061a92998681da727800dbf95d Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Thu, 19 Dec 2024 22:02:47 +
Subject: [PATCH] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl and
 clang-dxc

---
 clang/include/clang/Driver/Options.td | 2 +-
 clang/test/Driver/cl-options.c| 9 +
 clang/test/Driver/dxc_options.hlsl| 8 
 3 files changed, 18 insertions(+), 1 deletion(-)
 create mode 100644 clang/test/Driver/dxc_options.hlsl

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 638f8c52053ec5..ad64626d960d43 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1990,7 +1990,7 @@ def : Flag<["-"], "fno-diagnostics-color">, 
Group,
   Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
   Alias;
 def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, 
Group,
-  Visibility<[ClangOption, FlangOption]>,
+  Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
   Values<"auto,always,never">,
   HelpText<"When to use colors in diagnostics">;
 def fansi_escape_codes : Flag<["-"], "fansi-escape-codes">, Group,
diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index 477e8489e74280..fe57a5232b2fdc 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -664,6 +664,15 @@
 // RUN: not %clang_cl /guard:foo -### -- %s 2>&1 | FileCheck 
-check-prefix=CFGUARDINVALID %s
 // CFGUARDINVALID: invalid value 'foo' in '/guard:'
 
+// The test doesn't run in a PTY, so "auto" defaults to off.
+// RUN: %clang_cl -fdiagnostics-color=auto -### -- %s 2>&1 | FileCheck 
-check-prefix=NO_COLOR %s
+
+// RUN: %clang_cl -fdiagnostics-color -### -- %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_cl -fdiagnostics-color=always -### -- %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_cl -fdiagnostics-color=never -### -- %s 2>&1 | FileCheck 
-check-prefix=NO_COLOR %s
+// COLOR: "-fcolor-diagnostics"
+// NO_COLOR-NOT: "-fcolor-diagnostics"
+
 // Accept "core" clang options.
 // (/Zs is for syntax-only, -Werror makes it fail hard on unknown options)
 // RUN: %clang_cl \
diff --git a/clang/test/Driver/dxc_options.hlsl 
b/clang/test/Driver/dxc_options.hlsl
new file mode 100644
index 00..9bd4b61cdcf19d
--- /dev/null
+++ b/clang/test/Driver/dxc_options.hlsl
@@ -0,0 +1,8 @@
+// The test doesn't run in a PTY, so "auto" defaults to off.
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=auto -### -- %s 2>&1 | 
FileCheck -check-prefix=NO_COLOR %s
+
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color -### %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=always -### %s 2>&1 | 
FileCheck -check-prefix=COLOR %s
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=never -### %s 2>&1 | 
FileCheck -check-prefix=NO_COLOR %s
+// COLOR: "-fcolor-diagnostics"
+// NO_COLOR-NOT: "-fcolor-diagnostics"
\ No newline at end of file

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


[clang] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl and clang-dxc (PR #120644)

2024-12-19 Thread Chris White via cfe-commits

https://github.com/whiteio updated 
https://github.com/llvm/llvm-project/pull/120644

>From 770dec5aec1b879bafbc6c69b12a2e43c9497f7f Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Thu, 19 Dec 2024 22:02:47 +
Subject: [PATCH] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl and
 clang-dxc

---
 clang/include/clang/Driver/Options.td  | 2 +-
 clang/test/Driver/cl-options.c | 9 +
 clang/test/Driver/dxc_options.hlsl | 8 
 clang/test/Driver/unknown-arg-drivermodes.test | 4 
 4 files changed, 18 insertions(+), 5 deletions(-)
 create mode 100644 clang/test/Driver/dxc_options.hlsl

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 638f8c52053ec5..ad64626d960d43 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1990,7 +1990,7 @@ def : Flag<["-"], "fno-diagnostics-color">, 
Group,
   Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
   Alias;
 def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, 
Group,
-  Visibility<[ClangOption, FlangOption]>,
+  Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
   Values<"auto,always,never">,
   HelpText<"When to use colors in diagnostics">;
 def fansi_escape_codes : Flag<["-"], "fansi-escape-codes">, Group,
diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index 477e8489e74280..fe57a5232b2fdc 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -664,6 +664,15 @@
 // RUN: not %clang_cl /guard:foo -### -- %s 2>&1 | FileCheck 
-check-prefix=CFGUARDINVALID %s
 // CFGUARDINVALID: invalid value 'foo' in '/guard:'
 
+// The test doesn't run in a PTY, so "auto" defaults to off.
+// RUN: %clang_cl -fdiagnostics-color=auto -### -- %s 2>&1 | FileCheck 
-check-prefix=NO_COLOR %s
+
+// RUN: %clang_cl -fdiagnostics-color -### -- %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_cl -fdiagnostics-color=always -### -- %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_cl -fdiagnostics-color=never -### -- %s 2>&1 | FileCheck 
-check-prefix=NO_COLOR %s
+// COLOR: "-fcolor-diagnostics"
+// NO_COLOR-NOT: "-fcolor-diagnostics"
+
 // Accept "core" clang options.
 // (/Zs is for syntax-only, -Werror makes it fail hard on unknown options)
 // RUN: %clang_cl \
diff --git a/clang/test/Driver/dxc_options.hlsl 
b/clang/test/Driver/dxc_options.hlsl
new file mode 100644
index 00..9bd4b61cdcf19d
--- /dev/null
+++ b/clang/test/Driver/dxc_options.hlsl
@@ -0,0 +1,8 @@
+// The test doesn't run in a PTY, so "auto" defaults to off.
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=auto -### -- %s 2>&1 | 
FileCheck -check-prefix=NO_COLOR %s
+
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color -### %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=always -### %s 2>&1 | 
FileCheck -check-prefix=COLOR %s
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=never -### %s 2>&1 | 
FileCheck -check-prefix=NO_COLOR %s
+// COLOR: "-fcolor-diagnostics"
+// NO_COLOR-NOT: "-fcolor-diagnostics"
\ No newline at end of file
diff --git a/clang/test/Driver/unknown-arg-drivermodes.test 
b/clang/test/Driver/unknown-arg-drivermodes.test
index a7ea73af345e03..0125d79b47afa1 100644
--- a/clang/test/Driver/unknown-arg-drivermodes.test
+++ b/clang/test/Driver/unknown-arg-drivermodes.test
@@ -1,6 +1,5 @@
 // RUN: %clang_cl  \
 // RUN: --config   \
-// RUN: -fdiagnostics-color=auto   \
 // RUN: -fno-record-command-line   \
 // RUN: -frecord-command-line  \
 // RUN: -nodefaultlibs \
@@ -15,7 +14,6 @@
 
 // RUN: not %clang_dxc \
 // RUN: --config   \
-// RUN: -fdiagnostics-color=auto   \
 // RUN: -fno-record-command-line   \
 // RUN: -frecord-command-line  \
 // RUN: -nodefaultlibs \
@@ -30,7 +28,6 @@
 // RUN: | FileCheck %s --check-prefix=DXC --implicit-check-not="error:"
 
 // CL: warning: unknown argument ignored in clang-cl: '--config'
-// CL: warning: unknown argument ignored in clang-cl: 
'-fdiagnostics-color=auto'
 // CL: warning: unknown argument ignored in clang-cl: 
'-fno-record-command-line'
 // CL: warning: unknown argument ignored in clang-cl: '-frecord-command-line'
 // CL: warning: unknown argument ignored in clang-cl: '-nodefaultlibs'
@@ -42,7 +39,6 @@
 // CL: warning: unknown argument ignored in clang-cl: '-Xoffload-linker'
 
 // DXC: error: unknown argument: '--config'
-// DXC: error: unknown argument: '-fdiagnostics-color=auto'
 // DXC: error: unknown argument: '-fno-record-command-line'
 // DXC: error: unknown argument: '-frecord-command-line'
 // DXC: error: unknown argument: '-nodefaultlibs'

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


[clang] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl and clang-dxc (PR #120644)

2024-12-20 Thread Chris White via cfe-commits

https://github.com/whiteio updated 
https://github.com/llvm/llvm-project/pull/120644

>From 770dec5aec1b879bafbc6c69b12a2e43c9497f7f Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Thu, 19 Dec 2024 22:02:47 +
Subject: [PATCH 1/2] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl
 and clang-dxc

---
 clang/include/clang/Driver/Options.td  | 2 +-
 clang/test/Driver/cl-options.c | 9 +
 clang/test/Driver/dxc_options.hlsl | 8 
 clang/test/Driver/unknown-arg-drivermodes.test | 4 
 4 files changed, 18 insertions(+), 5 deletions(-)
 create mode 100644 clang/test/Driver/dxc_options.hlsl

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 638f8c52053ec5..ad64626d960d43 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1990,7 +1990,7 @@ def : Flag<["-"], "fno-diagnostics-color">, 
Group,
   Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
   Alias;
 def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, 
Group,
-  Visibility<[ClangOption, FlangOption]>,
+  Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
   Values<"auto,always,never">,
   HelpText<"When to use colors in diagnostics">;
 def fansi_escape_codes : Flag<["-"], "fansi-escape-codes">, Group,
diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index 477e8489e74280..fe57a5232b2fdc 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -664,6 +664,15 @@
 // RUN: not %clang_cl /guard:foo -### -- %s 2>&1 | FileCheck 
-check-prefix=CFGUARDINVALID %s
 // CFGUARDINVALID: invalid value 'foo' in '/guard:'
 
+// The test doesn't run in a PTY, so "auto" defaults to off.
+// RUN: %clang_cl -fdiagnostics-color=auto -### -- %s 2>&1 | FileCheck 
-check-prefix=NO_COLOR %s
+
+// RUN: %clang_cl -fdiagnostics-color -### -- %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_cl -fdiagnostics-color=always -### -- %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_cl -fdiagnostics-color=never -### -- %s 2>&1 | FileCheck 
-check-prefix=NO_COLOR %s
+// COLOR: "-fcolor-diagnostics"
+// NO_COLOR-NOT: "-fcolor-diagnostics"
+
 // Accept "core" clang options.
 // (/Zs is for syntax-only, -Werror makes it fail hard on unknown options)
 // RUN: %clang_cl \
diff --git a/clang/test/Driver/dxc_options.hlsl 
b/clang/test/Driver/dxc_options.hlsl
new file mode 100644
index 00..9bd4b61cdcf19d
--- /dev/null
+++ b/clang/test/Driver/dxc_options.hlsl
@@ -0,0 +1,8 @@
+// The test doesn't run in a PTY, so "auto" defaults to off.
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=auto -### -- %s 2>&1 | 
FileCheck -check-prefix=NO_COLOR %s
+
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color -### %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=always -### %s 2>&1 | 
FileCheck -check-prefix=COLOR %s
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=never -### %s 2>&1 | 
FileCheck -check-prefix=NO_COLOR %s
+// COLOR: "-fcolor-diagnostics"
+// NO_COLOR-NOT: "-fcolor-diagnostics"
\ No newline at end of file
diff --git a/clang/test/Driver/unknown-arg-drivermodes.test 
b/clang/test/Driver/unknown-arg-drivermodes.test
index a7ea73af345e03..0125d79b47afa1 100644
--- a/clang/test/Driver/unknown-arg-drivermodes.test
+++ b/clang/test/Driver/unknown-arg-drivermodes.test
@@ -1,6 +1,5 @@
 // RUN: %clang_cl  \
 // RUN: --config   \
-// RUN: -fdiagnostics-color=auto   \
 // RUN: -fno-record-command-line   \
 // RUN: -frecord-command-line  \
 // RUN: -nodefaultlibs \
@@ -15,7 +14,6 @@
 
 // RUN: not %clang_dxc \
 // RUN: --config   \
-// RUN: -fdiagnostics-color=auto   \
 // RUN: -fno-record-command-line   \
 // RUN: -frecord-command-line  \
 // RUN: -nodefaultlibs \
@@ -30,7 +28,6 @@
 // RUN: | FileCheck %s --check-prefix=DXC --implicit-check-not="error:"
 
 // CL: warning: unknown argument ignored in clang-cl: '--config'
-// CL: warning: unknown argument ignored in clang-cl: 
'-fdiagnostics-color=auto'
 // CL: warning: unknown argument ignored in clang-cl: 
'-fno-record-command-line'
 // CL: warning: unknown argument ignored in clang-cl: '-frecord-command-line'
 // CL: warning: unknown argument ignored in clang-cl: '-nodefaultlibs'
@@ -42,7 +39,6 @@
 // CL: warning: unknown argument ignored in clang-cl: '-Xoffload-linker'
 
 // DXC: error: unknown argument: '--config'
-// DXC: error: unknown argument: '-fdiagnostics-color=auto'
 // DXC: error: unknown argument: '-fno-record-command-line'
 // DXC: error: unknown argument: '-frecord-command-line'
 // DXC: error: unknown argument: '-nodefaultlibs'

>From bc06d22ca5508b7e72437bfba4c874b43e0f Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Fri, 20 Dec 2024 20:40:09 +
Subject: [PATCH 2/2] Address PR comments

---
 clang/docs/ReleaseNotes.rst|  3 

[clang] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl and clang-dxc (PR #120644)

2024-12-20 Thread Chris White via cfe-commits

whiteio wrote:

Thanks @Maetveis, I've addressed the comments.

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


[clang] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl and clang-dxc (PR #120644)

2024-12-20 Thread Chris White via cfe-commits

https://github.com/whiteio updated 
https://github.com/llvm/llvm-project/pull/120644

>From 2d6d43abf0dfaa64a5cdd7bff3a3ecbef01635c2 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Thu, 19 Dec 2024 22:02:47 +
Subject: [PATCH 1/2] [Clang-CL][DXC] Expose -fdiagnostic-color= to clang-cl
 and clang-dxc

---
 clang/include/clang/Driver/Options.td  | 2 +-
 clang/test/Driver/cl-options.c | 9 +
 clang/test/Driver/dxc_options.hlsl | 8 
 clang/test/Driver/unknown-arg-drivermodes.test | 4 
 4 files changed, 18 insertions(+), 5 deletions(-)
 create mode 100644 clang/test/Driver/dxc_options.hlsl

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 9edf308cc685ea..9e81c39f6869bd 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1990,7 +1990,7 @@ def : Flag<["-"], "fno-diagnostics-color">, 
Group,
   Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
   Alias;
 def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, 
Group,
-  Visibility<[ClangOption, FlangOption]>,
+  Visibility<[ClangOption, CLOption, DXCOption, FlangOption]>,
   Values<"auto,always,never">,
   HelpText<"When to use colors in diagnostics">;
 def fansi_escape_codes : Flag<["-"], "fansi-escape-codes">, Group,
diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index 477e8489e74280..fe57a5232b2fdc 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -664,6 +664,15 @@
 // RUN: not %clang_cl /guard:foo -### -- %s 2>&1 | FileCheck 
-check-prefix=CFGUARDINVALID %s
 // CFGUARDINVALID: invalid value 'foo' in '/guard:'
 
+// The test doesn't run in a PTY, so "auto" defaults to off.
+// RUN: %clang_cl -fdiagnostics-color=auto -### -- %s 2>&1 | FileCheck 
-check-prefix=NO_COLOR %s
+
+// RUN: %clang_cl -fdiagnostics-color -### -- %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_cl -fdiagnostics-color=always -### -- %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_cl -fdiagnostics-color=never -### -- %s 2>&1 | FileCheck 
-check-prefix=NO_COLOR %s
+// COLOR: "-fcolor-diagnostics"
+// NO_COLOR-NOT: "-fcolor-diagnostics"
+
 // Accept "core" clang options.
 // (/Zs is for syntax-only, -Werror makes it fail hard on unknown options)
 // RUN: %clang_cl \
diff --git a/clang/test/Driver/dxc_options.hlsl 
b/clang/test/Driver/dxc_options.hlsl
new file mode 100644
index 00..9bd4b61cdcf19d
--- /dev/null
+++ b/clang/test/Driver/dxc_options.hlsl
@@ -0,0 +1,8 @@
+// The test doesn't run in a PTY, so "auto" defaults to off.
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=auto -### -- %s 2>&1 | 
FileCheck -check-prefix=NO_COLOR %s
+
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color -### %s 2>&1 | FileCheck 
-check-prefix=COLOR %s
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=always -### %s 2>&1 | 
FileCheck -check-prefix=COLOR %s
+// RUN: %clang_dxc -Tlib_6_7 -fdiagnostics-color=never -### %s 2>&1 | 
FileCheck -check-prefix=NO_COLOR %s
+// COLOR: "-fcolor-diagnostics"
+// NO_COLOR-NOT: "-fcolor-diagnostics"
\ No newline at end of file
diff --git a/clang/test/Driver/unknown-arg-drivermodes.test 
b/clang/test/Driver/unknown-arg-drivermodes.test
index a7ea73af345e03..0125d79b47afa1 100644
--- a/clang/test/Driver/unknown-arg-drivermodes.test
+++ b/clang/test/Driver/unknown-arg-drivermodes.test
@@ -1,6 +1,5 @@
 // RUN: %clang_cl  \
 // RUN: --config   \
-// RUN: -fdiagnostics-color=auto   \
 // RUN: -fno-record-command-line   \
 // RUN: -frecord-command-line  \
 // RUN: -nodefaultlibs \
@@ -15,7 +14,6 @@
 
 // RUN: not %clang_dxc \
 // RUN: --config   \
-// RUN: -fdiagnostics-color=auto   \
 // RUN: -fno-record-command-line   \
 // RUN: -frecord-command-line  \
 // RUN: -nodefaultlibs \
@@ -30,7 +28,6 @@
 // RUN: | FileCheck %s --check-prefix=DXC --implicit-check-not="error:"
 
 // CL: warning: unknown argument ignored in clang-cl: '--config'
-// CL: warning: unknown argument ignored in clang-cl: 
'-fdiagnostics-color=auto'
 // CL: warning: unknown argument ignored in clang-cl: 
'-fno-record-command-line'
 // CL: warning: unknown argument ignored in clang-cl: '-frecord-command-line'
 // CL: warning: unknown argument ignored in clang-cl: '-nodefaultlibs'
@@ -42,7 +39,6 @@
 // CL: warning: unknown argument ignored in clang-cl: '-Xoffload-linker'
 
 // DXC: error: unknown argument: '--config'
-// DXC: error: unknown argument: '-fdiagnostics-color=auto'
 // DXC: error: unknown argument: '-fno-record-command-line'
 // DXC: error: unknown argument: '-frecord-command-line'
 // DXC: error: unknown argument: '-nodefaultlibs'

>From 7756201f0e086e03f6e1b58da06796dbea9cb5f0 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Fri, 20 Dec 2024 20:40:09 +
Subject: [PATCH 2/2] Address PR comments

---
 clang/docs/ReleaseNotes.rst|  3 

[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-21 Thread Chris White via cfe-commits

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-21 Thread Chris White via cfe-commits

https://github.com/whiteio updated 
https://github.com/llvm/llvm-project/pull/116871

>From c69426607d63b3a0cf7d839c82cde55273a5f942 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Tue, 19 Nov 2024 20:06:28 +
Subject: [PATCH 1/2] [Clang] Fix -Wunused-private-field false negative with
 defaulted comparison operators

Fix -Wunused-private-field suppressing warnings when defaulted comparison
operators are declared as friend functions. The warning should only be
suppressed for comparison operators that are class members.

Fixes #116270
---
 clang/lib/Sema/SemaDeclCXX.cpp   |  2 +-
 clang/test/SemaCXX/warn-unused-private-field.cpp | 11 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 26041e53de5061..e115eb0a3d7e10 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison())
+  if (DefKind.isComparison() && isa(FD->getDeclContext()))
 UnusedPrivateFields.clear();
 
   if (DefKind.isSpecialMember()
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index 1128eacc309d9f..bdd66807dca35f 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -20,6 +20,17 @@ class SpaceShipDefaultCompare {
   int operator<=>(const SpaceShipDefaultCompare &) const = default;
 };
 
+class UnusedConstPrivateField {
+ public:
+  UnusedConstPrivateField() : unused_(0) {}
+ private:
+  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+};
+
+class FriendEqDefaultCompare {
+  friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
+};
+
 #endif
 
 class NotFullyDefined {

>From c41cb5e89effd4f4a92131052ed6bb036a4159dc Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Wed, 20 Nov 2024 18:34:52 +
Subject: [PATCH 2/2] Address review comments

---
 clang/lib/Sema/SemaDeclCXX.cpp   | 11 +--
 clang/test/SemaCXX/warn-unused-private-field.cpp | 13 -
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index e115eb0a3d7e10..ccc2d5304058a3 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,8 +7535,15 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison() && isa(FD->getDeclContext()))
-UnusedPrivateFields.clear();
+  if (DefKind.isComparison()) {
+auto PT = FD->getParamDecl(0)->getType();
+if (const CXXRecordDecl *RD =
+PT.getNonReferenceType()->getAsCXXRecordDecl()) {
+  for (FieldDecl *Field : RD->fields()) {
+UnusedPrivateFields.remove(Field);
+  }
+}
+  }
 
   if (DefKind.isSpecialMember()
   ? CheckExplicitlyDefaultedSpecialMember(cast(FD),
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index bdd66807dca35f..717b1864272140 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -20,17 +20,20 @@ class SpaceShipDefaultCompare {
   int operator<=>(const SpaceShipDefaultCompare &) const = default;
 };
 
-class UnusedConstPrivateField {
- public:
-  UnusedConstPrivateField() : unused_(0) {}
- private:
-  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+class HasUnusedField {
+  int unused_; // expected-warning{{private field 'unused_' is not used}}
 };
 
 class FriendEqDefaultCompare {
+  int used;
   friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
 };
 
+class UnrelatedFriendEqDefaultCompare {
+  friend auto operator==(UnrelatedFriendEqDefaultCompare, 
UnrelatedFriendEqDefaultCompare) -> bool = default;
+  int operator<=>(const UnrelatedFriendEqDefaultCompare &) const = default;
+};
+
 #endif
 
 class NotFullyDefined {

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


[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-23 Thread Chris White via cfe-commits

https://github.com/whiteio updated 
https://github.com/llvm/llvm-project/pull/116871

>From ad14635ab12eb81a841db885962c95911722e4f2 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Tue, 19 Nov 2024 20:06:28 +
Subject: [PATCH 1/3] [Clang] Fix -Wunused-private-field false negative with
 defaulted comparison operators

Fix -Wunused-private-field suppressing warnings when defaulted comparison
operators are declared as friend functions. The warning should only be
suppressed for comparison operators that are class members.

Fixes #116270
---
 clang/lib/Sema/SemaDeclCXX.cpp   |  2 +-
 clang/test/SemaCXX/warn-unused-private-field.cpp | 11 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 26041e53de5061..e115eb0a3d7e10 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison())
+  if (DefKind.isComparison() && isa(FD->getDeclContext()))
 UnusedPrivateFields.clear();
 
   if (DefKind.isSpecialMember()
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index 1128eacc309d9f..bdd66807dca35f 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -20,6 +20,17 @@ class SpaceShipDefaultCompare {
   int operator<=>(const SpaceShipDefaultCompare &) const = default;
 };
 
+class UnusedConstPrivateField {
+ public:
+  UnusedConstPrivateField() : unused_(0) {}
+ private:
+  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+};
+
+class FriendEqDefaultCompare {
+  friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
+};
+
 #endif
 
 class NotFullyDefined {

>From 935aa2edb4596f944d1477638b3654a94aad711e Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Wed, 20 Nov 2024 18:34:52 +
Subject: [PATCH 2/3] Address review comments

---
 clang/lib/Sema/SemaDeclCXX.cpp   | 11 +--
 clang/test/SemaCXX/warn-unused-private-field.cpp | 13 -
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index e115eb0a3d7e10..ccc2d5304058a3 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7535,8 +7535,15 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, 
FunctionDecl *FD) {
 return;
   }
 
-  if (DefKind.isComparison() && isa(FD->getDeclContext()))
-UnusedPrivateFields.clear();
+  if (DefKind.isComparison()) {
+auto PT = FD->getParamDecl(0)->getType();
+if (const CXXRecordDecl *RD =
+PT.getNonReferenceType()->getAsCXXRecordDecl()) {
+  for (FieldDecl *Field : RD->fields()) {
+UnusedPrivateFields.remove(Field);
+  }
+}
+  }
 
   if (DefKind.isSpecialMember()
   ? CheckExplicitlyDefaultedSpecialMember(cast(FD),
diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp 
b/clang/test/SemaCXX/warn-unused-private-field.cpp
index bdd66807dca35f..717b1864272140 100644
--- a/clang/test/SemaCXX/warn-unused-private-field.cpp
+++ b/clang/test/SemaCXX/warn-unused-private-field.cpp
@@ -20,17 +20,20 @@ class SpaceShipDefaultCompare {
   int operator<=>(const SpaceShipDefaultCompare &) const = default;
 };
 
-class UnusedConstPrivateField {
- public:
-  UnusedConstPrivateField() : unused_(0) {}
- private:
-  const int unused_; // expected-warning{{private field 'unused_' is not used}}
+class HasUnusedField {
+  int unused_; // expected-warning{{private field 'unused_' is not used}}
 };
 
 class FriendEqDefaultCompare {
+  int used;
   friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> 
bool = default;
 };
 
+class UnrelatedFriendEqDefaultCompare {
+  friend auto operator==(UnrelatedFriendEqDefaultCompare, 
UnrelatedFriendEqDefaultCompare) -> bool = default;
+  int operator<=>(const UnrelatedFriendEqDefaultCompare &) const = default;
+};
+
 #endif
 
 class NotFullyDefined {

>From 63a93bad10008eeff2f461b94686a6ddf06f0674 Mon Sep 17 00:00:00 2001
From: Chris White 
Date: Sat, 23 Nov 2024 14:55:47 +
Subject: [PATCH 3/3] Update release notes

---
 clang/docs/ReleaseNotes.rst | 14 ++
 1 file changed, 14 insertions(+)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 8bd06fadfdc984..188681f99ee5c5 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -583,6 +583,20 @@ Improvements to Clang's diagnostics
 - For an rvalue reference bound to a temporary struct with an integer member, 
Clang will detect constant integer overflow
   in the initializer for the integer member (#GH46755).
 
+- Fixed a bug where Clang would not emit ``-Wunused-private-field`` warnings 
when an unrelated class 
+  defined

[clang] [Clang] Fix -Wunused-private-field false negative with defaulted comparison operators (PR #116871)

2024-11-23 Thread Chris White via cfe-commits

whiteio wrote:

Thanks for that @Maetveis! I've updated the release notes.

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