Package: gcc-4.3 Version: 4.3.3-5 Hi,
r-base is failing to build on alpha with the following error: gcc -I. -I../../src/include -I../../src/include -DHAVE_CONFIG_H -mieee-with-inexact -fpic -std=gnu99 -O3 -pipe -g -c deriv.c -o deriv.o deriv.c: In function 'simplify': deriv.c:267: error: unrecognizable insn: (insn 2103 64 65 9 ../../src/include/Rinlinedfuns.h:86 (set (reg:DI 2 $2) (const:DI (plus:DI (label_ref:DI 68) (const_int 24 [0x18])))) -1 (insn_list:REG_LABEL_OPERAND 68 (nil))) deriv.c:267: internal compiler error: in extract_insn, at recog.c:2001 Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-4.3/README.Bugs> for instructions. make[4]: *** [deriv.o] Error 1 I've attached a reduced test case that gives a simular error message: $ gcc-4.3 -std=c99 -O3 -c deriv.i -o deriv.o deriv.i: In function 'D': deriv.i:117: error: unrecognizable insn: (insn 383 189 190 26 deriv.i:42 (set (reg:DI 2 $2) (const:DI (plus:DI (label_ref:DI 193) (const_int 24 [0x18])))) -1 (insn_list:REG_LABEL_OPERAND 193 (nil))) deriv.i:117: internal compiler error: in extract_insn, at recog.c:2001 Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-4.3/README.Bugs> for instructions. Note that the error goes away if you do not use -std=gnu99 or -std=c99, and -O3. It compiles with gcc-4.1 and 4.2. Kurt
typedef int R_len_t; typedef unsigned int SEXPTYPE; struct sxpinfo_struct { SEXPTYPE type : 5; }; struct vecsxp_struct { R_len_t length; R_len_t truelength; }; struct listsxp_struct { struct SEXPREC *carval; struct SEXPREC *cdrval; struct SEXPREC *tagval; }; typedef struct SEXPREC { struct sxpinfo_struct sxpinfo; union { struct listsxp_struct listsxp; } u; } SEXPREC, *SEXP; typedef struct VECTOR_SEXPREC { struct vecsxp_struct vecsxp; } VECTOR_SEXPREC, *VECSEXP; typedef union { VECTOR_SEXPREC s; double align; } SEXPREC_ALIGN; extern SEXP R_NilValue; extern SEXP R_MissingArg; int Rf_envlength(SEXP rho); SEXP Rf_protect(SEXP); const char * Rf_translateChar(SEXP); inline R_len_t Rf_length(SEXP s) { int i; switch (((s)->sxpinfo.type)) { case 0: return 0; case 24: return (((VECSEXP) (s))->vecsxp.length); case 6: case 17: i = 0; while (s != ((void *)0) && s != R_NilValue) { i++; s = ((s)->u.listsxp.cdrval); } return i; case 4: return Rf_envlength(s); default: return 1; } } inline SEXP Rf_lang3(SEXP s, SEXP t, SEXP u) { return s; } typedef SEXP (*CCODE)(SEXP, SEXP, SEXP, SEXP); static SEXP PlusSymbol; static SEXP MinusSymbol; static SEXP DivideSymbol; int isZero(SEXP s); SEXP PP(SEXP s); SEXP AddParens(SEXP expr); SEXP Rf_install(); static int isUminus(SEXP s) { if (((s)->sxpinfo.type) == 6 && ((s)->u.listsxp.carval) == MinusSymbol) { switch(Rf_length(s)) { case 2: return 1; case 3: if (((((((s)->u.listsxp.cdrval))->u.listsxp.cdrval))->u.listsxp.carval) == R_MissingArg) return 1; else return 0; } } else return 0; } static SEXP simplify(SEXP fun, SEXP arg1, SEXP arg2) { SEXP ans; if (fun == PlusSymbol) { if (isZero(arg1)) ans = arg2; else if (isUminus(arg1)) ans = simplify(MinusSymbol, arg2, ((((arg1)->u.listsxp.cdrval))->u.listsxp.carval)); else if (isUminus(arg2)) ans = simplify(MinusSymbol, arg1, ((((arg2)->u.listsxp.cdrval))->u.listsxp.carval)); } else if (fun == DivideSymbol) { ans = Rf_lang3(DivideSymbol, arg1, arg2); } return ans; } static SEXP D(SEXP expr, SEXP var) { return simplify(PlusSymbol, PP(D(((((expr)->u.listsxp.cdrval))->u.listsxp.carval), var)), PP(D(((((((expr)->u.listsxp.cdrval))->u.listsxp.cdrval))->u.listsxp.carval), var))); } SEXP __attribute__ ((visibility ("hidden"))) do_D(SEXP call, SEXP op, SEXP args, SEXP env) { SEXP expr, var; var = Rf_install(); expr = ((args)->u.listsxp.carval); Rf_protect(expr = D(expr, var)); expr = AddParens(expr); return expr; }