be5cae4b16
git-svn-id: https://svn.disconnected-by-peer.at/svn/linamh/trunk/linamh@1476 6952d904-891a-0410-993b-d76249ca496b
32 lines
1.5 KiB
Diff
32 lines
1.5 KiB
Diff
# http://gna.org/bugs/?12900
|
|
# https://bugzilla.novell.com/show_bug.cgi?id=469213
|
|
# http://bugs.gentoo.org/show_bug.cgi?id=256153
|
|
|
|
Index: mono/mono/mini/method-to-ir.c
|
|
===================================================================
|
|
--- mono/mono/mini/method-to-ir.c (revision 123986)
|
|
+++ mono/mono/mini/method-to-ir.c (revision 123987)
|
|
@@ -5839,7 +5839,21 @@
|
|
cmethod = (MonoMethod *)mono_method_get_wrapper_data (method, token);
|
|
cil_method = cmethod;
|
|
} else if (constrained_call) {
|
|
- cmethod = mono_get_method_constrained (image, token, constrained_call, generic_context, &cil_method);
|
|
+ if ((constrained_call->byval_arg.type == MONO_TYPE_VAR || constrained_call->byval_arg.type == MONO_TYPE_MVAR) && cfg->generic_sharing_context) {
|
|
+ /* This is needed when using aot + generic sharing, since
|
|
+ * the AOT code allows generic sharing for methods with
|
|
+ * type parameters having constraints, and
|
|
+ * get_method_constrained can't find the method in klass
|
|
+ * representing a type var.
|
|
+ * The type var is guaranteed to be a reference type in this
|
|
+ * case.
|
|
+ */
|
|
+ cmethod = mini_get_method (cfg, method, token, NULL, generic_context);
|
|
+ cil_method = cmethod;
|
|
+ g_assert (!cmethod->klass->valuetype);
|
|
+ } else {
|
|
+ cmethod = mono_get_method_constrained (image, token, constrained_call, generic_context, &cil_method);
|
|
+ }
|
|
} else {
|
|
cmethod = mini_get_method (cfg, method, token, NULL, generic_context);
|
|
cil_method = cmethod;
|