http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50099
Greta Yorsh <Greta.Yorsh at arm dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |Greta.Yorsh at arm dot com --- Comment #5 from Greta Yorsh <Greta.Yorsh at arm dot com> 2011-08-19 18:03:48 UTC --- I can reproduce it with GCC 4.7 r177601 with -marm but not with -mthumb. Here a smaller test case that seems related. > cat tst2.c typedef signed char int8_t ; typedef signed short int16_t; typedef signed long int32_t; typedef signed long long int64_t; // doesn't ice if arg is unsigned // doesn't ice if return is int32_t instead of int64_t int64_t foo(int8_t * arg) { //int64_t temp_1; int64_t temp_1; temp_1 = arg[256]; // index must be > 255 to ice! return temp_1; } > arm-none-eabi-gcc -O1 tst2.c tst2.c: In function 'foo': tst2.c:15:1: error: unrecognizable insn: (insn 22 21 23 2 (set (subreg:SI (reg:DI 138 [ MEM[(int8_t *)arg_1(D) + 256B] ]) 0) (sign_extend:SI (mem:QI (plus:SI (reg:SI 0 r0 [ arg ]) (const_int 256 [0x100])) [0 MEM[(int8_t *)arg_1(D) + 256B]+0 S1 A8]))) tst2.c:13 -1 (nil)) tst2.c:15:1: internal compiler error: in extract_insn, at recog.c:2115 -- Greta