diff options
author | Aleksey Kliger <aleksey@xamarin.com> | 2017-07-27 02:37:20 +0300 |
---|---|---|
committer | Aleksey Kliger <aleksey@xamarin.com> | 2017-07-28 01:07:27 +0300 |
commit | 287f4303f3b789431d2da5b5570e97d7db770567 (patch) | |
tree | 2667240a9005d79aa6d83f342cd940e9677c614a | |
parent | 48d6bff3ae99830416693a737ac219b2fc8cfbb3 (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.c | 8 |
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; |