[Mono-bugs] [Bug 80969][Nor] Changed - [PATCH] Generics multidimensional arrays problem
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Mon Apr 23 10:13:18 EDT 2007
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 martin at ximian.com.
http://bugzilla.ximian.com/show_bug.cgi?id=80969
--- shadow/80969 2007-04-23 09:28:25.000000000 -0400
+++ shadow/80969.tmp.24126 2007-04-23 10:13:18.000000000 -0400
@@ -83,6 +83,47 @@
Attached potential patch. It's fixes this bug and it's duplicate. It
is overly agressive in that it doesn't cache multidimensional array
methods when in the presence of a generic context, even if the context
has nothing to do with the array type. But, I ran some performance
tests and it didn't seem to have much effect. This is very simple but
perhaps incorrect if I am missing something.
+
+------- Additional Comments From martin at ximian.com 2007-04-23 10:13 -------
+I don't think this patch is complete as it doesn't cover all the
+possible cases.
+
+Key problem is this:
+
+======
+ .method /*06000002*/ public hidebysig instance void
+ Test() cil managed
+ {
+ // Code size 20 (0x14)
+ .maxstack 7
+ .locals /*11000001*/ init (!T[,] V_0)
+ IL_0000: ldc.i4.0
+ IL_0001: ldc.i4.0
+ IL_0002: newobj instance void !T[,]/*1B000001*/::.ctor(int32,
+ int32)
+/* 0A000002 */
+ IL_0007: stloc.0
+ IL_0008: ldloc.0
+ IL_0009: callvirt instance class
+[mscorlib/*23000001*/]System.Type/*01000002*/
+[mscorlib/*23000001*/]System.Object/*01000001*/::GetType() /* 0A000003 */
+ IL_000e: call void
+[mscorlib/*23000001*/]System.Console/*01000003*/::WriteLine(object) /*
+0A000004 */
+ IL_0013: ret
+ } // end of method C`1::Test
+=====
+
+Look at IL_0002: here mono_get_method_full() is called to decode a
+MemberRef 0A000003.
+
+This MemberRef has a MONO_MEMBERREF_PARENT_TYPESPEC pointing to the
+generic class T[,]. However, this class is fully inflated in
+method_from_memberref() to System.String[,] so we search the method in
+that class and thus it's not inflated.
+
+So I think for a correct fix, we need to check whether we actually
+used the context or not.
More information about the mono-bugs
mailing list