[Mono-dev] Why is UnmanagedType_80 required?
Raja R Harinath
rharinath at novell.com
Wed Aug 31 06:24:04 EDT 2005
Raja R Harinath <rharinath at novell.com> writes:
> Raja R Harinath <rharinath at novell.com> writes:
>> Kornél Pál <kornelpal at hotmail.com> writes:
>>>>> According to my experiences using no ArraySubType has the same result as
>>>>> ArraySubType = (UnmanagedType)80 on mcs and csc.exe as well.
>>>>> Could someone tell me please why UnmanagedType_80 is required?
>>>>There was a bug in ancient versions of mcs wrt. constant folding in
>>>>attribute arguments. We needed to declare an explicit enumeration
>>>>constant, and use that instead.
>>> I think in this case we could simply eliminate UnmanagedType_80 in favour of
>>> using no ArraySubType as I think we support those ancient versions no more.
>>>>The actual reason for using '(UnmanagetType) 80': probably corcompare.
>>> Using no ArraySubType and using ArraySubType = (UnmanagedType)80 results in
>>> the same binary file.
>> I don't think so. It will be emitted in the MarshalAsAttribute metadata.
> Hmm... I spoke too soon. It's a pseudo-attribute. With no
> ArraySubType specified, the current mcs compiler code seems to set the
> element type of the LParray marshaller to 'int' (I4). ArraySubType set
> to '80' i.e. MAX, specifies to the marshaller that there's "no info"
> about the element type.
> Either way, I think there should be a difference in the metadata.
(Sorry for following up to myself so much :-)
It turns out that this behaviour could be a bug in our compiler. CSC
and Mono's SRE appear to behave as you say -- not specifying
ArraySubType acts the same as specifying (UnmanagedType)80.
More information about the Mono-devel-list