diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -7292,6 +7292,9 @@ return; } + if (DefKind.isComparison()) + UnusedPrivateFields.clear(); + if (DefKind.isSpecialMember() ? CheckExplicitlyDefaultedSpecialMember(cast(FD), DefKind.asSpecialMember()) diff --git a/clang/test/SemaCXX/warn-unused-private-field.cpp b/clang/test/SemaCXX/warn-unused-private-field.cpp --- a/clang/test/SemaCXX/warn-unused-private-field.cpp +++ b/clang/test/SemaCXX/warn-unused-private-field.cpp @@ -1,5 +1,26 @@ // RUN: %clang_cc1 -fsyntax-only -Wunused-private-field -Wused-but-marked-unused -Wno-uninitialized -verify -std=c++11 %s // RUN: %clang_cc1 -fsyntax-only -Wunused-private-field -Wused-but-marked-unused -Wno-uninitialized -verify -std=c++17 %s +// RUN: %clang_cc1 -fsyntax-only -Wunused-private-field -Wused-but-marked-unused -Wno-uninitialized -verify -std=c++20 %s + +#if __cplusplus >= 202002L + +class EqDefaultCompare { + int used; + +public: + EqDefaultCompare(int x) : used(x) {} + bool operator==(const EqDefaultCompare &) const = default; +}; + +class SpaceShipDefaultCompare { + int used; + +public: + SpaceShipDefaultCompare(int x) : used(x) {} + int operator<=>(const SpaceShipDefaultCompare &) const = default; +}; + +#endif class NotFullyDefined { public: