> Am 27.11.2025 um 04:58 schrieb Andrew Pinski <[email protected]>:
> 
> 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.

Ok

Richard 

> 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 <[email protected]>
> ---
> gcc/testsuite/c-c++-common/Wstringop-overflow.c | 4 ++--
> gcc/tree-ssa-reassoc.cc                         | 3 +++
> 2 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/gcc/testsuite/c-c++-common/Wstringop-overflow.c 
> b/gcc/testsuite/c-c++-common/Wstringop-overflow.c
> index 5757a23141e..9829fe14116 100644
> --- a/gcc/testsuite/c-c++-common/Wstringop-overflow.c
> +++ b/gcc/testsuite/c-c++-common/Wstringop-overflow.c
> @@ -90,8 +90,8 @@ void test_strncat (char **d, const char* s, int i)
>   }
> 
>   {
> -    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 *-*-* } } */
>   }
> }
> 
> diff --git a/gcc/tree-ssa-reassoc.cc b/gcc/tree-ssa-reassoc.cc
> index c140f76766e..6e220e02ecd 100644
> --- a/gcc/tree-ssa-reassoc.cc
> +++ b/gcc/tree-ssa-reassoc.cc
> @@ -5268,6 +5268,9 @@ rewrite_expr_tree (gimple *stmt, enum tree_code 
> rhs_code, unsigned int opindex,
> 
>       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)
>    {
> --
> 2.43.0
> 

Reply via email to