On Wed, Mar 12, 2025 at 9:43 AM H.J. Lu <hjl.to...@gmail.com> wrote:
>
> 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

Fixed with r15-7981 already.
https://gcc.gnu.org/pipermail/gcc-cvs/2025-March/418506.html
https://gcc.gnu.org/pipermail/gcc-patches/2025-March/677372.html

Thanks,
Andrew

>
> --
> H.J.

Reply via email to