[interp] fix stack overflow on tail recursion
authorBernhard Urban <bernhard.urban@xamarin.com>
Tue, 4 Apr 2017 09:16:27 +0000 (11:16 +0200)
committerBernhard Urban <bernhard.urban@xamarin.com>
Wed, 5 Apr 2017 18:41:05 +0000 (20:41 +0200)
mono/mini/interp/transform.c

index 8c2ac6f0a50b28a98bd9def44274a731f8eae1ad..e23969c79d15ee4c92d496d666289f52f8760836 100644 (file)
@@ -811,8 +811,9 @@ interp_transform_call (TransformData *td, MonoMethod *method, MonoMethod *target
                        int offset;
                        if (mono_interp_traceopt)
                                g_print ("Optimize tail call of %s.%s\n", target_method->klass->name, target_method->name);
-                       for (i = csignature->param_count - 1; i >= 0; --i)
-                               store_arg (td, i + csignature->hasthis);
+
+                       for (i = csignature->param_count - 1 + !!csignature->hasthis; i >= 0; --i)
+                               store_arg (td, i);
 
                        ADD_CODE(td, MINT_BR_S);
                        offset = body_start_offset - ((td->new_ip - 1) - td->new_code);