[llvm-commits] [llvm] r163383 - /llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
Benjamin Kramer
benny.kra at googlemail.com
Fri Sep 7 02:47:42 PDT 2012
Author: d0k
Date: Fri Sep 7 04:47:42 2012
New Revision: 163383
URL: http://llvm.org/viewvc/llvm-project?rev=163383&view=rev
Log:
MipsAsmParser: Fix a couple of string use-after-frees and misuses of classof.
Modified:
llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
Modified: llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp?rev=163383&r1=163382&r2=163383&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/Mips/AsmParser/MipsAsmParser.cpp Fri Sep 7 04:47:42 2012
@@ -523,8 +523,7 @@
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 @@
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 @@
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 @@
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 @@
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;
More information about the llvm-commits
mailing list