================
@@ -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

Reply via email to