SCRATCH has a single "0" field because reload used to turn it directly into a REG. It no longer does (or could do) that since REG has three fields rather than one. This patch therefore updates the comment and removes the field.
Tested on x86_64-linux-gnu. OK to install? Thanks, Richard gcc/ * rtl.def (scratch): Fix outdated comment and remove "0" field. * gengtype.c (adjust_field_rtx_def): Update accordingly. Index: gcc/rtl.def =================================================================== --- gcc/rtl.def 2014-05-10 21:13:03.383968475 +0100 +++ gcc/rtl.def 2014-05-10 21:13:06.240993266 +0100 @@ -384,11 +384,10 @@ DEF_RTL_EXPR(PC, "pc", "", RTX_OBJ) DEF_RTL_EXPR(REG, "reg", "i0", RTX_OBJ) /* A scratch register. This represents a register used only within a - single insn. It will be turned into a REG during register allocation + single insn. It will be replaced by a REG during register allocation or reload unless the constraint indicates that the register won't be - needed, in which case it can remain a SCRATCH. This code is - marked as having one operand so it can be turned into a REG. */ -DEF_RTL_EXPR(SCRATCH, "scratch", "0", RTX_OBJ) + needed, in which case it can remain a SCRATCH. */ +DEF_RTL_EXPR(SCRATCH, "scratch", "", RTX_OBJ) /* A reference to a part of another value. The first operand is the complete value and the second is the byte offset of the selected part. */ Index: gcc/gengtype.c =================================================================== --- gcc/gengtype.c 2014-05-10 21:13:03.381968458 +0100 +++ gcc/gengtype.c 2014-05-10 21:13:06.242993283 +0100 @@ -1249,8 +1249,6 @@ adjust_field_rtx_def (type_p t, options_ t = tree_tp, subname = "rt_tree"; else if (i == REG && aindex == 1) t = reg_attrs_tp, subname = "rt_reg"; - else if (i == SCRATCH && aindex == 0) - t = scalar_tp, subname = "rt_int"; else if (i == SYMBOL_REF && aindex == 1) t = scalar_tp, subname = "rt_int"; else if (i == SYMBOL_REF && aindex == 2)