@@ -145,6 +145,8 @@ auto OTFResolver::resolveFunctionPointer(const llvm::CallBase *CallSite)
145145
146146 llvm::SmallVector<const llvm::GlobalVariable *, 2 > GlobalVariableWL;
147147 llvm::SmallVector<const llvm::ConstantAggregate *> ConstantAggregateWL;
148+ llvm::SmallPtrSet<const llvm::ConstantAggregate *, 4 >
149+ VisitedConstantAggregates;
148150
149151 for (const auto *P : *PTS) {
150152 if (!llvm::isa<llvm::Constant>(P)) {
@@ -163,16 +165,15 @@ auto OTFResolver::resolveFunctionPointer(const llvm::CallBase *CallSite)
163165 }
164166 }
165167
166- if (const auto *CE = llvm::dyn_cast<llvm::ConstantExpr>(P)) {
168+ if (const auto *GVP = llvm::dyn_cast<llvm::GlobalVariable>(P)) {
169+ GlobalVariableWL.push_back (GVP);
170+ } else if (const auto *CE = llvm::dyn_cast<llvm::ConstantExpr>(P)) {
167171 for (const auto &Op : CE->operands ()) {
168172 if (const auto *GVOp = llvm::dyn_cast<llvm::GlobalVariable>(Op)) {
169173 GlobalVariableWL.push_back (GVOp);
170174 }
171175 }
172176 }
173- if (const auto *GVP = llvm::dyn_cast<llvm::GlobalVariable>(P)) {
174- GlobalVariableWL.push_back (GVP);
175- }
176177
177178 if (GlobalVariableWL.empty ()) {
178179 continue ;
@@ -188,8 +189,8 @@ auto OTFResolver::resolveFunctionPointer(const llvm::CallBase *CallSite)
188189 ConstantAggregateWL.push_back (InitConstAggregate);
189190 }
190191 }
191- llvm::SmallPtrSet< const llvm::ConstantAggregate *, 4 >
192- VisitedConstantAggregates;
192+
193+ VisitedConstantAggregates. clear () ;
193194
194195 while (!ConstantAggregateWL.empty ()) {
195196 const auto *ConstAggregateItem = ConstantAggregateWL.pop_back_val ();
@@ -213,11 +214,9 @@ auto OTFResolver::resolveFunctionPointer(const llvm::CallBase *CallSite)
213214 if (matchesSignature (F, FTy, false )) {
214215 Callees.insert (F);
215216 }
216- }
217- if (auto *CA = llvm::dyn_cast<llvm::ConstantAggregate>(Op)) {
217+ } else if (auto *CA = llvm::dyn_cast<llvm::ConstantAggregate>(Op)) {
218218 ConstantAggregateWL.push_back (CA);
219- }
220- if (auto *GV = llvm::dyn_cast<llvm::GlobalVariable>(Op)) {
219+ } else if (auto *GV = llvm::dyn_cast<llvm::GlobalVariable>(Op)) {
221220 if (!GV->hasInitializer ()) {
222221 continue ;
223222 }
0 commit comments