forked from OSchip/llvm-project
Re-apply fixed "[Attributor] Fix: Make sure we set the changed flag"
This reverts commit cedd0d9a6e
.
Re-apply the original commit but make sure the variables are initialized
(even if they are not used) so UBSan is not complaining.
llvm-svn: 369294
This commit is contained in:
parent
0f4e9835c9
commit
056f1b5cc7
|
@ -878,7 +878,7 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) {
|
||||||
// The map in which we collect return values -> return instrs.
|
// The map in which we collect return values -> return instrs.
|
||||||
decltype(ReturnedValues) &RetValsMap;
|
decltype(ReturnedValues) &RetValsMap;
|
||||||
// The flag to indicate a change.
|
// The flag to indicate a change.
|
||||||
bool Changed;
|
bool &Changed;
|
||||||
// The return instrs we come from.
|
// The return instrs we come from.
|
||||||
SmallPtrSet<ReturnInst *, 2> RetInsts;
|
SmallPtrSet<ReturnInst *, 2> RetInsts;
|
||||||
};
|
};
|
||||||
|
@ -906,9 +906,8 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) {
|
||||||
// Callback for all "return intructions" live in the associated function.
|
// Callback for all "return intructions" live in the associated function.
|
||||||
auto CheckReturnInst = [this, &VisitReturnedValue, &Changed](Instruction &I) {
|
auto CheckReturnInst = [this, &VisitReturnedValue, &Changed](Instruction &I) {
|
||||||
ReturnInst &Ret = cast<ReturnInst>(I);
|
ReturnInst &Ret = cast<ReturnInst>(I);
|
||||||
RVState RVS({ReturnedValues, false, {}});
|
RVState RVS({ReturnedValues, Changed, {}});
|
||||||
RVS.RetInsts.insert(&Ret);
|
RVS.RetInsts.insert(&Ret);
|
||||||
Changed |= RVS.Changed;
|
|
||||||
return VisitReturnedValue(*Ret.getReturnValue(), RVS);
|
return VisitReturnedValue(*Ret.getReturnValue(), RVS);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -955,7 +954,8 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) {
|
||||||
if (Argument *Arg = dyn_cast<Argument>(RetVal)) {
|
if (Argument *Arg = dyn_cast<Argument>(RetVal)) {
|
||||||
// Arguments are mapped to call site operands and we begin the traversal
|
// Arguments are mapped to call site operands and we begin the traversal
|
||||||
// again.
|
// again.
|
||||||
RVState RVS({NewRVsMap, false, RetValAAIt.second});
|
bool Unused = false;
|
||||||
|
RVState RVS({NewRVsMap, Unused, RetValAAIt.second});
|
||||||
VisitReturnedValue(*CB->getArgOperand(Arg->getArgNo()), RVS);
|
VisitReturnedValue(*CB->getArgOperand(Arg->getArgNo()), RVS);
|
||||||
continue;
|
continue;
|
||||||
} else if (isa<CallBase>(RetVal)) {
|
} else if (isa<CallBase>(RetVal)) {
|
||||||
|
|
Loading…
Reference in New Issue