https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56270
std::vector<NodeRef> stack;
    
    std::vector<std::pair<Type, std::optional<NodeInfo>>> todo{{root_type, {}}};
    while (!todo.empty()) {
        
        auto type_needed = todo.back().first;
        if (!todo.back().second) {
            
            auto node_info = ConsumeNode(type_needed);
            if (!node_info) return {};
            auto subtypes = node_info->subtypes;
            todo.back().second = std::move(node_info);
            todo.reserve(todo.size() + subtypes.size());
            
            
            for (size_t i = 0; i < subtypes.size(); ++i) {
                todo.emplace_back(*(subtypes.rbegin() + i), std::nullopt);
            }
        } else {
            
            
            
            
            NodeInfo& info = *todo.back().second;
            
            std::vector<NodeRef> sub;