X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-native-types.c;h=3f0540ff5fe527eeb7de9fe776ef5554110f5ae1;hb=HEAD;hp=5d66853ece98745dcfe334f57c49d357517159d9;hpb=f5e911b6b70b725f038d2d396751dac03163859d;p=mono.git diff --git a/mono/mini/mini-native-types.c b/mono/mini/mini-native-types.c index 5d66853ece9..3f0540ff5fe 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) @@ -351,10 +349,15 @@ mono_class_is_magic_assembly (MonoClass *klass) 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; + if (!strcmp ("mini_tests", klass->image->assembly_name)) + return TRUE; return FALSE; } -static inline gboolean +gboolean mono_class_is_magic_int (MonoClass *klass) { static MonoClass *magic_nint_class; @@ -387,7 +390,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; @@ -406,6 +409,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;