From fbdb1da666f908302918f4d9d37d11667a3105e1 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 20 Feb 2002 18:06:43 +0000 Subject: [PATCH] Close input file if exception is thrown git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1784 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AsmParser/Parser.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/AsmParser/Parser.cpp b/lib/AsmParser/Parser.cpp index 3e55e90461f..a99849d31b4 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);