Skip to content

Commit a7885a8

Browse files
committed
Address review comments
1 parent 2933045 commit a7885a8

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7535,8 +7535,15 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *FD) {
75357535
return;
75367536
}
75377537

7538-
if (DefKind.isComparison() && isa<CXXRecordDecl>(FD->getDeclContext()))
7539-
UnusedPrivateFields.clear();
7538+
if (DefKind.isComparison()) {
7539+
auto PT = FD->getParamDecl(0)->getType();
7540+
if (const CXXRecordDecl *RD =
7541+
PT.getNonReferenceType()->getAsCXXRecordDecl()) {
7542+
for (FieldDecl *Field : RD->fields()) {
7543+
UnusedPrivateFields.remove(Field);
7544+
}
7545+
}
7546+
}
75407547

75417548
if (DefKind.isSpecialMember()
75427549
? CheckExplicitlyDefaultedSpecialMember(cast<CXXMethodDecl>(FD),

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,26 @@ class FriendEqDefaultCompareOutOfClass {
4141
bool operator==(const FriendEqDefaultCompareOutOfClass &, const FriendEqDefaultCompareOutOfClass &) = default;
4242

4343
class UnusedConstPrivateField {
44-
public:
45-
UnusedConstPrivateField() : unused_(0) {}
46-
private:
47-
const int unused_; // expected-warning{{private field 'unused_' is not used}}
44+
public:
45+
UnusedConstPrivateField() : unused_(0) {}
46+
private:
47+
const int unused_; // expected-warning{{private field 'unused_' is not used}}
48+
};
49+
50+
class HasUnusedField {
51+
int unused_; // expected-warning{{private field 'unused_' is not used}}
4852
};
4953

5054
class FriendEqDefaultCompare {
55+
int used;
5156
friend auto operator==(FriendEqDefaultCompare, FriendEqDefaultCompare) -> bool = default;
5257
};
5358

59+
class UnrelatedFriendEqDefaultCompare {
60+
friend auto operator==(UnrelatedFriendEqDefaultCompare, UnrelatedFriendEqDefaultCompare) -> bool = default;
61+
int operator<=>(const UnrelatedFriendEqDefaultCompare &) const = default;
62+
};
63+
5464
#endif
5565

5666
class NotFullyDefined {

0 commit comments

Comments
 (0)