From 1830322412c0e163cb1534b8e1d618dbfd3ddcd4 Mon Sep 17 00:00:00 2001 From: fye Date: Wed, 27 Apr 2022 14:09:34 -0700 Subject: [PATCH] CG: fix infinite recursion from SweepUnusedStaticSymbol exposed by profileGen --- src/mapleall/maple_be/src/cg/cg_phasemanager.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/mapleall/maple_be/src/cg/cg_phasemanager.cpp b/src/mapleall/maple_be/src/cg/cg_phasemanager.cpp index 47660be46c..667003acce 100644 --- a/src/mapleall/maple_be/src/cg/cg_phasemanager.cpp +++ b/src/mapleall/maple_be/src/cg/cg_phasemanager.cpp @@ -107,6 +107,7 @@ void CgFuncPM::PostOutPut(MIRModule &m) { } void MarkUsedStaticSymbol(const StIdx &symbolIdx); +std::map visitedSym; void CollectStaticSymbolInVar(MIRConst *mirConst) { if (mirConst->GetKind() == kConstAddrof) { @@ -128,6 +129,11 @@ void MarkUsedStaticSymbol(const StIdx &symbolIdx) { if (symbol == nullptr) { return; } + if (visitedSym[symbolIdx]) { + return; + } else { + visitedSym[symbolIdx] = true; + } symbol->ResetIsDeleted(); if (symbol->IsConst()) { auto *konst = symbol->GetKonst(); @@ -185,6 +191,7 @@ void CgFuncPM::SweepUnusedStaticSymbol(MIRModule &m) { } } + visitedSym.clear(); /* scan all funtions */ std::vector &funcTable = GlobalTables::GetFunctionTable().GetFuncTable(); /* don't optimize this loop to iterator or range-base loop -- Gitee