From be70a2ec03cd02db0c03cbfb95f49f3b568aa2be Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Tue, 15 Nov 2022 14:36:52 +0100 Subject: [PATCH] [spv-out] fix switch cases after default not being output --- src/back/spv/block.rs | 25 ++++--------------------- tests/out/spv/control-flow.spvasm | 2 +- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/src/back/spv/block.rs b/src/back/spv/block.rs index 10fd5d72aa..3c32ca85c7 100644 --- a/src/back/spv/block.rs +++ b/src/back/spv/block.rs @@ -1682,26 +1682,20 @@ impl<'w> BlockContext<'w> { let default_id = self.gen_id(); - let mut reached_default = false; let mut raw_cases = Vec::with_capacity(cases.len()); let mut case_ids = Vec::with_capacity(cases.len()); for case in cases.iter() { match case.value { crate::SwitchValue::Integer(value) => { let label_id = self.gen_id(); - // No cases should be added after the default case is encountered - // since the default case catches all - if !reached_default { - raw_cases.push(super::instructions::Case { - value: value as Word, - label_id, - }); - } + raw_cases.push(super::instructions::Case { + value: value as Word, + label_id, + }); case_ids.push(label_id); } crate::SwitchValue::Default => { case_ids.push(default_id); - reached_default = true; } } } @@ -1732,17 +1726,6 @@ impl<'w> BlockContext<'w> { )?; } - // If no default was encountered write a empty block to satisfy the presence of - // a block the default label - if !reached_default { - self.write_block( - default_id, - &[], - BlockExit::Branch { target: merge_id }, - inner_context, - )?; - } - block = Block::new(merge_id); } crate::Statement::Loop { diff --git a/tests/out/spv/control-flow.spvasm b/tests/out/spv/control-flow.spvasm index fa00d2dba9..cc986fe775 100644 --- a/tests/out/spv/control-flow.spvasm +++ b/tests/out/spv/control-flow.spvasm @@ -92,7 +92,7 @@ OpBranch %50 %50 = OpLabel %52 = OpLoad %4 %37 OpSelectionMerge %53 None -OpSwitch %52 %54 1 %55 2 %56 3 %57 4 %58 5 %59 +OpSwitch %52 %54 1 %55 2 %56 3 %57 4 %58 5 %59 6 %60 %55 = OpLabel OpStore %37 %5 OpBranch %53