I would prefer to have just 2 attributes: noread & nowrite, like Alive2, but now it’s hard to change things.
Plus historically, readnone had semantics other than just memory access. This has been cleaned up now (or is underway).
I am not a native speaker but I don’t think there necessarily is a conflict. writeonly may or may not write to memory. In the readnone case, the may not part applies. Granted, the terminology may be a bit more complicated than necessary.
As @nlopes mentioned, the writeonly and readnone attributes do not only specify behavior with respect to memory, but any state visible outside the function.
They may or may not, or do sometimes, etc. Certainly not in a proper and consistent way. We should have proper attribution for all “effects” and if we want to model things as memory effects that are not strictly speaking memory effects we should create special “pseudo-memory” categories.
I don’t remember what the thread was but I think my last proposal would have looked somewhat like this:
I agree that the methods’ names are not ideal, even if the comments indicate the real semantics. The fact the comments are needed is a bad sign.
Attributes have grown organically and independently. Of course the result is not optimal, but changing the status quo is pretty hard. People haven’t met face to face in a long time, so progress is slow to inexistent in sensitive/complex areas.