#include <stdint.h>
register long double F80 __asm__("st");
typedef void (*inst_t)(uint32_t *ip);
void exec_inst(uint32_t *ip) {
((inst_t) (uint64_t) ip[0])(ip);
}
int main() {
return 0;
}
At -O2 and above gcc generates:
register_long_double_ICE.c:3:1: warning: call-clobbered register used for
global register variable
register_long_double_ICE.c: In function exec_inst:
register_long_double_ICE.c:9:1: internal compiler error: in compensate_edge, at
reg-stack.c:2789
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.5/README.Bugs> for instructions.
--
Summary: register long double ICE at -O2, -Os, -O3
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: adam at consulting dot net dot nz
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45296