diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/RemoveUnusedNames.cpp | 22 |
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()); } }; |