From 23ca1c560e5ec4a9eadab8783655e634c77f0e0b Mon Sep 17 00:00:00 2001 From: Ting Yuan <273985359@qq.com> Date: Sat, 25 Mar 2023 20:43:26 +0800 Subject: [PATCH] Avoid falling into an infinite cycle due to PHI loop The input that triggers the bug is [mem.bc](https://github.com/umnsec/linux-bitcode/blob/d2a7b41d969d7d84d62d52a0b0a9412cb034c3ba/linux-5.3.0/drivers/infiniband/hw/mlx5/mem.bc) --- src/lib/MLTA.cc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/lib/MLTA.cc b/src/lib/MLTA.cc index ca38170..4905b58 100644 --- a/src/lib/MLTA.cc +++ b/src/lib/MLTA.cc @@ -1157,20 +1157,17 @@ bool MLTA::nextLayerBaseType(Value *V, list &TyList, else if (PHINode *PN = dyn_cast(V)) { // FIXME: tracking incoming values bool ret = false; - set NVisited; list NTyList; for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { Value *IV = PN->getIncomingValue(i); NextV = IV; - NVisited = Visited; NTyList = TyList; - ret = nextLayerBaseType(IV, NTyList, NextV, NVisited); + ret = nextLayerBaseType(IV, NTyList, NextV, Visited); if (NTyList.size() > TyList.size()) { break; } } TyList = NTyList; - Visited = NVisited; return ret; } else if (SelectInst *SelI = dyn_cast(V)) {