[llvm] r187696 - ARMAsmParser: Plug a leak.

Benjamin Kramer benny.kra at googlemail.com
Sat Aug 3 15:16:24 PDT 2013


Author: d0k
Date: Sat Aug  3 17:16:24 2013
New Revision: 187696

URL: http://llvm.org/viewvc/llvm-project?rev=187696&view=rev
Log:
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.

Modified:
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=187696&r1=187695&r2=187696&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Sat Aug  3 17:16:24 2013
@@ -8009,11 +8009,19 @@ bool ARMAsmParser::parseDirectiveRegSave
   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())





More information about the llvm-commits mailing list