https://bugzilla.novell.com/show_bug.cgi?id=688008
https://bugzilla.novell.com/show_bug.cgi?id=688008#c0 Summary: Mono fails to run F# code involving native pointers that works on .NET Classification: Mono Product: Mono: Runtime Version: SVN Platform: All OS/Version: All Status: NEW Severity: Normal Priority: P5 - None Component: JIT AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- Created an attachment (id=425276) --> (http://bugzilla.novell.com/attachment.cgi?id=425276) A compiled version of the test program User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16 Mono rejects IL generated by the F# compiler for the following code involving a native pointer: let test (chars: char[]) = let handle = System.Runtime.InteropServices.GCHandle.Alloc(chars, System.Runtime.InteropServices.GCHandleType.Pinned) let cp = &&chars.[0] System.Console.WriteLine(new string(cp, 0, chars.Length)) handle.Free() test("test".ToCharArray()) The generated IL for the test functions is: method public static void test(char[] chars) cil managed { .maxstack 5 .locals init ( [0] valuetype [mscorlib]System.Runtime.InteropServices.GCHandle handle, [1] native int cp) L_0000: nop L_0001: ldarg.0 L_0002: ldc.i4.3 L_0003: call valuetype [mscorlib]System.Runtime.InteropServices.GCHandle [mscorlib]System.Runtime.InteropServices.GCHandle::Alloc(object, valuetype [mscorlib]System.Runtime.InteropServices.GCHandleType) L_0008: stloc.0 L_0009: ldarg.0 L_000a: ldc.i4.0 L_000b: ldelema char L_0010: stloc.1 L_0011: ldloc.1 L_0012: ldc.i4.0 L_0013: ldarg.0 L_0014: ldlen L_0015: conv.i4 L_0016: newobj instance void [mscorlib]System.String::.ctor(char*, int32, int32) L_001b: call void [mscorlib]System.Console::WriteLine(string) L_0020: ldloca.s handle L_0022: call instance void [mscorlib]System.Runtime.InteropServices.GCHandle::Free() L_0027: ret } Mono fails with: Unhandled Exception: System.InvalidProgramException: Invalid IL code in Test.Test:test (char[]): IL_0010: stloc.1 This code works fine on .NET. Using a signed native int for storing a pointer value is certainly an odd choice, but I'm not sure that the ECMA standard prohibits this. Reproducible: Always Steps to Reproduce: See details. Actual Results: See details. Expected Results: See details. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
