[llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.h ExecutionDriver.cpp

Brian Gaeke gaeke at cs.uiuc.edu
Wed Feb 11 12:38:02 PST 2004


Changes in directory llvm/tools/bugpoint:

BugDriver.h updated: 1.22 -> 1.23
ExecutionDriver.cpp updated: 1.34 -> 1.35

---
Log message:

Add check-exit-code option, defaulting to true.

Add ProgramExitedNonzero argument to executeProgram(), and make it
tell its caller whether the program exited nonzero.

Move executeProgramWithCBE() out of line, to ExecutionDriver.cpp, and remove
its extra arguments which are always defaulted.  Make it turn off
check-exit-code if the program exits nonzero while generating a reference
output.

Make diffProgram() assume that any nonzero exit code is a failure, if 
check-exit-code is turned on.


---
Diffs of the changes:  (+36 -9)

Index: llvm/tools/bugpoint/BugDriver.h
diff -u llvm/tools/bugpoint/BugDriver.h:1.22 llvm/tools/bugpoint/BugDriver.h:1.23
--- llvm/tools/bugpoint/BugDriver.h:1.22	Tue Nov 11 16:41:34 2003
+++ llvm/tools/bugpoint/BugDriver.h	Wed Feb 11 12:37:32 2004
@@ -178,17 +178,13 @@
   std::string executeProgram(std::string RequestedOutputFilename = "",
                              std::string Bytecode = "",
                              const std::string &SharedObjects = "",
-                             AbstractInterpreter *AI = 0);
+                             AbstractInterpreter *AI = 0,
+                             bool *ProgramExitedNonzero = 0);
 
   /// executeProgramWithCBE - Used to create reference output with the C
   /// backend, if reference output is not provided.
   ///
-  std::string executeProgramWithCBE(std::string OutputFile = "",
-                                    std::string BytecodeFile = "",
-                                    const std::string &SharedObj = "") {
-    return executeProgram(OutputFile, BytecodeFile, SharedObj,
-                          (AbstractInterpreter*)cbe);
-  }
+  std::string executeProgramWithCBE(std::string OutputFile = "");
 
   /// diffProgram - This method executes the specified module and diffs the
   /// output against the file specified by ReferenceOutputFile.  If the output


Index: llvm/tools/bugpoint/ExecutionDriver.cpp
diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.34 llvm/tools/bugpoint/ExecutionDriver.cpp:1.35
--- llvm/tools/bugpoint/ExecutionDriver.cpp:1.34	Tue Jan 13 21:38:37 2004
+++ llvm/tools/bugpoint/ExecutionDriver.cpp	Wed Feb 11 12:37:32 2004
@@ -49,6 +49,11 @@
                             0),
                  cl::init(AutoPick));
 
+  cl::opt<bool>
+  CheckProgramExitCode("check-exit-code",
+                       cl::desc("Assume nonzero exit code is failure (default on)"),
+                       cl::init(true));
+
   cl::opt<std::string>
   InputFile("input", cl::init("/dev/null"),
             cl::desc("Filename to pipe in as stdin (default: /dev/null)"));
@@ -137,7 +142,8 @@
 std::string BugDriver::executeProgram(std::string OutputFile,
                                       std::string BytecodeFile,
                                       const std::string &SharedObj,
-                                      AbstractInterpreter *AI) {
+                                      AbstractInterpreter *AI,
+                                      bool *ProgramExitedNonzero) {
   if (AI == 0) AI = Interpreter;
   assert(AI && "Interpreter should have been created already!");
   bool CreatedBytecode = false;
@@ -167,6 +173,8 @@
   int RetVal = AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile,
                                   OutputFile, SharedObjs);
 
+  if (ProgramExitedNonzero != 0)
+    *ProgramExitedNonzero = (RetVal != 0);
 
   // Remove the temporary bytecode file.
   if (CreatedBytecode) removeFile(BytecodeFile);
@@ -175,6 +183,22 @@
   return OutputFile;
 }
 
+/// executeProgramWithCBE - Used to create reference output with the C
+/// backend, if reference output is not provided.
+///
+std::string BugDriver::executeProgramWithCBE(std::string OutputFile) {
+  bool ProgramExitedNonzero;
+  std::string outFN = executeProgram(OutputFile, "", "",
+                                     (AbstractInterpreter*)cbe,
+                                     &ProgramExitedNonzero);
+  if (ProgramExitedNonzero) {
+    std::cerr
+      << "Warning: While generating reference output, program exited with\n"
+      << "non-zero exit code. This will NOT be treated as a failure.\n";
+    CheckProgramExitCode = false;
+  }
+  return outFN;
+}
 
 std::string BugDriver::compileSharedObject(const std::string &BytecodeFile) {
   assert(Interpreter && "Interpreter should have been created already!");
@@ -211,8 +235,15 @@
 bool BugDriver::diffProgram(const std::string &BytecodeFile,
                             const std::string &SharedObject,
                             bool RemoveBytecode) {
+  bool ProgramExitedNonzero;
+
   // Execute the program, generating an output file...
-  std::string Output = executeProgram("", BytecodeFile, SharedObject);
+  std::string Output = executeProgram("", BytecodeFile, SharedObject, 0,
+                                      &ProgramExitedNonzero);
+
+  // If we're checking the program exit code, assume anything nonzero is bad.
+  if (CheckProgramExitCode && ProgramExitedNonzero)
+    return true;
 
   std::string Error;
   bool FilesDifferent = false;





More information about the llvm-commits mailing list