[Bug libstdc++/78420] [6/7/8 Regression] std::less<T*> is not a total order with -O2 enabled
jason at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Mar 1 16:48:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78420
--- Comment #24 from Jason Merrill <jason at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #23)
> I'd fear about jump-threading vs. __builtin_constant_p issues like PR72785
> and others, were the optimizers break the __builtin_constant_p argument and
> the guarded expression apart and something different might be propagated
> into them or evaluated differently etc.
I really don't think that's a danger with this usage. 72785 is an abuse of
__builtin_constant_p to give wildly different values based on its result: if a
is 0, then if b is considered constant we get a NaN, and if it isn't we get 0.
The threading seen in 72785 could only help this usage, by finding more cases
where we don't need the conversion to uintptr_t.
About your other comment about the middle-end deciding to do unfriendly things
based on undefined behavior in the argument to __builtin_constant_p, the
comparison is not undefined, it's unspecified. I wouldn't expect any surprises
from the middle-end.
More information about the Gcc-bugs
mailing list