On Tue, Mar 11, 2025 at 2:58 AM Richard Biener <rguent...@suse.de> wrote:
>
> The following makes sure to convert the folded expression to the
> original expression type.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, OK?
>
> Thanks,
> Richard.
>
>         PR middle-end/119204
>         * builtins.cc (fold_builtin_strcspn): Preserve the original
>         expression type.
>
>         * gcc.dg/pr119204.c: New testcase.
> ---
>  gcc/builtins.cc                 |  5 +++--
>  gcc/testsuite/gcc.dg/pr119204.c | 13 +++++++++++++
>  2 files changed, 16 insertions(+), 2 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.dg/pr119204.c
>
> diff --git a/gcc/builtins.cc b/gcc/builtins.cc
> index c8841032f03..02556e6615a 100644
> --- a/gcc/builtins.cc
> +++ b/gcc/builtins.cc
> @@ -11360,7 +11360,7 @@ fold_builtin_strcspn (location_t loc, tree expr, tree 
> s1, tree s2)
>      {
>        /* Evaluate and ignore argument s2 in case it has
>          side-effects.  */
> -      return omit_one_operand_loc (loc, size_type_node,
> +      return omit_one_operand_loc (loc, TREE_TYPE (expr),
>                                    size_zero_node, s2);
>      }
>
> @@ -11375,7 +11375,8 @@ fold_builtin_strcspn (location_t loc, tree expr, tree 
> s1, tree s2)
>        if (!fn)
>         return NULL_TREE;
>
> -      return build_call_expr_loc (loc, fn, 1, s1);
> +      return fold_convert_loc (loc, TREE_TYPE (expr),
> +                              build_call_expr_loc (loc, fn, 1, s1));
>      }
>    return NULL_TREE;
>  }
> diff --git a/gcc/testsuite/gcc.dg/pr119204.c b/gcc/testsuite/gcc.dg/pr119204.c
> new file mode 100644
> index 00000000000..ecbd8dd1c22
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr119204.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-options "-w" } */
> +
> +extern void abort(void);
> +extern long long strcspn(const char *, const char *);
> +
> +void main_test(void) {
> +  const char *const s1 = "hello world";
> +  char dst[64], *d2;
> +
> +  if (strcspn(++d2 + 5, "") != 5 || d2 != dst + 1)
> +    abort();
> +}
> --
> 2.43.0

This caused:

https://gcc.gnu.org/pipermail/gcc-regression/2025-March/081862.html

-- 
H.J.

Reply via email to