aboutsummaryrefslogtreecommitdiffstats
path: root/tools/llvmc
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-08-21 06:04:45 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-08-21 06:04:45 +0000
commit8ea5ecb0564b8822c70ad84202471f03e2690da7 (patch)
tree2b32a1dc217579d1cc5799b60e575dcb0a6dcc5d /tools/llvmc
parent4ce5dc63778f36f61b510456783f15a224406e68 (diff)
downloadexternal_llvm-8ea5ecb0564b8822c70ad84202471f03e2690da7.zip
external_llvm-8ea5ecb0564b8822c70ad84202471f03e2690da7.tar.gz
external_llvm-8ea5ecb0564b8822c70ad84202471f03e2690da7.tar.bz2
For PR797:
Adjust usage of the ExecuteAndWait function to use the last argument which is the ErrMsg string. This is necessitated because this function no longer throws exceptions on error. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29791 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvmc')
-rw-r--r--tools/llvmc/CompilerDriver.cpp24
-rw-r--r--tools/llvmc/CompilerDriver.h3
-rw-r--r--tools/llvmc/llvmc.cpp5
3 files changed, 19 insertions, 13 deletions
diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp
index 64232f3..a204964 100644
--- a/tools/llvmc/CompilerDriver.cpp
+++ b/tools/llvmc/CompilerDriver.cpp
@@ -451,7 +451,7 @@ private:
return action;
}
- bool DoAction(Action*action) {
+ int DoAction(Action*action, std::string& ErrMsg) {
assert(action != 0 && "Invalid Action!");
if (isSet(VERBOSE_FLAG))
WriteAction(action);
@@ -477,15 +477,17 @@ private:
if (isSet(TIME_ACTIONS_FLAG)) {
Timer timer(action->program.toString());
timer.startTimer();
- int resultCode = sys::Program::ExecuteAndWait(action->program, Args);
+ int resultCode =
+ sys::Program::ExecuteAndWait(action->program, Args,0,0,0,&ErrMsg);
timer.stopTimer();
timer.print(timer,std::cerr);
- return resultCode == 0;
+ return resultCode;
}
else
- return 0 == sys::Program::ExecuteAndWait(action->program, Args);
+ return
+ sys::Program::ExecuteAndWait(action->program, Args, 0,0,0, &ErrMsg);
}
- return true;
+ return 0;
}
/// This method tries various variants of a linkage item's file
@@ -594,7 +596,7 @@ private:
/// @name Methods
/// @{
public:
- virtual int execute(const InputList& InpList, const sys::Path& Output ) {
+ virtual int execute(const InputList& InpList, const sys::Path& Output, std::string& ErrMsg ) {
try {
// Echo the configuration of options if we're running verbose
if (isSet(DEBUG_FLAG)) {
@@ -851,8 +853,9 @@ public:
std::vector<Action*>::iterator AI = actions.begin();
std::vector<Action*>::iterator AE = actions.end();
while (AI != AE) {
- if (!DoAction(*AI))
- throw std::string("Action failed");
+ int ActionResult = DoAction(*AI, ErrMsg);
+ if (ActionResult != 0)
+ return ActionResult;
AI++;
}
@@ -932,8 +935,9 @@ public:
link->args.push_back(Output.toString());
// Execute the link
- if (!DoAction(link))
- throw std::string("Action failed");
+ int ActionResult = DoAction(link, ErrMsg);
+ if (ActionResult != 0)
+ return ActionResult;
}
} catch (std::string& msg) {
cleanup();
diff --git a/tools/llvmc/CompilerDriver.h b/tools/llvmc/CompilerDriver.h
index 41ad2c3..02ec0e9 100644
--- a/tools/llvmc/CompilerDriver.h
+++ b/tools/llvmc/CompilerDriver.h
@@ -150,7 +150,8 @@ namespace llvm {
/// @{
public:
/// @brief Execute the actions requested for the given input list.
- virtual int execute(const InputList& list, const sys::Path& output) = 0;
+ virtual int execute(
+ const InputList& list, const sys::Path& output, std::string& ErrMsg) =0;
/// @brief Set the final phase at which compilation terminates
virtual void setFinalPhase(Phases phase) = 0;
diff --git a/tools/llvmc/llvmc.cpp b/tools/llvmc/llvmc.cpp
index 496eaa4..f2e7c1f 100644
--- a/tools/llvmc/llvmc.cpp
+++ b/tools/llvmc/llvmc.cpp
@@ -355,9 +355,10 @@ int main(int argc, char **argv) {
}
// Tell the driver to do its thing
- int result = CD->execute(InpList, sys::Path(OutputFilename));
+ std::string ErrMsg;
+ int result = CD->execute(InpList, sys::Path(OutputFilename), ErrMsg);
if (result != 0) {
- throw std::string("Error executing actions. Terminated.");
+ std::cerr << argv[0] << ": " << ErrMsg << '\n';
return result;
}