diff --git a/src/mapleall/maple_be/src/cg/cg_phasemanager.cpp b/src/mapleall/maple_be/src/cg/cg_phasemanager.cpp index 47660be46c3075e88a8a3196531b2f1a1b6f322d..667003acce00c6d572ae1ef20390a11591418b01 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