X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-native-types.c;h=88efb61d67b9a587edd702b6c4f0741a10bc048c;hb=50e2ecc773eaa9b288261af85f6f2dafd09f4522;hp=9ce9be8a98c08ce51866bafee0324a087b8ee4c0;hpb=b8893efbccd64f92c81082e42b8e480b74881927;p=mono.git diff --git a/mono/mini/mini-native-types.c b/mono/mini/mini-native-types.c index 9ce9be8a98c..88efb61d67b 100644 --- a/mono/mini/mini-native-types.c +++ b/mono/mini/mini-native-types.c @@ -1,5 +1,6 @@ -/* - * magic-types.c: intrinsics for variable sized int/floats +/** + * \file + * intrinsics for variable sized int/floats * * Author: * Rodrigo Kumpera (kumpera@gmail.com) @@ -125,9 +126,6 @@ static const MagicTypeInfo type_info[] = { { 2, STACK_R8, STACK_R8, STACK_R8, OP_FCONV_TO_R8, OP_FCONV_TO_R4, OP_FMOVE, 0, 0, OP_PT_STORE_FP_MEMBASE_REG, 0 }, }; -static inline gboolean mono_class_is_magic_int (MonoClass *klass); -static inline gboolean mono_class_is_magic_float (MonoClass *klass); - static inline gboolean type_size (MonoCompile *cfg, MonoType *type) @@ -349,10 +347,15 @@ mono_class_is_magic_assembly (MonoClass *klass) return TRUE; if (!strcmp ("Xamarin.Mac", klass->image->assembly_name)) return TRUE; + if (!strcmp ("Xamarin.WatchOS", klass->image->assembly_name)) + return TRUE; + /* regression test suite */ + if (!strcmp ("builtin-types", klass->image->assembly_name)) + return TRUE; return FALSE; } -static inline gboolean +gboolean mono_class_is_magic_int (MonoClass *klass) { static MonoClass *magic_nint_class; @@ -385,7 +388,7 @@ mono_class_is_magic_int (MonoClass *klass) return FALSE; } -static inline gboolean +gboolean mono_class_is_magic_float (MonoClass *klass) { static MonoClass *magic_nfloat_class; @@ -404,6 +407,14 @@ mono_class_is_magic_float (MonoClass *klass) if (strcmp ("nfloat", klass->name) == 0) { magic_nfloat_class = klass; + + /* Assert that we are using the matching assembly */ + MonoClassField *value_field = mono_class_get_field_from_name (klass, "v"); + g_assert (value_field); + MonoType *t = mono_field_get_type (value_field); + MonoType *native = mini_native_type_replace_type (&klass->byval_arg); + if (t->type != native->type) + g_error ("Assembly used for native types '%s' doesn't match this runtime, %s is mapped to %s, expecting %s.\n", klass->image->name, klass->name, mono_type_full_name (t), mono_type_full_name (native)); return TRUE; } return FALSE;