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.


>> The patch was regtested on x86_64-unknown-linux-gnu. Ok for trunk?
>>
> Independently of the above, the patch seems to be forgetting the
> arg->rank != 0 case.

Right. Also I just noticed that STORAGE_SIZE does not seem to behave
correctly for class-array arguments, either ...

Cheers,
Janus

Reply via email to