public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-8324] Re: [PATCH] Avoid ICE with m68k-elf -malign-int and libcalls
@ 2024-01-21 22:59 Jeff Law
  0 siblings, 0 replies; only message in thread
From: Jeff Law @ 2024-01-21 22:59 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:bdcf7226c9fe87352466eb9a6bfc58fa24b3e5e1

commit r14-8324-gbdcf7226c9fe87352466eb9a6bfc58fa24b3e5e1
Author: Mikael Pettersson <mikpelinux@gmail.com>
Date:   Sun Jan 21 15:55:49 2024 -0700

    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>

Diff:
---
 gcc/calls.cc                            | 4 ++--
 gcc/expr.cc                             | 5 +++--
 gcc/testsuite/gcc.target/m68k/pr82420.c | 9 +++++++++
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/gcc/calls.cc b/gcc/calls.cc
index 7c35b1ad204..01f44734743 100644
--- a/gcc/calls.cc
+++ b/gcc/calls.cc
@@ -4580,8 +4580,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
 		}
 	    }
 
-	  emit_push_insn (val, mode, NULL_TREE, NULL_RTX, parm_align,
-			  partial, reg, 0, argblock,
+	  emit_push_insn (val, mode, lang_hooks.types.type_for_mode (mode, 0),
+			  NULL_RTX, parm_align, partial, reg, 0, argblock,
 			  (gen_int_mode
 			   (argvec[argnum].locate.offset.constant, Pmode)),
 			  reg_parm_stack_space,
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 3396edff1c9..502518d69c5 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -5532,11 +5532,12 @@ emit_push_insn (rtx x, machine_mode mode, tree type, rtx size,
       /* Loop over all the words allocated on the stack for this arg.  */
       /* We can do it by words, because any scalar bigger than a word
 	 has a size a multiple of a word.  */
+      tree word_mode_type = lang_hooks.types.type_for_mode (word_mode, 1);
       for (i = num_words - 1; i >= not_stack; i--)
 	if (i >= not_stack + offset)
 	  if (!emit_push_insn (operand_subword_force (x, i, mode),
-			  word_mode, NULL_TREE, NULL_RTX, align, 0, NULL_RTX,
-			  0, args_addr,
+			  word_mode, word_mode_type, NULL_RTX, align, 0,
+			  NULL_RTX, 0, args_addr,
 			  GEN_INT (args_offset + ((i - not_stack + skip)
 						  * UNITS_PER_WORD)),
 			  reg_parm_stack_space, alignment_pad, sibcall_p))
diff --git a/gcc/testsuite/gcc.target/m68k/pr82420.c b/gcc/testsuite/gcc.target/m68k/pr82420.c
new file mode 100644
index 00000000000..5c84f292103
--- /dev/null
+++ b/gcc/testsuite/gcc.target/m68k/pr82420.c
@@ -0,0 +1,9 @@
+/* { do-do compile } */
+/* { dg-options "-march=68000 -malign-int" } */
+
+int a;
+
+void f(void)
+{
+    a /= 3;
+}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-01-21 22:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-21 22:59 [gcc r14-8324] Re: [PATCH] Avoid ICE with m68k-elf -malign-int and libcalls Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).