projects
/
mono.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
08cdfb5
)
Don't crash when inlining static methods called using callvirt. Fixes #668170.
author
Zoltan Varga
<vargaz@gmail.com>
Sun, 30 Jan 2011 05:59:42 +0000
(06:59 +0100)
committer
Zoltan Varga
<vargaz@gmail.com>
Sun, 30 Jan 2011 05:59:42 +0000
(06:59 +0100)
mono/mini/method-to-ir.c
patch
|
blob
|
history
diff --git
a/mono/mini/method-to-ir.c
b/mono/mini/method-to-ir.c
index a1f305a518c0b70c370b8b457739d062a8300f84..d2a081c14d65afcccb1e14b21ff26909b9485d87 100644
(file)
--- 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;
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);
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);
}
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)
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;
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;
ret_var_set = cfg->ret_var_set;