Hi, the following testcase illustrate problem with the offset. Sadly it ICEs even w/o LTO: evans:/abuild/jh/trunk-3/build-inst12/gcc/:[1]# ./xgcc -B ./ -O2 ~/tt.c /root/tt.c: In function 'main': /root/tt.c:24:11: warning: overflow in implicit constant conversion [-Woverflow] b.b=0xdead; ^ /root/tt.c:25:12: internal compiler error: in assign_stack_temp_for_type, at function.c:762 a=retframe_block (); ^ 0x7ae808 assign_stack_temp_for_type(machine_mode, long, tree_node*) ../../gcc/function.c:762
/* { dg-do run } */ extern void abort (void); int main (int argc, char **argv) { int size = 10; typedef struct { char val[size]; char b; } block; block a, b; block __attribute__((noinline)) retframe_block () { if (b.b != 0xdead) abort (); return *(block *) &b; } b.val[0] = 1; b.val[9] = 2; b.b=0xdead; a=retframe_block (); if (a.val[0] != 1 || a.val[9] != 2) abort (); return 0; } Honza