It was presumably papering over the real problem and resulted in huge performance regressions for some loops.
Tested on x86-64/Linux, applied on mainline and 4.7 branch. 2012-09-07 Eric Botcazou <ebotca...@adacore.com> * gcc-interface/trans.c (Loop_Statement_to_gnu): Revert to using size_type_node instead of sizetype. -- Eric Botcazou
Index: gcc-interface/trans.c =================================================================== --- gcc-interface/trans.c (revision 190863) +++ gcc-interface/trans.c (working copy) @@ -2417,14 +2417,15 @@ Loop_Statement_to_gnu (Node_Id gnat_node /* Otherwise, use the do-while form with the help of a special induction variable in the unsigned version of the base type - or the unsigned version of sizetype, whichever is the + or the unsigned version of the size type, whichever is the largest, in order to have wrap-around arithmetics for it. */ else { - if (TYPE_PRECISION (gnu_base_type) > TYPE_PRECISION (sizetype)) + if (TYPE_PRECISION (gnu_base_type) + > TYPE_PRECISION (size_type_node)) gnu_base_type = gnat_unsigned_type (gnu_base_type); else - gnu_base_type = sizetype; + gnu_base_type = size_type_node; gnu_first = convert (gnu_base_type, gnu_first); gnu_last = convert (gnu_base_type, gnu_last);