diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/calls.cc | 4 | ||||
-rw-r--r-- | gcc/expr.cc | 5 | ||||
-rw-r--r-- | 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 7c35b1a..01f44734 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 3396edf..502518d 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 0000000..5c84f29 --- /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; +} |