diff options
| author | Chris Lattner <sabre@nondot.org> | 2002-02-20 18:06:43 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2002-02-20 18:06:43 +0000 |
| commit | ee6f2affbec7d718a48efe8b64d94d6b0283b5ba (patch) | |
| tree | f282867cdd3bbf1a978d4aed530795677d514523 /llvm/lib/AsmParser/Parser.cpp | |
| parent | f608d7f4f4b3cacdbfff3c5efeee73fa70d81739 (diff) | |
| download | bcm5719-llvm-ee6f2affbec7d718a48efe8b64d94d6b0283b5ba.tar.gz bcm5719-llvm-ee6f2affbec7d718a48efe8b64d94d6b0283b5ba.zip | |
Close input file if exception is thrown
llvm-svn: 1784
Diffstat (limited to 'llvm/lib/AsmParser/Parser.cpp')
| -rw-r--r-- | llvm/lib/AsmParser/Parser.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/llvm/lib/AsmParser/Parser.cpp b/llvm/lib/AsmParser/Parser.cpp index 3e55e90461f..a99849d31b4 100644 --- a/llvm/lib/AsmParser/Parser.cpp +++ b/llvm/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); |

