fix optimizer bug that can attempt infinite unrolling of loops
This commit is contained in:
parent
2097e944b7
commit
84237c2cf3
|
@ -2489,6 +2489,7 @@ static Scheme_Object *apply_inlined(Scheme_Object *p, Scheme_Closure_Data *data,
|
|||
Scheme_Object *val;
|
||||
int i, expected;
|
||||
int *flags, flag;
|
||||
Optimize_Info *sub_info;
|
||||
|
||||
expected = data->num_params;
|
||||
|
||||
|
@ -2565,7 +2566,14 @@ static Scheme_Object *apply_inlined(Scheme_Object *p, Scheme_Closure_Data *data,
|
|||
else
|
||||
lh->body = p;
|
||||
|
||||
p = scheme_optimize_lets((Scheme_Object *)lh, info, 1, context);
|
||||
sub_info = scheme_optimize_info_add_frame(info, 0, 0, 0);
|
||||
sub_info->inline_fuel >>= 1;
|
||||
|
||||
p = scheme_optimize_lets((Scheme_Object *)lh, sub_info, 1, context);
|
||||
|
||||
info->single_result = sub_info->single_result;
|
||||
info->preserves_marks = sub_info->preserves_marks;
|
||||
scheme_optimize_info_done(sub_info);
|
||||
|
||||
if (le_prev) {
|
||||
*((Scheme_Object **)(((char *)le_prev) + prev_offset)) = p;
|
||||
|
|
|
@ -3281,9 +3281,6 @@ scheme_optimize_lets(Scheme_Object *form, Optimize_Info *info, int for_inline, i
|
|||
else
|
||||
rhs_info = body_info;
|
||||
|
||||
if (for_inline)
|
||||
body_info->inline_fuel >>= 1;
|
||||
|
||||
body = head->body;
|
||||
for (i = head->num_clauses; i--; ) {
|
||||
pre_body = (Scheme_Compiled_Let_Value *)body;
|
||||
|
|
Loading…
Reference in New Issue
Block a user