summaryrefslogtreecommitdiff
path: root/lib/AsmParser/Parser.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-02-20 18:06:43 +0000
committerChris Lattner <sabre@nondot.org>2002-02-20 18:06:43 +0000
commitfbdb1da666f908302918f4d9d37d11667a3105e1 (patch)
treee3038653be09c8a751945c312c42c8bce0428d8d /lib/AsmParser/Parser.cpp
parent22d26d7c7d7c9666d0da0e51250586da5a0744da (diff)
downloadllvm-fbdb1da666f908302918f4d9d37d11667a3105e1.tar.gz
llvm-fbdb1da666f908302918f4d9d37d11667a3105e1.tar.bz2
llvm-fbdb1da666f908302918f4d9d37d11667a3105e1.tar.xz
Close input file if exception is thrown
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1784 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser/Parser.cpp')
-rw-r--r--lib/AsmParser/Parser.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/AsmParser/Parser.cpp b/lib/AsmParser/Parser.cpp
index 3e55e90461..a99849d31b 100644
--- a/lib/AsmParser/Parser.cpp
+++ b/lib/AsmParser/Parser.cpp
@@ -16,16 +16,20 @@ using std::string;
Module *ParseAssemblyFile(const string &Filename) { // throw (ParseException)
FILE *F = stdin;
- if (Filename != "-")
+ if (Filename != "-") {
F = fopen(Filename.c_str(), "r");
- if (F == 0) {
- throw ParseException(Filename, string("Could not open file '") +
- Filename + "'");
+ if (F == 0)
+ throw ParseException(Filename, "Could not open file '" + Filename + "'");
}
- // TODO: If this throws an exception, F is not closed.
- Module *Result = RunVMAsmParser(Filename, F);
+ Module *Result;
+ try {
+ Result = RunVMAsmParser(Filename, F);
+ } catch (...) {
+ if (F != stdin) fclose(F); // Make sure to close file descriptor if an
+ throw; // exception is thrown
+ }
if (F != stdin)
fclose(F);