From: Zoltan Varga Date: Sun, 30 Jan 2011 05:59:42 +0000 (+0100) Subject: Don't crash when inlining static methods called using callvirt. Fixes #668170. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=02a65349e180a4ae2bf5ab741447fa0a09dd5726;p=mono.git Don't crash when inlining static methods called using callvirt. Fixes #668170. --- diff --git a/mono/mini/method-to-ir.c b/mono/mini/method-to-ir.c index a1f305a518c..d2a081c14d6 100644 --- a/mono/mini/method-to-ir.c +++ b/mono/mini/method-to-ir.c @@ -4831,7 +4831,7 @@ inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, guint32 prev_cil_offset_to_bb_len; MonoMethod *prev_current_method; MonoGenericContext *prev_generic_context; - gboolean ret_var_set, prev_ret_var_set; + gboolean ret_var_set, prev_ret_var_set, virtual = FALSE; g_assert (cfg->exception_type == MONO_EXCEPTION_NONE); @@ -4878,7 +4878,6 @@ inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, rvar = mono_compile_create_var (cfg, fsig->ret, OP_LOCAL); } - prev_locals = cfg->locals; cfg->locals = mono_mempool_alloc0 (cfg->mempool, cheader->num_locals * sizeof (MonoInst*)); for (i = 0; i < cheader->num_locals; ++i) @@ -4909,7 +4908,10 @@ inline_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, prev_generic_context = cfg->generic_context; prev_ret_var_set = cfg->ret_var_set; - costs = mono_method_to_ir (cfg, cmethod, sbblock, ebblock, rvar, dont_inline, sp, real_offset, *ip == CEE_CALLVIRT); + if (*ip == CEE_CALLVIRT && !(cmethod->flags & METHOD_ATTRIBUTE_STATIC)) + virtual = TRUE; + + costs = mono_method_to_ir (cfg, cmethod, sbblock, ebblock, rvar, dont_inline, sp, real_offset, virtual); ret_var_set = cfg->ret_var_set;