diff options
| -rw-r--r-- | llvm/tools/llc/llc.cpp | 68 | 
1 files changed, 30 insertions, 38 deletions
diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index 485b25ef532..3bd35f1f746 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -134,8 +134,28 @@ main(int argc, char **argv)    // Figure out where we are going to send the output...    std::ostream *Out = 0; -  if (OutputFilename != "") -    {   // Specified an output filename? +  if (OutputFilename != "") { +    // Specified an output filename? +    if (!Force && std::ifstream(OutputFilename.c_str())) { +      // If force is not specified, make sure not to overwrite a file! +      std::cerr << argv[0] << ": error opening '" << OutputFilename +                << "': file exists!\n" +                << "Use -f command line argument to force output\n"; +      return 1; +    } +    Out = new std::ofstream(OutputFilename.c_str()); + +    // Make sure that the Out file gets unlink'd from the disk if we get a +    // SIGINT +    RemoveFileOnSignal(OutputFilename); +  } else { +    if (InputFilename == "-") { +      OutputFilename = "-"; +      Out = &std::cout; +    } else { +      std::string OutputFilename = GetFileNameRoot(InputFilename);  +      OutputFilename += ".s"; +              if (!Force && std::ifstream(OutputFilename.c_str())) {          // If force is not specified, make sure not to overwrite a file!          std::cerr << argv[0] << ": error opening '" << OutputFilename @@ -143,47 +163,19 @@ main(int argc, char **argv)                    << "Use -f command line argument to force output\n";          return 1;        } +              Out = new std::ofstream(OutputFilename.c_str()); - +      if (!Out->good()) { +        std::cerr << argv[0] << ": error opening " << OutputFilename << "!\n"; +        delete Out; +        return 1; +      } +              // Make sure that the Out file gets unlink'd from the disk if we get a        // SIGINT        RemoveFileOnSignal(OutputFilename);      } -  else -    { -      if (InputFilename == "-") -        { -          OutputFilename = "-"; -          Out = &std::cout; -        } -      else -        { -          std::string OutputFilename = GetFileNameRoot(InputFilename);  -          OutputFilename += ".s"; - -          if (!Force && std::ifstream(OutputFilename.c_str())) -            { -              // If force is not specified, make sure not to overwrite a file! -              std::cerr << argv[0] << ": error opening '" << OutputFilename -                        << "': file exists!\n" -                        << "Use -f command line argument to force output\n"; -              return 1; -            } - -          Out = new std::ofstream(OutputFilename.c_str()); -          if (!Out->good()) -            { -              std::cerr << argv[0] << ": error opening " << OutputFilename -                        << "!\n"; -              delete Out; -              return 1; -            } - -          // Make sure that the Out file gets unlink'd from the disk if we get a -          // SIGINT -          RemoveFileOnSignal(OutputFilename); -        } -    } +  }    // Ask the target to add backend passes as neccesary    if (Target.addPassesToEmitAssembly(Passes, *Out)) {  | 

