]> granicus.if.org Git - llvm/commitdiff
[mips] Fix use after free and an unnecessary copy introduced in r268896.
authorDaniel Sanders <daniel.sanders@imgtec.com>
Mon, 9 May 2016 13:10:57 +0000 (13:10 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Mon, 9 May 2016 13:10:57 +0000 (13:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@268913 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Mips/AsmParser/MipsAsmParser.cpp

index 1b61535c75a789aaf2d3ebe07be272344a02ddf1..bff46886dc71d372792af0fa4a973cb6e2cbd09e 100644 (file)
@@ -1322,8 +1322,9 @@ public:
     return Op;
   }
 
-  static std::unique_ptr<MipsOperand>
-  CreateRegPair(MipsOperand MOP, SMLoc S, SMLoc E, MipsAsmParser &Parser) {
+  static std::unique_ptr<MipsOperand> CreateRegPair(const MipsOperand &MOP,
+                                                    SMLoc S, SMLoc E,
+                                                    MipsAsmParser &Parser) {
     auto Op = make_unique<MipsOperand>(k_RegPair, Parser);
     Op->RegIdx.Index = MOP.RegIdx.Index;
     Op->StartLoc = S;
@@ -4691,7 +4692,7 @@ MipsAsmParser::parseRegisterPair(OperandVector &Operands) {
     return MatchOperand_ParseFail;
 
   SMLoc E = Parser.getTok().getLoc();
-  MipsOperand &Op = static_cast<MipsOperand &>(*Operands.back());
+  MipsOperand Op = static_cast<MipsOperand &>(*Operands.back());
 
   Operands.pop_back();
   Operands.push_back(MipsOperand::CreateRegPair(Op, S, E, *this));