[Mono-bugs] [Bug 389073] New: Bad IntPtr typecast

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Fri May 9 21:25:26 EDT 2008


https://bugzilla.novell.com/show_bug.cgi?id=389073


           Summary: Bad IntPtr typecast
           Product: Mono: Compilers
           Version: SVN
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: C#
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: spouliot at novell.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---


gmcs compile this code
        private long CastUIntPtrToInt64 (UIntPtr ptr)
        {
                return (long) ptr;
        }
into this
        IL_0000: ldarg.1 
        IL_0001: call System.UInt32 System.UIntPtr::op_Explicit(System.UIntPtr)
        IL_0006: conv.u8 
        IL_0007: ret 
Converting to U8 (why not I8 ?) won't give back the 32bits lost, which is a
problem on all 64bits platforms.

MS csc generates this
        L_0000: ldarg.1 
        L_0001: call uint64 [mscorlib]System.UIntPtr::op_Explicit(native
unsigned int)
        L_0006: ret 


Another case (not as bad) is:

System.UInt32 CastIntPtrToUInt32(System.IntPtr)
mcs:
        IL_0000: ldarg.1 
        IL_0001: call System.Int64 System.IntPtr::op_Explicit(System.IntPtr)
        IL_0006: conv.u4 
        IL_0007: ret 
csc
        L_0000: ldarg.1 
        L_0001: call int32 [mscorlib]System.IntPtr::op_Explicit(native int)
        L_0006: ret 


There could be other cases too... they just did not trigger my new rule :-)


-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the mono-bugs mailing list