Hi, Currently, the macro STACK_BOUNDARY is defined as
Macro: STACK_BOUNDARY Define this macro to the minimum alignment enforced by hardware for the stack pointer on this machine. The definition is a C expression for the desired alignment (measured in bits). This value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not defined. On most machines, this should be the same as 'PARM_BOUNDARY'. with no mentions about its type and bounds. However, at some point, the value of this macro gets assigned to the field "regno_pointer_align" of "struct emit_status" which points to an "unsigned char", hence if STACK_BOUNDARY gets bigger than 255, it will overflow... Thankfully, the backend which defines the highest value is microblaze with 128 < 255. The assignment happens in "emit-rtl.c" through the REGNO_POINTER_ALIGN macro: in function.h: #define REGNO_POINTER_ALIGN(REGNO) (crtl->emit.regno_pointer_align[REGNO]) in emit-rtl.cc: REGNO_POINTER_ALIGN (STACK_POINTER_REGNUM) = STACK_BOUNDARY; [...] REGNO_POINTER_ALIGN (VIRTUAL_OUTGOING_ARGS_REGNUM) = STACK_BOUNDARY; Would it be possible to, either add an explicit bound to STACK_BOUNDARY in the manual, and/or use an "unsigned int *" rather than and "unsigned char *" for the field "regno_pointer_align". Thanks, Paul