On Wed, Jun 4, 2025 at 7:28 AM H.J. Lu <hjl.to...@gmail.com> wrote: > > On s390x, for input: > > (call_insn/u 7 6 11 2 (parallel [ > (set (reg:SI 2 %r2) > (call (subreg:QI (symbol_ref:SI ("__tls_get_offset") > [flags 0x1]) 3) > (const_int 0 [0]))) > (clobber (reg:SI 14 %r14)) > (use (unspec:SI [ > (const_int 0 [0]) > ] UNSPEC_TLSLDM)) > ]) "/tmp/foo.c":12:26 2602 {*brasl_tls} > (expr_list:REG_EH_REGION (const_int -2147483648 [0xffffffff80000000]) > (nil)) > (expr_list (use (reg:SI 2 %r2)) > (expr_list (use (reg:SI 12 %r12)) > (nil)))) > > after r16-1041-g2da641d0170090, get_call_rtx_from returns: > > (call (subreg:QI (symbol_ref:SI ("__tls_get_offset") [flags 0x1]) 3) > (const_int 0 [0]))
That's a strange call! > and we got > > Program received signal SIGSEGV, Segmentation fault. > 0x000000000131174f in prepare_call_arguments ( > bb=<basic_block 0x7fffe99dfba0 (2)>, insn=0x7fffe980cc60) > at /export/gnu/import/git/sources/gcc/gcc/var-tracking.cc:6277 > 6277 fndecl = MEM_EXPR (XEXP (call, 0)); > (gdb) bt > bb=<basic_block 0x7fffe99dfba0 (2)>, insn=0x7fffe980cc60) > at /export/gnu/import/git/sources/gcc/gcc/var-tracking.cc:6277 > at /export/gnu/import/git/sources/gcc/gcc/var-tracking.cc:10297 > at /export/gnu/import/git/sources/gcc/gcc/var-tracking.cc:10526 > at /export/gnu/import/git/sources/gcc/gcc/var-tracking.cc:10579 > at /export/gnu/import/git/sources/gcc/gcc/var-tracking.cc:10616 > > Update prepare_call_arguments to check MEM_P before using MEM_EXPR. OK. Richard. > gcc/ > > PR debug/120525 > * var-tracking.cc (prepare_call_arguments): Use MEM_EXPR only > if MEM_P is true. > > gcc/testsuite/ > > PR debug/120525 > * gcc.dg/pr120525.c: New test. > > > -- > H.J.