[Patch, Fortran, OOP] PR 57305: ICE when calling SIZEOF on an unlimited polymorphic variable

Mikael Morin mikael.morin@sfr.fr
Mon Aug 26 13:55:00 GMT 2013


Le 26/08/2013 13:22, Janus Weil a écrit :
> Hi Mikael,
> 
>>> the SIZEOF intrinsic currently returns the size according to the
>>> *declared* type for polymorphic variables. I think this doesn't really
>>> make much sense and it also causes ICEs when SIZEOF is called on
>>> CLASS(*) variables (which don't really have a declared type).
>>> Therefore I'm proposing to make SIZEOF return the size according to
>>> the *dynamic* type instead. The same is done by STORAGE_SIZE (F08),
>>> which however gives the size in bits. SIZEOF is a GNU extension, so we
>>> are free to decide on its behavior. I don't remember why the declared
>>> type was chosen in the first place, and I hope that no one seriously
>>> depends on the current behavior (the size of the declared type is
>>> probably not really useful after all).
>>>
>> I'm slightly inclined to kindly invite the user to switch to
>> STORAGE_SIZE+SIZE instead.  Any other opinion?
> 
> Since the SIZEOF intrinsic has been around for some time in gfortran
> (before STORAGE_SIZE was available), I would say we should at least
> continue to support it for backward compatibility. And I guess we
> should also make it behave reasonably for all inputs. However, it
> might be worth to add a note in the documentation that STORAGE_SIZE
> and SIZE should be used instead in standard-conforming code.
> 
I thought about it again, and what I'm actually in favor of is
diagnosing by default _all_ extensions having a standard replacement.
That's an independant question, and not generating wrong code for SIZEOF
is certainly good in any case.

Mikael



More information about the Gcc-patches mailing list