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)));
 		  }
 	      }
 	  }

Reply via email to