void HandleFunction(Function *Func) {
FixFunctionConstantExpr(Func);
set<GlobalVariable *> Globals;
set<User *> Users;
for (BasicBlock &BB : *Func) {
for (Instruction &I : BB) {
for (Value *Op : I.operands()) {
if (GlobalVariable *G = dyn_cast<GlobalVariable>(Op->stripPointerCasts())) {
if(User* U=dyn_cast<User>(Op)){
Users.insert(U); // Here is 'A'
}
Users.insert(&I); // Here is 'B'
Globals.insert(G);
}
}
}
}
// ....
// Some Logic
// ....
}
(A и B) Если это сделать, разве это не перекрывается?
В чем разница между «U» (A) и «& I» (B)?
Спасибо!