https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78568

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |jsm28 at gcc dot gnu.org,
                   |                            |mpolacek at gcc dot gnu.org

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
For C++ this regressed as expected with r230365 - in both cases delayed
folding.
Without delayed folding, e.g. (val16 & 0xffffffff) is folded into (unsigned
int) val16 by the time shorten_compare is called and that is the routine that
performs the warning.
Do we perform similar optimizations that shorten_compare does already in
match.pd or gimple-fold.c?
Would there be a better place to move the warning to (like in c_genericize or
so)?
Or, if we want to warn in shorten_compare, should it be done twice, once on the
unfolded values and then on folded values just for comparison purposes?
Conceptually, shorten_compare (except for the part where it computes the common
type for the comparison) is an optimization, kind of folding, so for delayed
folding should not be done early.  But if e.g. constexpr evaluation or
__builtin_constant_p etc. relies on it, it should conceptually be done at
c_fully_fold time.  Though, I think the warning needs to be done before we
shorten the compare and c_fully_fold shouldn't be performing warnings (because
it can be called multiple times, e.g. when trying to fold something for other
warnings).
Thoughts on this?

Reply via email to