2010-02-10 Geoff Norton <gnorton@novell.com>
[mono.git] / mono / mini / method-to-ir.c
index 81fee9692e678d59a51b28439043e43d0e3fadb3..75ced4cf5b1f23a91b1435fae6eddf9092c276c4 100644 (file)
@@ -3116,13 +3116,6 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, int context
        int vtable_reg = alloc_preg (cfg);
        MonoInst *klass_inst = NULL;
 
-       NEW_BBLOCK (cfg, is_null_bb);
-
-       MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, obj_reg, 0);
-       MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb);
-
-       save_cast_details (cfg, klass, obj_reg);
-
        if (context_used) {
                MonoInst *args [2];
 
@@ -3145,6 +3138,13 @@ handle_castclass (MonoCompile *cfg, MonoClass *klass, MonoInst *src, int context
                }
        }
 
+       NEW_BBLOCK (cfg, is_null_bb);
+
+       MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, obj_reg, 0);
+       MONO_EMIT_NEW_BRANCH_BLOCK (cfg, OP_PBEQ, is_null_bb);
+
+       save_cast_details (cfg, klass, obj_reg);
+
        if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
                MONO_EMIT_NEW_LOAD_MEMBASE (cfg, vtable_reg, obj_reg, G_STRUCT_OFFSET (MonoObject, vtable));
                mini_emit_iface_cast (cfg, vtable_reg, klass, NULL, NULL);