D44883 extends -Wself-assign to also work on C++ classes.
In it's current state (as suggested by @rjmccall), it is not under it's own sub-group.
Since that diag is enabled by -Wall, stage2 testing showed that:
- It does not fire on any llvm code
- It does fire for these 3 unittests
- It does fire for libc++ tests
This diff simply silences those new warnings in llvm's unittests.
A similar diff will be needed for libcxx. (libcxx/test/std/language.support/support.types/byteops/, maybe something else)
Since i don't think we want to repeat rL322901, let's talk about it.
I've subscribed everyone who i think might be interested...
There are several ways forward:
- Not extend -Wself-assign, close D44883. Not very productive outcome i'd say.
- Keep D44883 in it's current state. Unless your custom overloaded operators do something unusual for when self-assigning, the warning is no less of a false-positive than the current -Wself-assign. Except for tests of course, there you'd want to silence it. The current suggestion is: ` S a; a = (S &)a; `
- Split the diagnostic in two - -Wself-assign-builtin (i.e. what is -Wself-assign in trunk), and -Wself-assign-overloaded - the new part in D44883. Since, as i said, i'm not really sure why it would be less of a error than the current -Wself-assign, both would still be in -Wall. That way one could simply pass -Wno-self-assign-overloaded for all the tests. Pretty simple to do, and will surely work.
- Split the diagnostic in two - -Wself-assign-trivial, and -Wself-assign-nontrivial. The choice of which diag to emit would depend on trivial-ness of that particular operator. The current -Wself-assign would be -Wself-assign-trivial. https://godbolt.org/g/gwDASe - A, B and C case would be treated as trivial, and D, E and F as non-trivial. Will be the most complicated to implement.