This was noticed in PR122843 were sometimes reassociation
would create the uncanonical order of operands. This fixes
the problem by swapping the order as the rewrite happens.
Wstringop-overflow.c needed to be xfailed since it started
not to warn because well the warning is too dependent on
the order of operands to MIN_EXPR. This testcase
failed if we had supplied -fno-tree-reassoc before too;
but nothing in the IR changes except the order of 2 operands
of MIN_EXPR. I filed PR 122881 for this xfail.
Bootstrapped and tested on x86_64-linux-gnu.
gcc/ChangeLog:
* tree-ssa-reassoc.cc (rewrite_expr_tree): Swap
oe1 and oe2 if commutative code and not in
canonical order.
gcc/testsuite/ChangeLog:
* c-c++-common/Wstringop-overflow.c: Xfail, PR 122881.
Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
}
{
- size_t n = i < strlen (s) ? i : strlen (s); /* { dg-message "length computed here" } */
- T (d, s, n); /* { dg-message ".strncat\[^\n\r\]* specified bound depends on the length of the source argument" } */
+ size_t n = i < strlen (s) ? i : strlen (s); /* { dg-message "length computed here" "PR122881" { xfail *-*-* } } */
+ T (d, s, n); /* { dg-message ".strncat\[^\n\r\]* specified bound depends on the length of the source argument" "PR122881" { xfail *-*-* } } */
}
}
oe1 = ops[opindex];
oe2 = ops[opindex + 1];
+ if (commutative_tree_code (rhs_code)
+ && tree_swap_operands_p (oe1->op, oe2->op))
+ std::swap (oe1, oe2);
if (rhs1 != oe1->op || rhs2 != oe2->op)
{