diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-09-07 09:47:42 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-09-07 09:47:42 +0000 |
commit | 38539ebc2b55d2decec2322efd3360bf61f31da1 (patch) | |
tree | cdfc4ed103f288ce0e6eecd8c8d9806d1e546c1e /lib | |
parent | c37290e5785be9191bbbfc3d91f6820bedc3dd64 (diff) |
MipsAsmParser: Fix a couple of string use-after-frees and misuses of classof.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163383 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/Mips/AsmParser/MipsAsmParser.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index 988a502f15..acdd8463f7 100644 --- a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -523,8 +523,7 @@ bool MipsAsmParser::ParseOperand(SmallVectorImpl<MCParsedAsmOperand*>&Operands, SMLoc E = SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1); - StringRef Id = StringRef("$" + Identifier.str()); - MCSymbol *Sym = getContext().GetOrCreateSymbol(Id); + MCSymbol *Sym = getContext().GetOrCreateSymbol("$" + Identifier); // Otherwise create a symbol ref. const MCExpr *Res = MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_None, @@ -571,7 +570,7 @@ bool MipsAsmParser::parseRelocOperand(const MCExpr *&Res) { if (Tok.isNot(AsmToken::Identifier)) return true; - StringRef Str = Tok.getIdentifier(); + std::string Str = Tok.getIdentifier().str(); Parser.Lex(); //eat identifier //now make expression from the rest of the operand @@ -586,7 +585,8 @@ bool MipsAsmParser::parseRelocOperand(const MCExpr *&Res) { const AsmToken &nextTok = Parser.getTok(); if (nextTok.isNot(AsmToken::Identifier)) return true; - Str = StringRef(Str.str() + "(%" + nextTok.getIdentifier().str()); + Str += "(%"; + Str += nextTok.getIdentifier(); Parser.Lex(); //eat identifier if (getLexer().getKind() != AsmToken::LParen) return true; @@ -603,9 +603,9 @@ bool MipsAsmParser::parseRelocOperand(const MCExpr *&Res) { return true; //parenthesis must follow reloc operand //Check the type of the expression - if (MCConstantExpr::classof(IdVal)) { + if (const MCConstantExpr *MCE = dyn_cast<MCConstantExpr>(IdVal)) { //it's a constant, evaluate lo or hi value - int Val = ((const MCConstantExpr*)IdVal)->getValue(); + int Val = MCE->getValue(); if (Str == "lo") { Val = Val & 0xffff; } else if (Str == "hi") { @@ -615,9 +615,9 @@ bool MipsAsmParser::parseRelocOperand(const MCExpr *&Res) { return false; } - if (MCSymbolRefExpr::classof(IdVal)) { + if (const MCSymbolRefExpr *MSRE = dyn_cast<MCSymbolRefExpr>(IdVal)) { //it's a symbol, create symbolic expression from symbol - StringRef Symbol = ((const MCSymbolRefExpr*)IdVal)->getSymbol().getName(); + StringRef Symbol = MSRE->getSymbol().getName(); MCSymbolRefExpr::VariantKind VK = getVariantKind(Str); Res = MCSymbolRefExpr::Create(Symbol,VK,getContext()); return false; |