Author: lupus
Date: 2005-03-22 10:05:01 -0500 (Tue, 22 Mar 2005)
New Revision: 42109
Modified:
trunk/mono/mono/mini/ChangeLog
trunk/mono/mono/mini/mini.c
Log:
Tue Mar 22 16:28:48 CET 2005 Paolo Molaro <[EMAIL PROTECTED]>
* mini.c: fix tail recursion elimination (see test in bug#73936).
Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog 2005-03-22 13:50:05 UTC (rev 42108)
+++ trunk/mono/mono/mini/ChangeLog 2005-03-22 15:05:01 UTC (rev 42109)
@@ -1,3 +1,8 @@
+
+Tue Mar 22 16:28:48 CET 2005 Paolo Molaro <[EMAIL PROTECTED]>
+
+ * mini.c: fix tail recursion elimination (see test in bug#73936).
+
2005-03-21 Zoltan Varga <[EMAIL PROTECTED]>
* mini-amd64.c (mono_arch_output_basic_block): Add inline versions of
Modified: trunk/mono/mono/mini/mini.c
===================================================================
--- trunk/mono/mono/mini/mini.c 2005-03-22 13:50:05 UTC (rev 42108)
+++ trunk/mono/mono/mini/mini.c 2005-03-22 15:05:01 UTC (rev 42109)
@@ -4028,14 +4028,22 @@
link_bblock (cfg, bblock, tblock);
ins->inst_target_bb = tblock;
start_new_bblock = 1;
- ip += 5;
-
+
if (!MONO_TYPE_IS_VOID (fsig->ret)) {
/* just create a dummy - the
value is never used */
ins = mono_compile_create_var
(cfg, fsig->ret, OP_LOCAL);
NEW_TEMPLOAD (cfg, *sp,
ins->inst_c0);
sp++;
+ MONO_INST_NEW (cfg, ins,
CEE_POP);
+ MONO_ADD_INS (bblock, ins);
+ --sp;
+ ins->inst_i0 = *sp;
}
+ /* skip the CEE_RET, too */
+ if (ip_in_bb (cfg, bblock, ip + 5))
+ ip += 6;
+ else
+ ip += 5;
break;
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches