summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/RemoveUnusedNames.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/passes/RemoveUnusedNames.cpp b/src/passes/RemoveUnusedNames.cpp
index 53da00733..addd4367b 100644
--- a/src/passes/RemoveUnusedNames.cpp
+++ b/src/passes/RemoveUnusedNames.cpp
@@ -37,16 +37,11 @@ struct RemoveUnusedNames
std::map<Name, std::set<Expression*>> branchesSeen;
void visitExpression(Expression* curr) {
- if (auto* block = curr->dynCast<Block>()) {
- visitBlock(block);
- return;
- }
- if (auto* loop = curr->dynCast<Loop>()) {
- visitLoop(loop);
- return;
- }
- BranchUtils::operateOnScopeNameUses(
- curr, [&](Name& name) { branchesSeen[name].insert(curr); });
+ BranchUtils::operateOnScopeNameUses(curr, [&](Name& name) {
+ if (name.is()) {
+ branchesSeen[name].insert(curr);
+ }
+ });
}
void handleBreakTarget(Name& name) {
@@ -83,7 +78,12 @@ struct RemoveUnusedNames
}
}
- void visitTry(Try* curr) { handleBreakTarget(curr->name); }
+ void visitTry(Try* curr) {
+ handleBreakTarget(curr->name);
+ // Try has not just a break target but also an optional delegate with a
+ // target name, so call the generic visitor as well to handle that.
+ visitExpression(curr);
+ }
void visitFunction(Function* curr) { assert(branchesSeen.empty()); }
};