https://gcc.gnu.org/g:4b739c020a90dfe2569a292c44b2293a94d4bff5
commit r16-1640-g4b739c020a90dfe2569a292c44b2293a94d4bff5 Author: Lili Cui <lili....@intel.com> Date: Tue Jun 24 10:49:43 2025 +0800 Fix shrink wrap separate ICE for mingw [PR120741] gcc/ChangeLog: PR target/120741 * config/i386/i386.cc (ix86_expand_prologue): Remove 1 assertion. gcc/testsuite/ChangeLog: PR target/120741 * gcc.target/i386/pr120741.c: New test. * gcc.target/i386/shrink-wrap-separate-mingw.c: Likewise. Diff: --- gcc/config/i386/i386.cc | 2 -- gcc/testsuite/gcc.target/i386/pr120741.c | 22 ++++++++++++++++++++++ .../gcc.target/i386/shrink-wrap-separate-mingw.c | 22 ++++++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index fc3105919f45..84081ab12670 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -9443,8 +9443,6 @@ ix86_expand_prologue (void) } else { - gcc_assert (!crtl->shrink_wrapped_separate); - rtx eax = gen_rtx_REG (Pmode, AX_REG); rtx r10 = NULL; const bool sp_is_cfa_reg = (m->fs.cfa_reg == stack_pointer_rtx); diff --git a/gcc/testsuite/gcc.target/i386/pr120741.c b/gcc/testsuite/gcc.target/i386/pr120741.c new file mode 100644 index 000000000000..b59a58c48b89 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr120741.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mstack-arg-probe" } */ + +short __mingw_swformat_format; +__builtin_va_list __mingw_swformat_arg; +int __mingw_swformat_fc; +typedef struct { + void *fp; + int bch[1024]; +} _IFP; +void __mingw_swformat(_IFP *s) { + if (s->fp) + while (__mingw_swformat_format) + if (__mingw_swformat_fc == 'A') + *__builtin_va_arg(__mingw_swformat_arg, double *) = 0; +} +void +__mingw_vswscanf (void) +{ + _IFP ifp; + __mingw_swformat(&ifp); +} diff --git a/gcc/testsuite/gcc.target/i386/shrink-wrap-separate-mingw.c b/gcc/testsuite/gcc.target/i386/shrink-wrap-separate-mingw.c new file mode 100644 index 000000000000..58635e49647a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/shrink-wrap-separate-mingw.c @@ -0,0 +1,22 @@ +/* { dg-do compile { target *-*-mingw* *-*-cygwin* } } */ +/* { dg-options "-std=gnu99 -O2" } */ + +short __mingw_swformat_format; +__builtin_va_list __mingw_swformat_arg; +int __mingw_swformat_fc; +typedef struct { + void *fp; + int bch[1024]; +} _IFP; +void __mingw_swformat(_IFP *s) { + if (s->fp) + while (__mingw_swformat_format) + if (__mingw_swformat_fc == 'A') + *__builtin_va_arg(__mingw_swformat_arg, double *) = 0; +} +void +__mingw_vswscanf (void) +{ + _IFP ifp; + __mingw_swformat(&ifp); +}