From: Matt Arsenault Date: Tue, 14 Jan 2020 19:09:06 +0000 (-0500) Subject: TableGen/GlobalISel: Don't take reference to temporary values X-Git-Tag: llvmorg-12-init~17866 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eafa8dbefe30c85e58efc5309793f2d7c2109e35;p=platform%2Fupstream%2Fllvm.git TableGen/GlobalISel: Don't take reference to temporary values These return temporary Optional<> values which are immediately destroyed. I'm not sure why no sanitizers seem to have caught this, but I encountered crashes on these in a future patch. --- diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp index ff88186..2e5cd95 100644 --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp @@ -4225,7 +4225,7 @@ GlobalISelEmitter::createAndImportSubInstructionRenderer( if (!SubIdx) return failedImport("EXTRACT_SUBREG child #1 is not a subreg index"); - const auto &SrcRCDstRCPair = + const auto SrcRCDstRCPair = (*SuperClass)->getMatchingSubClassWithSubRegs(CGRegs, *SubIdx); assert(SrcRCDstRCPair->second && "Couldn't find a matching subclass"); M.insertAction( @@ -4316,7 +4316,7 @@ Expected GlobalISelEmitter::importExplicitUseRenderers( CodeGenRegisterClass *RC = CGRegs.getRegClass(RCDef); CodeGenSubRegIndex *SubIdx = CGRegs.getSubRegIdx(SubRegInit->getDef()); - const auto &SrcRCDstRCPair = + const auto SrcRCDstRCPair = RC->getMatchingSubClassWithSubRegs(CGRegs, SubIdx); if (SrcRCDstRCPair.hasValue()) { assert(SrcRCDstRCPair->second && "Couldn't find a matching subclass"); @@ -4832,7 +4832,7 @@ Expected GlobalISelEmitter::runOnPattern(const PatternToMatch &P) { assert(Src->getExtTypes().size() == 1 && "Expected Src of EXTRACT_SUBREG to have one result type"); - const auto &SrcRCDstRCPair = + const auto SrcRCDstRCPair = (*SuperClass)->getMatchingSubClassWithSubRegs(CGRegs, *SubIdx); assert(SrcRCDstRCPair->second && "Couldn't find a matching subclass"); M.addAction(0, 0, *SrcRCDstRCPair->second);