From a6730370974c6db60e2ddeee630271cae03c6c4d Mon Sep 17 00:00:00 2001 From: Mikhail Glushenkov Date: Mon, 12 May 2008 16:31:42 +0000 Subject: [PATCH] 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 --- tools/llvmc2/CompilationGraph.cpp | 19 +++++++++--------- tools/llvmc2/Error.h | 33 +++++++++++++++++++++++++++++++ tools/llvmc2/llvmc.cpp | 4 ++++ 3 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 tools/llvmc2/Error.h diff --git a/tools/llvmc2/CompilationGraph.cpp b/tools/llvmc2/CompilationGraph.cpp index d149c0fbfd2..e06a1688ed6 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 00000000000..c0aaff1a724 --- /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 + +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 4eeb627169b..a749274543a 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'; } -- 2.34.1