diff options
author | Mikhail Glushenkov <foldr@codedgers.com> | 2008-05-12 16:31:42 +0000 |
---|---|---|
committer | Mikhail Glushenkov <foldr@codedgers.com> | 2008-05-12 16:31:42 +0000 |
commit | a6730370974c6db60e2ddeee630271cae03c6c4d (patch) | |
tree | bd4d0443cf023a9e372cc311e9282cb7be4f6ca0 | |
parent | 2ce3898e410e2b9c155d52fb42a6614eadafca9e (diff) | |
download | external_llvm-a6730370974c6db60e2ddeee630271cae03c6c4d.zip external_llvm-a6730370974c6db60e2ddeee630271cae03c6c4d.tar.gz external_llvm-a6730370974c6db60e2ddeee630271cae03c6c4d.tar.bz2 |
Fix some error messages; Make LLVMC pass through the exit code of a failed tool.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50971 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | tools/llvmc2/CompilationGraph.cpp | 19 | ||||
-rw-r--r-- | tools/llvmc2/Error.h | 33 | ||||
-rw-r--r-- | tools/llvmc2/llvmc.cpp | 4 |
3 files changed, 47 insertions, 9 deletions
diff --git a/tools/llvmc2/CompilationGraph.cpp b/tools/llvmc2/CompilationGraph.cpp index d149c0f..e06a168 100644 --- a/tools/llvmc2/CompilationGraph.cpp +++ b/tools/llvmc2/CompilationGraph.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "Error.h" #include "CompilationGraph.h" #include "llvm/ADT/STLExtras.h" @@ -90,7 +91,7 @@ const Node& CompilationGraph::getNode(const std::string& ToolName) const { const std::string& CompilationGraph::getLanguage(const sys::Path& File) const { LanguageMap::const_iterator Lang = ExtsToLangs.find(File.getSuffix()); if (Lang == ExtsToLangs.end()) - throw std::runtime_error("Unknown suffix: " + File.getSuffix() + '!'); + throw std::runtime_error("Unknown suffix: " + File.getSuffix()); return Lang->second; } @@ -101,7 +102,7 @@ CompilationGraph::getToolsVector(const std::string& LangName) const tools_map_type::const_iterator I = ToolsMap.find(LangName); if (I == ToolsMap.end()) throw std::runtime_error("No tool corresponding to the language " - + LangName + "found!"); + + LangName + "found"); return I->second; } @@ -176,8 +177,8 @@ void CompilationGraph::PassThroughGraph (const sys::Path& InFile, Out = MakeTempFile(TempDir, In.getBasename(), CurTool->OutputSuffix()); } - if (CurTool->GenerateAction(In, Out).Execute() != 0) - throw std::runtime_error("Tool returned error code!"); + if (int ret = CurTool->GenerateAction(In, Out).Execute()) + throw error_code(ret); if (Last) return; @@ -205,8 +206,8 @@ FindToolChain(const sys::Path& In, const std::string* forceLanguage, // Find the toolchain for the input language. const tools_vector_type& TV = getToolsVector(InLanguage); if (TV.empty()) - throw std::runtime_error("No toolchain corresponding to language" - + InLanguage + " found!"); + throw std::runtime_error("No toolchain corresponding to language " + + InLanguage + " found"); return &getNode(ChooseEdge(TV, InLangs)->ToolName()); } @@ -342,8 +343,8 @@ int CompilationGraph::Build (const sys::Path& TempDir) { Out = MakeTempFile(TempDir, "tmp", JT->OutputSuffix()); } - if (JT->GenerateAction(Out).Execute() != 0) - throw std::runtime_error("Tool returned error code!"); + if (int ret = JT->GenerateAction(Out).Execute()) + throw error_code(ret); if (!IsLast) { const Node* NextNode = @@ -397,7 +398,7 @@ void CompilationGraph::writeGraph() { O.close(); } else { - throw std::runtime_error(""); + throw std::runtime_error("Error opening file for writing"); } } diff --git a/tools/llvmc2/Error.h b/tools/llvmc2/Error.h new file mode 100644 index 0000000..c0aaff1 --- /dev/null +++ b/tools/llvmc2/Error.h @@ -0,0 +1,33 @@ +//===--- Error.h - The LLVM Compiler Driver ---------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open +// Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Exception classes for LLVMC. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TOOLS_LLVMC2_ERROR_H +#define LLVM_TOOLS_LLVMC2_ERROR_H + +#include <stdexcept> + +namespace llvmc { + + class error_code: public std::runtime_error { + int Code_; + public: + error_code (int c) + : std::runtime_error("Tool returned error code"), Code_(c) + {} + + int code() const { return Code_; } + }; + +} + +#endif //LLVM_TOOLS_LLVMC2_ERROR_H diff --git a/tools/llvmc2/llvmc.cpp b/tools/llvmc2/llvmc.cpp index 4eeb627..a749274 100644 --- a/tools/llvmc2/llvmc.cpp +++ b/tools/llvmc2/llvmc.cpp @@ -15,6 +15,7 @@ //===----------------------------------------------------------------------===// #include "CompilationGraph.h" +#include "Error.h" #include "Tool.h" #include "llvm/System/Path.h" @@ -92,6 +93,9 @@ int main(int argc, char** argv) { return BuildTargets(graph); } + catch(llvmc::error_code& ec) { + return ec.code(); + } catch(const std::exception& ex) { std::cerr << ex.what() << '\n'; } |