ARMAsmParser: Plug a leak.

Using an object to do the cleanup may look like overkill, but it's safer and nicer than putting deletes everywhere.

llvm-svn: 187696
This commit is contained in:
Benjamin Kramer 2013-08-03 22:16:24 +00:00
parent dcfd5b525a
commit 23632bd466
1 changed files with 11 additions and 3 deletions

View File

@ -8009,11 +8009,19 @@ bool ARMAsmParser::parseDirectiveRegSave(SMLoc L, bool IsVector) {
if (HandlerDataLoc.isValid())
return Error(L, ".save or .vsave must precede .handlerdata directive");
// RAII object to make sure parsed operands are deleted.
struct CleanupObject {
SmallVector<MCParsedAsmOperand *, 1> Operands;
~CleanupObject() {
for (unsigned I = 0, E = Operands.size(); I != E; ++I)
delete Operands[I];
}
} CO;
// Parse the register list
SmallVector<MCParsedAsmOperand*, 1> Operands;
if (parseRegisterList(Operands))
if (parseRegisterList(CO.Operands))
return true;
ARMOperand *Op = (ARMOperand*)Operands[0];
ARMOperand *Op = (ARMOperand*)CO.Operands[0];
if (!IsVector && !Op->isRegList())
return Error(L, ".save expects GPR registers");
if (IsVector && !Op->isDPRRegList())