[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