On Fri, Apr 27, 2012 at 11:29 AM, Georg-Johann Lay <a...@gjlay.de> wrote:
> Richard Guenther wrote:
>> [PR c/51527]
>>
>> I think the fix would be sth like
>>
>> Index: gcc/convert.c
>> ===================================================================
>> --- gcc/convert.c       (revision 186871)
>> +++ gcc/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,11 @@ 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)));
>>                   }
>>               }
>>           }
>
> Thanks for the patch.
>
> I bootstrapped and regression-tested on i686-pc-linux-gnu.
>
> If it's ok with you I'd go ahead and install it.
>
> And maybe Peter could tell if it also fixes the issue on his platform.

It's not necessary on the trunk btw, but it's ok for the 4.7 branch.

Thanks,
Richard.

> Johann

Reply via email to