summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp
diff options
context:
space:
mode:
authorMisha Brukman <brukman+llvm@gmail.com>2003-10-08 19:55:47 +0000
committerMisha Brukman <brukman+llvm@gmail.com>2003-10-08 19:55:47 +0000
commitb5c59fa16d789d3051d598721aab2aca512fe481 (patch)
tree0113ab64168ca2f18ed63fa90fd93e35f4acdb9a /llvm/lib/Bytecode/Reader/ReaderWrappers.cpp
parent068546cf78b88f812a77024f774f74a9a01cc43d (diff)
downloadbcm5719-llvm-b5c59fa16d789d3051d598721aab2aca512fe481.tar.gz
bcm5719-llvm-b5c59fa16d789d3051d598721aab2aca512fe481.zip
Destroy allocated resources on exception.
llvm-svn: 8969
Diffstat (limited to 'llvm/lib/Bytecode/Reader/ReaderWrappers.cpp')
-rw-r--r--llvm/lib/Bytecode/Reader/ReaderWrappers.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp b/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp
index 99c0e6be9ee..9b6327437d8 100644
--- a/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp
+++ b/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp
@@ -59,8 +59,13 @@ BytecodeFileReader::BytecodeFileReader(const std::string &Filename) {
if (Buffer == (unsigned char*)MAP_FAILED)
throw std::string("Error mmapping file!");
- // Parse the bytecode we mmapped in
- ParseBytecode(Buffer, Length, Filename);
+ try {
+ // Parse the bytecode we mmapped in
+ ParseBytecode(Buffer, Length, Filename);
+ } catch (...) {
+ munmap((char*)Buffer, Length);
+ throw;
+ }
}
BytecodeFileReader::~BytecodeFileReader() {
@@ -106,7 +111,12 @@ BytecodeBufferReader::BytecodeBufferReader(const unsigned char *Buf,
ParseBegin = Buffer = Buf;
MustDelete = false;
}
- ParseBytecode(ParseBegin, Length, ModuleID);
+ try {
+ ParseBytecode(ParseBegin, Length, ModuleID);
+ } catch (...) {
+ if (MustDelete) delete [] Buffer;
+ throw;
+ }
}
BytecodeBufferReader::~BytecodeBufferReader() {
OpenPOWER on IntegriCloud