On Jan 13, 2012, at 10:30 AM, Richard Guenther wrote:

> On Fri, Jan 13, 2012 at 12:09 AM, DJ Delorie <d...@redhat.com> wrote:
>> 
>> Another case where one address space may support multiple pointer
>> sizes, so conversions between such must be preserved.
>> 
>>        * tree-ssa.c (useless_type_conversion_p): Conversions between
>>        different-sized pointers aren't useless.
>> 
>> Index: tree-ssa.c
>> ===================================================================
>> --- tree-ssa.c  (revision 183139)
>> +++ tree-ssa.c  (working copy)
>> @@ -1192,12 +1192,17 @@ bool
>>  useless_type_conversion_p (tree outer_type, tree inner_type)
>>  {
>>   /* Do the following before stripping toplevel qualifiers.  */
>>   if (POINTER_TYPE_P (inner_type)
>>       && POINTER_TYPE_P (outer_type))
>>     {
>> +      /* Do not lose casts between pointers of different precision.  */
>> +      if (TYPE_PRECISION (outer_type)
>> +         != TYPE_PRECISION (inner_type))
>> +       return false;
>> +
>>       /* Do not lose casts between pointers to different address spaces.  */
>>       if (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
>>          != TYPE_ADDR_SPACE (TREE_TYPE (inner_type)))
>>        return false;
>> 
>>       /* If the outer type is (void *), the conversion is not necessary.  */
> 
> That should not be necessary as there is a mode check below.  Do you
> hit the issue only when the VOID_TYPE_P check is true?  In that case
> simply delete it - it has become obsolete.

We hit the same issue for VMS while compiling libada.  I just checked that 
removing the check fixes the crash.

Just for the record.

Tristan.

Reply via email to