Re: [PATCH] Fortran: Fix PR125761 Wrong code: array section of an unlimited-polymorphic CHARACTER array

Jerry D <[email protected]> Wed, 24 Jun 2026 10:07:58 -0700
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
On 6/24/26 2:57 AM, Mikael Morin wrote:
> Hello,
> 
> Le 23/06/2026 à 23:24, Jerry D a écrit :
>> diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc
>> index adf392cec6f..c10484ff636 100644
>> --- a/gcc/fortran/trans.cc
>> +++ b/gcc/fortran/trans.cc
>> @@ -524,8 +524,13 @@ gfc_build_array_ref (tree base, tree offset, tree decl,
>>        span = gfc_vptr_size_get (vptr);
>>
>>        /* Check if this is an unlimited polymorphic object carrying a character
>> -     payload. In this case, the 'len' field is non-zero.  */
>> -      if (decl && GFC_CLASS_TYPE_P (TREE_TYPE (decl)))
>> +     payload. In this case, the 'len' field is non-zero.  The class
>> +     container type does not always carry GFC_CLASS_TYPE_P, but its
>> +     canonical type does.  */
>> +      if (decl
>> +      && (GFC_CLASS_TYPE_P (TREE_TYPE (decl))
>> +          || (TYPE_CANONICAL (TREE_TYPE (decl))
>> +          && GFC_CLASS_TYPE_P (TYPE_CANONICAL (TREE_TYPE (decl))))))
>>      span = gfc_resize_class_size_with_len (NULL, decl, span);
>>      }
>>    else if (decl)
> this hunk isn't needed any more, I think, or is it?  It was the very purpose of 
> the GFC_CLASS_TYPE_P business to drop this change.
> 
> Otherwise OK.
> 
> Thanks.
> 
> 

Thanks for catching that, I was focused on other work and forgot to delete it.

It is removed and all of the gfortran.dg passes. I am rebasing on the remote 
master and doing a complete rebuild and rerun for regressions. If all passes, I 
will push to mainline.

Thanks for you reviews and feedback.

Best regards,

Jerry