diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2013-05-06 11:16:57 +0000 |
---|---|---|
committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2013-05-06 11:16:57 +0000 |
commit | 7d55b6bb1a4a5220ef973cf7b68ae508859a9b71 (patch) | |
tree | 718d6e6da4f4ddff94cde73d4c53cdee329af29e /lib/Target | |
parent | 5d042c63741bc5ccec8ad18bfebf9f621fcde640 (diff) | |
download | external_llvm-7d55b6bb1a4a5220ef973cf7b68ae508859a9b71.zip external_llvm-7d55b6bb1a4a5220ef973cf7b68ae508859a9b71.tar.gz external_llvm-7d55b6bb1a4a5220ef973cf7b68ae508859a9b71.tar.bz2 |
[PowerPC] Fix memory corruption in AsmParser
As pointed out by Evgeniy Stepanov, assigning a std::string temporary
to a StringRef is not a good idea. Rework MatchRegisterName to avoid
using the .lower routine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181192 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp index 163b078..f2cb8b8 100644 --- a/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp +++ b/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp @@ -508,29 +508,29 @@ MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, bool PPCAsmParser:: MatchRegisterName(const AsmToken &Tok, unsigned &RegNo, int64_t &IntVal) { if (Tok.is(AsmToken::Identifier)) { - StringRef Name = Tok.getString().lower(); + StringRef Name = Tok.getString(); - if (Name == "lr") { + if (Name.equals_lower("lr")) { RegNo = isPPC64()? PPC::LR8 : PPC::LR; IntVal = 8; return false; - } else if (Name == "ctr") { + } else if (Name.equals_lower("ctr")) { RegNo = isPPC64()? PPC::CTR8 : PPC::CTR; IntVal = 9; return false; - } else if (Name.startswith("r") && + } else if (Name.substr(0, 1).equals_lower("r") && !Name.substr(1).getAsInteger(10, IntVal) && IntVal < 32) { RegNo = isPPC64()? XRegs[IntVal] : RRegs[IntVal]; return false; - } else if (Name.startswith("f") && + } else if (Name.substr(0, 1).equals_lower("f") && !Name.substr(1).getAsInteger(10, IntVal) && IntVal < 32) { RegNo = FRegs[IntVal]; return false; - } else if (Name.startswith("v") && + } else if (Name.substr(0, 1).equals_lower("v") && !Name.substr(1).getAsInteger(10, IntVal) && IntVal < 32) { RegNo = VRegs[IntVal]; return false; - } else if (Name.startswith("cr") && + } else if (Name.substr(0, 2).equals_lower("cr") && !Name.substr(2).getAsInteger(10, IntVal) && IntVal < 8) { RegNo = CRRegs[IntVal]; return false; |