Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kliger <aleksey@xamarin.com>2017-07-27 02:37:20 +0300
committerAleksey Kliger <aleksey@xamarin.com>2017-07-28 01:07:27 +0300
commit287f4303f3b789431d2da5b5570e97d7db770567 (patch)
tree2667240a9005d79aa6d83f342cd940e9677c614a
parent48d6bff3ae99830416693a737ac219b2fc8cfbb3 (diff)
[sre] Handle typeref tokens in fixup_method (Fixes #58421)
This may occur if there are two AssemblyBuilders in progress and one of them refers to a TypeBuilder from the other. https://bugzilla.xamarin.com/show_bug.cgi?id=58421
-rw-r--r--mono/metadata/sre-save.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/mono/metadata/sre-save.c b/mono/metadata/sre-save.c
index d36381357ca..5d26024218b 100644
--- a/mono/metadata/sre-save.c
+++ b/mono/metadata/sre-save.c
@@ -1759,6 +1759,14 @@ fixup_method (MonoReflectionILGen *ilgen, gpointer value, MonoDynamicImage *asse
g_assert_not_reached ();
}
break;
+ case MONO_TABLE_TYPEREF:
+ g_assert (!strcmp (iltoken->member->vtable->klass->name, "RuntimeType"));
+ MonoClass *k = mono_class_from_mono_type (((MonoReflectionType*)iltoken->member)->type);
+ MonoObject *obj = mono_class_get_ref_info_raw (k); /* FIXME use handles */
+ g_assert (obj);
+ g_assert (!strcmp (mono_object_class (obj)->name, "TypeBuilder"));
+ g_assert (((MonoReflectionTypeBuilder*)obj)->module->dynamic_image != assembly);
+ continue;
case MONO_TABLE_MEMBERREF:
if (!strcmp (iltoken->member->vtable->klass->name, "MonoArrayMethod")) {
am = (MonoReflectionArrayMethod*)iltoken->member;