}
break;
}
- case CEE_BR:
- INLINE_FAILURE;
- handle_branch (td, MINT_BR_S, MINT_BR, 5 + read32 (td->ip + 1));
+ case CEE_BR: {
+ int offset = read32 (td->ip + 1);
+ if (offset) {
+ INLINE_FAILURE;
+ handle_branch (td, MINT_BR_S, MINT_BR, 5 + offset);
+ }
td->ip += 5;
break;
- case CEE_BR_S:
- INLINE_FAILURE;
- handle_branch (td, MINT_BR_S, MINT_BR, 2 + (gint8)td->ip [1]);
+ }
+ case CEE_BR_S: {
+ int offset = (gint8)td->ip [1];
+ if (offset) {
+ INLINE_FAILURE;
+ handle_branch (td, MINT_BR_S, MINT_BR, 2 + (gint8)td->ip [1]);
+ }
td->ip += 2;
break;
+ }
case CEE_BRFALSE:
INLINE_FAILURE;
one_arg_branch (td, MINT_BRFALSE_I4, 5 + read32 (td->ip + 1));
td->last_ins->data [0] = get_data_item_index (td, mono_interp_get_imethod (domain, m, error));
}
goto_if_nok (error, exit);
+ /* The constructor was not inlined, abort inlining of current method */
+ INLINE_FAILURE;
td->sp -= csignature->param_count;
if (mint_type (m_class_get_byval_arg (klass)) == MINT_TYPE_VT) {