On Wed, 9 Aug 2017, Martin Sebor wrote:
> the same function with the other of this pair attributes. I'd
> also be okay with not diagnosing this combination if I could
> convince myself that it's safe (or can be made safe) and treated
I'd expect it to be safe; it might simply happen that some calls are
optimized based on incomplete information (and even that is doubtful, as
all optimizations except front-end folding should be taking place after
all the declarations have been seen).
> The problem whose subset the diagnostic detects is declaring
> the function const and calling it before the pure declaration
> that corresponds to its definition is seen. I.e., the inverse
> of what the ssa-ccp-2.c test does. I think a mismatch between
> the attributes is as suspect as a mismatch in the function's
In the ssa-ccp-2.c case, it's not clear to me the test intends to use the
same function at all; maybe one of the foo9 functions should be renamed.
I think it's actually like having a non-prototype declaration and a
prototype one, where a composite type is formed from two compatible types.
(We have a warning in the very specific case of a non-prototype
*definition* followed by a prototype declaration.)
> In any event, it sounds to me that conceptually, it might be
> useful to be able to specify which of a pair of mutually
> exclusive (or redundant) attributes to retain and/or accept:
> the first or the second, and not just whether to accept or
> drop the most recent one. That will make it possible to make
> the most appropriate decision about each specific pair of
> attributes without impacting any of the others.
If they conflict, I'm not sure there's any basis for making a choice
specific to a particular pair of attributes.
In cases like const and pure where one is a subset of the other, it makes
sense to choose based on the pair of attributes - and not necessarily to
warn under the same conditions as the warnings for conflicting attributes.
Joseph S. Myers