I am doing a port for a 32bit target in GCC 4.4.0
I am getting segmentation fault in the function assign_temp in the
following line:

if (DECL_P (type_or_decl))

After analyzing the issue i find that this might be a bug. I just want
to confirm if that is the case or not.
In order to reproduce i think the target should have the following properties
a. Only 2 32bit registers available as argument registers.
b. Second 64bit value will be pushed in stack
c. ACCUMULATE_OUTGOING_ARGS is set
d. STRICT_ALIGNMENT is set
e. PARM_BOUNDARY is 32

When there is a library call for an operation that takes two 64bit
arguments, say division of two long long values - _divdi3, the
following sequence happens
emit_library_call_value -> emit_library_call_value_1 ->
emit_push_insn->assign_temp

emit_push_insn is called because the second argument is pushed on the
stack and ACCUMULATE_OUTGOING_ARGS is set.
assign_temp is called because  STRICT_ALIGNMENT && PARM_BOUNDARY <
GET_MODE_ALIGNMENT (DImode) is true


Can somebody please confirm whether this is due to some mistake in my
port or a GCC bug?

Thanks,
Shafi

Reply via email to