summaryrefslogtreecommitdiff
path: root/src/ast_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast_utils.h')
-rw-r--r--src/ast_utils.h22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/ast_utils.h b/src/ast_utils.h
index aa4120569..823c08f9c 100644
--- a/src/ast_utils.h
+++ b/src/ast_utils.h
@@ -21,6 +21,7 @@
#include "wasm-traversal.h"
#include "wasm-builder.h"
#include "pass.h"
+#include "ast/branch-utils.h"
namespace wasm {
@@ -371,24 +372,19 @@ struct ReFinalize : public WalkerPass<PostWalker<ReFinalize>> {
void visitLoop(Loop *curr) { curr->finalize(); }
void visitBreak(Break *curr) {
curr->finalize();
- if (curr->value && curr->value->type == unreachable) {
- return; // not an actual break
+ if (BranchUtils::isBranchTaken(curr)) {
+ breakValues[curr->name] = getValueType(curr->value);
}
- if (curr->condition && curr->condition->type == unreachable) {
- return; // not an actual break
- }
- breakValues[curr->name] = getValueType(curr->value);
}
void visitSwitch(Switch *curr) {
curr->finalize();
- if (curr->condition->type == unreachable || (curr->value && curr->value->type == unreachable)) {
- return; // not an actual break
- }
- auto valueType = getValueType(curr->value);
- for (auto target : curr->targets) {
- breakValues[target] = valueType;
+ if (BranchUtils::isBranchTaken(curr)) {
+ auto valueType = getValueType(curr->value);
+ for (auto target : curr->targets) {
+ breakValues[target] = valueType;
+ }
+ breakValues[curr->default_] = valueType;
}
- breakValues[curr->default_] = valueType;
}
void visitCall(Call *curr) { curr->finalize(); }
void visitCallImport(CallImport *curr) { curr->finalize(); }