------- Comment #11 from jakub at gcc dot gnu dot org 2010-04-19 07:02 ------- This change broke building wine on x86-64. Distilled testcase: __attribute__ ((ms_abi)) fn2 (int, int); struct S { int s; }; struct T { int t; struct S *u; };
void foo (struct T *x, void *y) { int a, b, c, d; fn1 (0, &a, &b, &c, &d); x->u[x->t].s = fn2 (fn3 (), a); fn1 (y, &a, &b, &c, &d); } __attribute__ ((ms_abi)) void bar (int x) { } void baz (int x) { } now ICEs at -O2 on x86_64-linux with: wineice.i: In function 'foo': wineice.i:12: internal compiler error: in insert_save, at caller-save.c:1171 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. Apparently setup_save_areas saved_reg->slot = assign_stack_local_1 (regno_save_mode[regno][1], GET_MODE_SIZE (regno_save_mode[regno][1]), 0, true); creates a slot where regno_save_mode[regno][1] for regno 4 is VOIDmode, and the VOIDmode MEM which has MEM_ALIGN 0 then confuses everything. -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |UNCONFIRMED Resolution|FIXED | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43562