[Patch, Fortran, OOP] PR 57306: ICE on valid with class pointer initialization

Tobias Burnus burnus@net-b.de
Sun Aug 4 21:13:00 GMT 2013


Janus Weil wrote:
> ping!

Sorry, I currently have only a shaky internet connection and also no 
access to my development system.

Looking at gfc_class_initializer, I have the impression that it does not 
handle initialization of unlimited polymorphic variables/components. I 
don't know whether initialization is permitted, but my feeling is that 
the following should work:

type t
   class(*), pointer :: x
end type t
type(t), target :: y
integer,target :: z
type(t) :: x = t(y)
type(t) :: x = t(z)
class(*), pointer :: a => y

And I have the feeling that it is not correctly treated - but I might be 
wrong. (Note to the example above: I believe "t(y)" is a valid structure 
constructor, which is not yet supported. But again, I might be wrong 
about either.)


Regarding the example: Does it now work when the target and the pointer 
are in the same scoping unit? Or does one still need to place the 
targets into the module?

> 2013/7/30 Janus Weil <janus@gcc.gnu.org>:
>>> The attached update fixes it, and thus should hopefully be
>>> regression-free. It also renames 'gfc_class_null_initializer' to
>>> 'gfc_class_initializer', since it now also does other initializations
>>> beside EXPR_NULL.
>>>
>>> Will do another regtest to make sure it's clean.
>> No failures observed. As a test case I'm using now Tobias' extended
>> version (attached). New ChangeLog below.

Well, the test case does not check whether it works. You either need to 
check the dump - or you need to use dg-do run.

Tobias

>>
>> 2013-07-30  Janus Weil  <janus@gcc.gnu.org>
>>
>>      PR fortran/57306
>>      * class.c (gfc_class_null_initializer): Rename to
>>      'gfc_class_initializer'. Treat non-NULL init-exprs.
>>      * gfortran.h (gfc_class_null_initializer): Update prototype.
>>      * trans-decl.c (gfc_get_symbol_decl): Treat class pointers.
>>      * trans-expr.c (gfc_conv_initializer): Ditto.
>>      (gfc_trans_subcomponent_assign): Renamed gfc_class_null_initializer.
>>
>> 2013-07-30  Janus Weil  <janus@gcc.gnu.org>
>>
>>      PR fortran/57306
>>      * gfortran.dg/pointer_init_8.f90: New.



More information about the Gcc-patches mailing list