From d359cf2e441742296c11ed04855a6d9a6a3831ab Mon Sep 17 00:00:00 2001 From: Mikhail Glushenkov Date: Tue, 27 Jul 2010 11:19:36 +0000 Subject: [PATCH] Return -1 only on failure to execute a program. Also fix some comments. llvm-svn: 109499 --- llvm/include/llvm/CompilerDriver/Action.h | 2 +- .../llvm/CompilerDriver/CompilationGraph.h | 57 ++++++++++--------- llvm/include/llvm/CompilerDriver/Tool.h | 4 ++ llvm/lib/CompilerDriver/CompilationGraph.cpp | 32 +++++------ llvm/lib/CompilerDriver/Main.cpp | 10 ++-- .../TableGen/LLVMCConfigurationEmitter.cpp | 2 +- 6 files changed, 59 insertions(+), 48 deletions(-) diff --git a/llvm/include/llvm/CompilerDriver/Action.h b/llvm/include/llvm/CompilerDriver/Action.h index 4ff6fd9c02eb..f2b79655f60f 100644 --- a/llvm/include/llvm/CompilerDriver/Action.h +++ b/llvm/include/llvm/CompilerDriver/Action.h @@ -43,7 +43,7 @@ namespace llvmc { } bool IsConstructed () { return (Command_.size() != 0);} - /// Execute - Executes the represented action. + /// Execute - Executes the command. Returns -1 on error. int Execute () const; bool StopCompilation () const { return StopCompilation_; } const std::string& OutFile() { return OutFile_; } diff --git a/llvm/include/llvm/CompilerDriver/CompilationGraph.h b/llvm/include/llvm/CompilerDriver/CompilationGraph.h index 9f2e50e30412..e3b0cff19f67 100644 --- a/llvm/include/llvm/CompilerDriver/CompilationGraph.h +++ b/llvm/include/llvm/CompilerDriver/CompilationGraph.h @@ -132,28 +132,28 @@ namespace llvmc { void insertNode(Tool* T); /// insertEdge - Insert a new edge into the graph. Takes ownership - /// of the Edge object. + /// of the Edge object. Returns non-zero value on error. int insertEdge(const std::string& A, Edge* E); - /// Build - Build target(s) from the input file set. Command-line - /// options are passed implicitly as global variables. + /// Build - Build target(s) from the input file set. Command-line options + /// are passed implicitly as global variables. Returns non-zero value on + /// error (usually the failed program's exit code). int Build(llvm::sys::Path const& TempDir, const LanguageMap& LangMap); - /// Check - Check the compilation graph for common errors like - /// cycles, input/output language mismatch and multiple default - /// edges. Prints error messages and in case it finds any errors. + /// Check - Check the compilation graph for common errors like cycles, + /// input/output language mismatch and multiple default edges. Prints error + /// messages and in case it finds any errors. int Check(); - /// getNode - Return a reference to the node correponding to the - /// given tool name. Throws std::runtime_error. + /// getNode - Return a reference to the node corresponding to the given tool + /// name. Returns 0 on error. Node* getNode(const std::string& ToolName); const Node* getNode(const std::string& ToolName) const; - /// viewGraph - This function is meant for use from the debugger. - /// You can just say 'call G->viewGraph()' and a ghostview window - /// should pop up from the program, displaying the compilation - /// graph. This depends on there being a 'dot' and 'gv' program - /// in your path. + /// viewGraph - This function is meant for use from the debugger. You can + /// just say 'call G->viewGraph()' and a ghostview window should pop up from + /// the program, displaying the compilation graph. This depends on there + /// being a 'dot' and 'gv' program in your path. void viewGraph(); /// writeGraph - Write Graphviz .dot source file to the current direcotry. @@ -167,12 +167,11 @@ namespace llvmc { // Helper functions. /// getToolsVector - Return a reference to the list of tool names - /// corresponding to the given language name. Throws - /// std::runtime_error. + /// corresponding to the given language name. Returns 0 on error. const tools_vector_type* getToolsVector(const std::string& LangName) const; - /// PassThroughGraph - Pass the input file through the toolchain - /// starting at StartNode. + /// PassThroughGraph - Pass the input file through the toolchain starting at + /// StartNode. int PassThroughGraph (const llvm::sys::Path& In, const Node* StartNode, const InputLanguagesSet& InLangs, const llvm::sys::Path& TempDir, @@ -185,26 +184,32 @@ namespace llvmc { InputLanguagesSet& InLangs, const LanguageMap& LangMap) const; - /// BuildInitial - Traverse the initial parts of the toolchains. + /// BuildInitial - Traverse the initial parts of the toolchains. Returns + /// non-zero value on error. int BuildInitial(InputLanguagesSet& InLangs, const llvm::sys::Path& TempDir, const LanguageMap& LangMap); - /// TopologicalSort - Sort the nodes in topological order. + /// TopologicalSort - Sort the nodes in topological order. Returns non-zero + /// value on error. int TopologicalSort(std::vector& Out); - /// TopologicalSortFilterJoinNodes - Call TopologicalSort and - /// filter the resulting list to include only Join nodes. + /// TopologicalSortFilterJoinNodes - Call TopologicalSort and filter the + /// resulting list to include only Join nodes. Returns non-zero value on + /// error. int TopologicalSortFilterJoinNodes(std::vector& Out); // Functions used to implement Check(). - /// CheckLanguageNames - Check that output/input language names - /// match for all nodes. + /// CheckLanguageNames - Check that output/input language names match for + /// all nodes. Returns non-zero value on error (number of errors + /// encountered). int CheckLanguageNames() const; - /// CheckMultipleDefaultEdges - check that there are no multiple - /// default default edges. + /// CheckMultipleDefaultEdges - check that there are no multiple default + /// default edges. Returns non-zero value on error (number of errors + /// encountered). int CheckMultipleDefaultEdges() const; - /// CheckCycles - Check that there are no cycles in the graph. + /// CheckCycles - Check that there are no cycles in the graph. Returns + /// non-zero value on error (number of errors encountered). int CheckCycles(); }; diff --git a/llvm/include/llvm/CompilerDriver/Tool.h b/llvm/include/llvm/CompilerDriver/Tool.h index d064a03eebce..45ef50d0b5af 100644 --- a/llvm/include/llvm/CompilerDriver/Tool.h +++ b/llvm/include/llvm/CompilerDriver/Tool.h @@ -38,6 +38,8 @@ namespace llvmc { virtual ~Tool() {} + /// GenerateAction - Generate an Action given particular command-line + /// options. Returns non-zero value on error. virtual int GenerateAction (Action& Out, const PathVector& inFiles, const bool HasChildren, @@ -45,6 +47,8 @@ namespace llvmc { const InputLanguagesSet& InLangs, const LanguageMap& LangMap) const = 0; + /// GenerateAction - Generate an Action given particular command-line + /// options. Returns non-zero value on error. virtual int GenerateAction (Action& Out, const llvm::sys::Path& inFile, const bool HasChildren, diff --git a/llvm/lib/CompilerDriver/CompilationGraph.cpp b/llvm/lib/CompilerDriver/CompilationGraph.cpp index 4e953cbe1103..9ea69c129f77 100644 --- a/llvm/lib/CompilerDriver/CompilationGraph.cpp +++ b/llvm/lib/CompilerDriver/CompilationGraph.cpp @@ -139,7 +139,7 @@ void CompilationGraph::insertNode(Tool* V) { int CompilationGraph::insertEdge(const std::string& A, Edge* Edg) { Node* B = getNode(Edg->ToolName()); if (B == 0) - return -1; + return 1; if (A == "root") { const char** InLangs = B->ToolPtr->InputLanguages(); @@ -150,7 +150,7 @@ int CompilationGraph::insertEdge(const std::string& A, Edge* Edg) { else { Node* N = getNode(A); if (N == 0) - return -1; + return 1; N->AddEdge(Edg); } @@ -193,11 +193,11 @@ int CompilationGraph::PassThroughGraph (const sys::Path& InFile, const Edge* Edg = ChooseEdge(CurNode->OutEdges, InLangs, CurNode->Name()); if (Edg == 0) - return -1; + return 1; CurNode = getNode(Edg->ToolName()); if (CurNode == 0) - return -1; + return 1; In = CurAction.OutFile(); } @@ -295,7 +295,7 @@ int CompilationGraph::BuildInitial (InputLanguagesSet& InLangs, // Find the toolchain corresponding to this file. const Node* N = FindToolChain(In, xLanguage, InLangs, LangMap); if (N == 0) - return -1; + return 1; // Pass file through the chain starting at head. if (int ret = PassThroughGraph(In, N, InLangs, TempDir, LangMap)) return ret; @@ -310,7 +310,7 @@ int CompilationGraph::TopologicalSort(std::vector& Out) { Node* Root = getNode("root"); if (Root == 0) - return -1; + return 1; Q.push(Root); @@ -322,7 +322,7 @@ int CompilationGraph::TopologicalSort(std::vector& Out) { EB != EE; ++EB) { Node* B = getNode((*EB)->ToolName()); if (B == 0) - return -1; + return 1; B->DecrInEdges(); if (B->HasNoInEdges()) @@ -389,11 +389,11 @@ int CompilationGraph::Build (const sys::Path& TempDir, const Edge* Edg = ChooseEdge(CurNode->OutEdges, InLangs, CurNode->Name()); if (Edg == 0) - return -1; + return 1; const Node* NextNode = getNode(Edg->ToolName()); if (NextNode == 0) - return -1; + return 1; if (int ret = PassThroughGraph(sys::Path(CurAction.OutFile()), NextNode, InLangs, TempDir, LangMap)) { @@ -417,7 +417,7 @@ int CompilationGraph::CheckLanguageNames() const { EB != EE; ++EB) { const Node* N2 = this->getNode((*EB)->ToolName()); if (N2 == 0) - return -1; + return 1; if (!N2->ToolPtr) { ++ret; @@ -497,7 +497,7 @@ int CompilationGraph::CheckCycles() { Node* Root = getNode("root"); if (Root == 0) - return -1; + return 1; Q.push(Root); @@ -513,7 +513,7 @@ int CompilationGraph::CheckCycles() { EB != EE; ++EB) { Node* B = getNode((*EB)->ToolName()); if (B == 0) - return -1; + return 1; B->DecrInEdges(); if (B->HasNoInEdges()) @@ -539,19 +539,19 @@ int CompilationGraph::Check () { // Check that output/input language names match. ret = this->CheckLanguageNames(); if (ret < 0) - return -1; + return 1; errs += ret; // Check for multiple default edges. ret = this->CheckMultipleDefaultEdges(); if (ret < 0) - return -1; + return 1; errs += ret; // Check for cycles. ret = this->CheckCycles(); if (ret < 0) - return -1; + return 1; errs += ret; return errs; @@ -617,7 +617,7 @@ int CompilationGraph::writeGraph(const std::string& OutputFilename) { } else { PrintError("Error opening file '" + OutputFilename + "' for writing!"); - return -1; + return 1; } return 0; diff --git a/llvm/lib/CompilerDriver/Main.cpp b/llvm/lib/CompilerDriver/Main.cpp index 28b2737f38b8..898f16d515fc 100644 --- a/llvm/lib/CompilerDriver/Main.cpp +++ b/llvm/lib/CompilerDriver/Main.cpp @@ -30,7 +30,9 @@ namespace { std::stringstream* GlobalTimeLog; - int getTempDir(sys::Path& tempDir) { + /// GetTempDir - Get the temporary directory location. Returns non-zero value + /// on error. + int GetTempDir(sys::Path& tempDir) { // The --temp-dir option. if (!TempDirname.empty()) { tempDir = TempDirname; @@ -53,20 +55,20 @@ namespace { std::string ErrMsg; if (tempDir.createDirectoryOnDisk(true, &ErrMsg)) { PrintError(ErrMsg); - return -1; + return 1; } } return 0; } - /// BuildTargets - A small wrapper for CompilationGraph::Build. + /// BuildTargets - A small wrapper for CompilationGraph::Build. Returns non-zero value int BuildTargets(CompilationGraph& graph, const LanguageMap& langMap) { int ret; sys::Path tempDir; bool toDelete = (SaveTemps == SaveTempsEnum::Unset); - if (int ret = getTempDir(tempDir)) + if (int ret = GetTempDir(tempDir)) return ret; ret = graph.Build(tempDir, langMap); diff --git a/llvm/utils/TableGen/LLVMCConfigurationEmitter.cpp b/llvm/utils/TableGen/LLVMCConfigurationEmitter.cpp index be6e398bd8c1..d4624e26ccd8 100644 --- a/llvm/utils/TableGen/LLVMCConfigurationEmitter.cpp +++ b/llvm/utils/TableGen/LLVMCConfigurationEmitter.cpp @@ -1960,7 +1960,7 @@ struct ActionHandlingCallbackBase << "PrintError(\"" << (d.getNumArgs() >= 1 ? InitPtrToString(d.getArg(0)) : "Unknown error!") << "\");\n"; - O.indent(IndentLevel) << "return -1;\n"; + O.indent(IndentLevel) << "return 1;\n"; } void onWarningDag(const DagInit& d,