From: Johannes Doerfert Date: Mon, 19 Aug 2019 19:14:10 +0000 (+0000) Subject: Re-apply fixed "[Attributor] Fix: Make sure we set the changed flag" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cda1c6dac6cc057afddb7ffb29a58c6a4d92bc89;p=llvm Re-apply fixed "[Attributor] Fix: Make sure we set the changed flag" This reverts commit cedd0d9a6e4b433e1cd6585d1d4d152eb5e60b11. Re-apply the original commit but make sure the variables are initialized (even if they are not used) so UBSan is not complaining. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369294 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/Attributor.cpp b/lib/Transforms/IPO/Attributor.cpp index 4339a65f5e6..34fe5552a40 100644 --- a/lib/Transforms/IPO/Attributor.cpp +++ b/lib/Transforms/IPO/Attributor.cpp @@ -878,7 +878,7 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) { // The map in which we collect return values -> return instrs. decltype(ReturnedValues) &RetValsMap; // The flag to indicate a change. - bool Changed; + bool &Changed; // The return instrs we come from. SmallPtrSet RetInsts; }; @@ -906,9 +906,8 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) { // Callback for all "return intructions" live in the associated function. auto CheckReturnInst = [this, &VisitReturnedValue, &Changed](Instruction &I) { ReturnInst &Ret = cast(I); - RVState RVS({ReturnedValues, false, {}}); + RVState RVS({ReturnedValues, Changed, {}}); RVS.RetInsts.insert(&Ret); - Changed |= RVS.Changed; return VisitReturnedValue(*Ret.getReturnValue(), RVS); }; @@ -955,7 +954,8 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) { if (Argument *Arg = dyn_cast(RetVal)) { // Arguments are mapped to call site operands and we begin the traversal // again. - RVState RVS({NewRVsMap, false, RetValAAIt.second}); + bool Unused = false; + RVState RVS({NewRVsMap, Unused, RetValAAIt.second}); VisitReturnedValue(*CB->getArgOperand(Arg->getArgNo()), RVS); continue; } else if (isa(RetVal)) {