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.