[Mono-bugs] [Bug 75847][Nor] New - [PATCH] Invalid IL generated for PtrToStructure internal call

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Fri Aug 19 08:14:10 EDT 2005

Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by jankit at novell.com.


--- shadow/75847	2005-08-19 08:14:10.000000000 -0400
+++ shadow/75847.tmp.9564	2005-08-19 08:14:10.000000000 -0400
@@ -0,0 +1,39 @@
+Bug#: 75847
+Product: Mono: Runtime
+Version: 1.1
+OS Details: 
+Status: NEW   
+Priority: Normal
+Component: interop
+AssignedTo: mono-bugs at ximian.com                            
+ReportedBy: jankit at novell.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+Summary: [PATCH] Invalid IL generated for PtrToStructure internal call
+System.Runtime.InteropServices.PtrToStructure has two overloads (icalls) :
+void PtrToStructure (IntPtr ptr, object structure);
+object PtrToStructure (IntPtr ptr, Type structureType);
+mono_marshal_get_ptr_to_struct (called from the ves_icall_*) generates IL
+code for PtrToStructure (IntPtr src, object structure) by looking up the
+signature for PtrToStructure using 'mono_class_get_method_from_name' which
+basically finds the first entry with that name and two params. It needs the
+overload with 'void' return type, which by ordering in Marshal.cs is
+defined first, so it is able to get the right one.
+But if the ordering is reversed, then it finds the other overload and thus
+crashes at runtime with :
+** ERROR **: Invalid IL code at IL000b in (wrapper unknown)
+CertificateContext:PtrToStructure (intptr,System.Type): IL_000b: ret
+The attached patch avoids the call to mono_class_get_method_from_name which
+(here) is being called purely to get the signature for the method
+(PtrToStructure) by building the MonoMethodSignature explicitly.

More information about the mono-bugs mailing list