[llvm] eafa8db - TableGen/GlobalISel: Don't take reference to temporary values
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 15 05:59:07 PST 2020
Author: Matt Arsenault
Date: 2020-01-15T08:58:57-05:00
New Revision: eafa8dbefe30c85e58efc5309793f2d7c2109e35
URL: https://github.com/llvm/llvm-project/commit/eafa8dbefe30c85e58efc5309793f2d7c2109e35
DIFF: https://github.com/llvm/llvm-project/commit/eafa8dbefe30c85e58efc5309793f2d7c2109e35.diff
LOG: 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.
Added:
Modified:
llvm/utils/TableGen/GlobalISelEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp
index ff88186c8856..2e5cd955bd92 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<ConstrainOperandToRegClassAction>(
@@ -4316,7 +4316,7 @@ Expected<action_iterator> 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<RuleMatcher> 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<ConstrainOperandToRegClassAction>(0, 0, *SrcRCDstRCPair->second);
More information about the llvm-commits
mailing list