Re: [PATCH] Avoid ICE with m68k-elf -malign-int and libcalls
commitbdcf7226c9fe87352466eb9a6bfc58fa24b3e5e1
authorMikael Pettersson <mikpelinux@gmail.com>
Sun, 21 Jan 2024 22:55:49 +0000 (21 15:55 -0700)
committerJeff Law <jlaw@ventanamicro.com>
Sun, 21 Jan 2024 22:59:33 +0000 (21 15:59 -0700)
treed47f6bbcf0d654bbbdbf7ffacc61978b83240544
parent5efd98c6f818ce2c55f54c34008557d0a3f953aa
Re: [PATCH] Avoid ICE with m68k-elf -malign-int and libcalls

>> emit_library_call_value_1 calls emit_push_insn with NULL_TREE
>> for TYPE.  Sometimes emit_push_insn needs to assign a temp with
>> that TYPE, which causes a segfault.
>>
>> Fixed by computing the TYPE from MODE when needed.
>>
>> Original patch by Thorsten Otto.
>>
[ ... ]
> This really needs to happen in the two call paths which pass in
> NULL_TREE for the type.  Note how the type is used to determine padding
> earlier in emit_push_insn.  That would also make the code more
> consistent with the comment before emit_push_insn which implies that
> both MODE and TYPE are valid.
>
>
> Additionally you should bootstrap and regression test this patch on at
> least one target.

Updated as requested, and bootstrapped and tested on
{x86_64,aarch64,m68k}-linux-gnu without regressions.

gcc/

PR target/82420
PR target/111279
* calls.cc (emit_library_call_value_1): Pass valid TYPE
to emit_push_insn.
* expr.cc (emit_push_insn): Likewise.

gcc/testsuite/

PR target/82420
* gcc.target/m68k/pr82420.c: New test.

Co-authored-by: Thorsten Otto <admin@tho-otto.de>
gcc/calls.cc
gcc/expr.cc
gcc/testsuite/gcc.target/m68k/pr82420.c [new file with mode: 0644]