From: David L. Jones <dlj@google.com>
Date: Mon, 19 Aug 2019 08:00:08 +0000 (+0000)
Subject: Revert [Attributor] Fix: Make sure we set the changed flag
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b694b48636d80a5e36235be568033a620a3d8644;p=llvm

Revert [Attributor] Fix: Make sure we set the changed flag

This reverts r369159 (git commit cbaf1fdea2de891bdbc49cdec89ae2077e6b9ed0)

r369160 caused a test to fail under UBSAN. See thread on llvm-commits.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369241 91177308-0d34-0410-b5e6-96231b3b80d8
---

diff --git a/lib/Transforms/IPO/Attributor.cpp b/lib/Transforms/IPO/Attributor.cpp
index 882d0931f9f..4339a65f5e6 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<ReturnInst *, 2> RetInsts;
   };
@@ -906,8 +906,9 @@ 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<ReturnInst>(I);
-    RVState RVS({ReturnedValues, Changed, {}});
+    RVState RVS({ReturnedValues, false, {}});
     RVS.RetInsts.insert(&Ret);
+    Changed |= RVS.Changed;
     return VisitReturnedValue(*Ret.getReturnValue(), RVS);
   };
 
@@ -954,8 +955,7 @@ ChangeStatus AAReturnedValuesImpl::updateImpl(Attributor &A) {
       if (Argument *Arg = dyn_cast<Argument>(RetVal)) {
         // Arguments are mapped to call site operands and we begin the traversal
         // again.
-        bool Unused;
-        RVState RVS({NewRVsMap, Unused, RetValAAIt.second});
+        RVState RVS({NewRVsMap, false, RetValAAIt.second});
         VisitReturnedValue(*CB->getArgOperand(Arg->getArgNo()), RVS);
         continue;
       } else if (isa<CallBase>(RetVal)) {