Skip to content

Commit 2933045

Browse files
committed
[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
1 parent 2e425bf commit 2933045

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *FD) {
75357535
return;
75367536
}
75377537

7538-
if (DefKind.isComparison())
7538+
if (DefKind.isComparison() && isa<CXXRecordDecl>(FD->getDeclContext()))
75397539
UnusedPrivateFields.clear();
75407540

75417541
if (DefKind.isSpecialMember()

clang/test/SemaCXX/warn-unused-private-field.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,17 @@ class FriendEqDefaultCompareOutOfClass {
4040

4141
bool operator==(const FriendEqDefaultCompareOutOfClass &, const FriendEqDefaultCompareOutOfClass &) = default;
4242

43+
class UnusedConstPrivateField {
44+
public:
45+
UnusedConstPrivateField() : unused_(0) {}
46+
private:
47+
const int unused_; // expected-warning{{private field 'unused_' is not used}}
48+
};
49+
50+
class FriendEqDefaultCompare {
51+
friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> bool = default;
52+
};
53+
4354
#endif
4455

4556
class NotFullyDefined {

0 commit comments

Comments
 (0)