diff --git a/lib/Dialect/FIRRTL/Transforms/LowerClasses.cpp b/lib/Dialect/FIRRTL/Transforms/LowerClasses.cpp index 52df7153b37e..ea1d49c63234 100644 --- a/lib/Dialect/FIRRTL/Transforms/LowerClasses.cpp +++ b/lib/Dialect/FIRRTL/Transforms/LowerClasses.cpp @@ -302,6 +302,12 @@ PathTracker::run(CircuitOp circuit, InstanceGraph &instanceGraph, const DenseMap &owningModules) { SmallVector trackers; + // First allocate module namespaces. Don't capture a namespace reference at + // this point since they could be invalidated when DenseMap grows. + for (auto *node : instanceGraph) + if (auto module = node->getModule()) + (void)namespaces.get(module); + for (auto *node : instanceGraph) if (auto module = node->getModule()) { PathTracker tracker(module, namespaces, instanceGraph, symbolTable,