diff --git a/mie/pass/pass-manager.c b/mie/pass/pass-manager.c index 15b21f0..3c038a3 100644 --- a/mie/pass/pass-manager.c +++ b/mie/pass/pass-manager.c @@ -204,16 +204,17 @@ static void schedule_passes( b_queue_push_back(schedule, &sched->s_entry); } - struct mie_walker *walker = mie_walker_begin(op, MIE_WALKER_F_INCLUDE_OPS); - while (mie_walker_step(walker) == MIE_SUCCESS) { + struct mie_walker walker; + mie_walker_begin(&walker, op, MIE_WALKER_F_INCLUDE_OPS); + do { for (size_t i = 0; i < MIE_VECTOR_COUNT(pm->pm_nested); i++) { struct mie_pass_manager *nested = pm->pm_nested.items[i]; - struct mie_walk_item *item = mie_walker_get(walker); + struct mie_walk_item *item = mie_walker_get(&walker); schedule_passes(nested, schedule, item->i_op, depth + 1); } - } + } while (mie_walker_step(&walker) == MIE_SUCCESS); - mie_walker_end(walker); + mie_walker_end(&walker); } static void sched_item_execute(