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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 37103
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37103&action=edit
gcc6-pr67376.patch

Untested fix.  The problem is that while fold_binary_loc attempts to
canonicalize the order of arguments, in this case neither argument is a
constant that would be forced into the second argument, so we need to check
both variants, because EQ_EXPR/NE_EXPR is commutative.

Another possibility is to move this folding to match.pd instead, but dunno if
that would be still appropriate for stage3.

There are still other cases that aren't folded:
static_assert (a.e + 1 > a.e, "");
static_assert (a.e < a.e + 1, "");
static_assert (a.e + 2 > a.e, "");
static_assert (a.e < a.e + 2, "");

static_assert (a.e != 0, "");
static_assert (a.e + 1 != 0, "");
static_assert (a.e + 2 != 0, "");

(only the a.e != 0 case is folded).

Reply via email to