================ @@ -7535,7 +7535,7 @@ void Sema::CheckExplicitlyDefaultedFunction(Scope *S, FunctionDecl *FD) { return; } - if (DefKind.isComparison()) + if (DefKind.isComparison() && isa<CXXRecordDecl>(FD->getDeclContext())) UnusedPrivateFields.clear(); ---------------- Maetveis wrote:
If I read this correctly what you did here is you stopped clearing `UnusedPrivateFields` on comparison functions declared as a `friend` function. It is not a problem for `friend` functions to mark fields as used. The problem in #116270 is that an unrelated class (`C` in the example) causes the warning to be skipped for another class (`A`). Instead of clearing all fields from `UnusedPrivateFields` (which contain fields of both `A` and `C` in the example) only `C`'s fields should be cleared. You should loop over `C`'s field and remove all of them from `UnusedPrivateFields` using `UnusedFunctions.remove(Field)`. You find the declaration of `C` by looking at the first parameter of the function being checked, like it is done here [SemaDeclCXX.cpp:9055-9058](https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaDeclCXX.cpp#L9055-L9058). The fields can then be queried using `Decl.fields()` which gives you a range of `FieldDecl` pointers, you can pass each of those to `UnusedFunctions.remove`. If you have questions or if I'm not clear enough feel free to ask :). Thanks for contributing to LLVM! 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