Fix ASAN error caused by commit r364512.
authorRumeet Dhindsa <rdhindsa@google.com>
Thu, 27 Jun 2019 23:37:04 +0000 (23:37 +0000)
committerRumeet Dhindsa <rdhindsa@google.com>
Thu, 27 Jun 2019 23:37:04 +0000 (23:37 +0000)
This patch intends to fix ASAN stack-use-after-scope error.
This is at least a short-term fix to unbreak LLVM's mainline.

Differential Revision: https://reviews.llvm.org/D63905

llvm-svn: 364611

llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp

index 0827db3..031bf2d 100644 (file)
@@ -1560,14 +1560,16 @@ bool IRTranslator::translateCall(const User &U, MachineIRBuilder &MIRBuilder) {
     ArrayRef<Register> Res = getOrCreateVRegs(CI);
 
     SmallVector<ArrayRef<Register>, 8> Args;
+    SmallVector<Register, 8> InVRegs;
     Register SwiftErrorVReg = 0;
     for (auto &Arg: CI.arg_operands()) {
       if (CLI->supportSwiftError() && isSwiftError(Arg)) {
         LLT Ty = getLLTForType(*Arg->getType(), *DL);
-        Register InVReg = MRI->createGenericVirtualRegister(Ty);
-        MIRBuilder.buildCopy(InVReg, SwiftError.getOrCreateVRegUseAt(
-                                         &CI, &MIRBuilder.getMBB(), Arg));
-        Args.push_back(InVReg);
+        InVRegs.push_back(MRI->createGenericVirtualRegister(Ty));
+        MIRBuilder.buildCopy(
+            InVRegs.back(),
+            SwiftError.getOrCreateVRegUseAt(&CI, &MIRBuilder.getMBB(), Arg));
+        Args.emplace_back(llvm::makeArrayRef(InVRegs.back()));
         SwiftErrorVReg =
             SwiftError.getOrCreateVRegDefAt(&CI, &MIRBuilder.getMBB(), Arg);
         continue;