http://gcc.gnu.org/viewcvs?view=revision&revision=186899
Applied as approved in
http://gcc.gnu.org/ml/gcc/2012-04/msg00843.html
Johann
PR c/51527
* convert.c (convert_to_integer): Avoid infinite recursion for
target-defined built-in types.
Index: convert.c
===================================================================
--- convert.c (revision 186872)
+++ convert.c (working copy)
@@ -769,6 +769,7 @@ convert_to_integer (tree type, tree expr
(Otherwise would recurse infinitely in convert. */
if (TYPE_PRECISION (typex) != inprec)
{
+ tree otypex = typex;
/* Don't do unsigned arithmetic where signed was wanted,
or vice versa.
Exception: if both of the original operands were
@@ -806,10 +807,12 @@ convert_to_integer (tree type, tree expr
typex = unsigned_type_for (typex);
else
typex = signed_type_for (typex);
- return convert (type,
- fold_build2 (ex_form, typex,
- convert (typex, arg0),
- convert (typex, arg1)));
+
+ if (TYPE_PRECISION (otypex) == TYPE_PRECISION (typex))
+ return convert (type,
+ fold_build2 (ex_form, typex,
+ convert (typex, arg0),
+ convert (typex, arg1)));
}
}
}