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