diff --git a/llvm/include/llvm/CodeGen/SwiftErrorValueTracking.h b/llvm/include/llvm/CodeGen/SwiftErrorValueTracking.h index a374736347f6..06795b1eb842 100644 --- a/llvm/include/llvm/CodeGen/SwiftErrorValueTracking.h +++ b/llvm/include/llvm/CodeGen/SwiftErrorValueTracking.h @@ -33,10 +33,10 @@ namespace llvm { class SwiftErrorValueTracking { // Some useful objects to reduce the number of function arguments needed. - MachineFunction *MF; - const Function *Fn; - const TargetLowering *TLI; - const TargetInstrInfo *TII; + MachineFunction *MF = nullptr; + const Function *Fn = nullptr; + const TargetLowering *TLI = nullptr; + const TargetInstrInfo *TII = nullptr; /// A map from swifterror value in a basic block to the virtual register it is /// currently represented by. @@ -55,7 +55,7 @@ class SwiftErrorValueTracking { VRegDefUses; /// The swifterror argument of the current function. - const Value *SwiftErrorArg; + const Value *SwiftErrorArg = nullptr; using SwiftErrorValues = SmallVector; /// A function can only have a single swifterror argument. And if it does diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 346c37b04ac6..18c90ceee386 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -4277,7 +4277,7 @@ bool IRTranslator::runOnMachineFunction(MachineFunction &CurMF) { ArrayRef VRegs = getOrCreateVRegs(Arg); VRegArgs.push_back(VRegs); - if (Arg.hasSwiftErrorAttr()) { + if (CLI->supportSwiftError() && Arg.hasSwiftErrorAttr()) { assert(VRegs.size() == 1 && "Too many vregs for Swift error"); SwiftError.setCurrentVReg(EntryBB, SwiftError.getFunctionArg(), VRegs[0]); } diff --git a/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp b/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp index 4ae9726d7e0c..c45fef0c76a4 100644 --- a/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp +++ b/llvm/lib/CodeGen/SwiftErrorValueTracking.cpp @@ -81,15 +81,15 @@ void SwiftErrorValueTracking::setFunction(MachineFunction &mf) { TLI = MF->getSubtarget().getTargetLowering(); TII = MF->getSubtarget().getInstrInfo(); - if (!TLI->supportSwiftError()) - return; - SwiftErrorVals.clear(); VRegDefMap.clear(); VRegUpwardsUse.clear(); VRegDefUses.clear(); SwiftErrorArg = nullptr; + if (!TLI->supportSwiftError()) + return; + // Check if function has a swifterror argument. bool HaveSeenSwiftErrorArg = false; for (Function::const_arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();