about summary refs log tree commit diff
path: root/src/libexpr/primops.cc
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-09-22T16·49+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-09-22T17·18+0200
commit53b044c2f6f9e309037d5545374a7d257dbbb590 (patch)
treef8a103f8271d1f19e0787102dd9980c7982563fb /src/libexpr/primops.cc
parent0cd6596b0e75870dc59f17848c6c152e2b2c6dba (diff)
Don't evaluate inside a "throw"
Workaround for
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41174. This caused
hydra-eval-jobs to ignore SIGINT.
Diffstat (limited to 'src/libexpr/primops.cc')
-rw-r--r--src/libexpr/primops.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index a25bd8854e..0892d5d1b7 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -333,15 +333,16 @@ static void prim_genericClosure(EvalState & state, const Pos & pos, Value * * ar
 static void prim_abort(EvalState & state, const Pos & pos, Value * * args, Value & v)
 {
     PathSet context;
-    throw Abort(format("evaluation aborted with the following error message: ‘%1%’") %
-        state.coerceToString(pos, *args[0], context));
+    string s = state.coerceToString(pos, *args[0], context);
+    throw Abort(format("evaluation aborted with the following error message: ‘%1%’") % s);
 }
 
 
 static void prim_throw(EvalState & state, const Pos & pos, Value * * args, Value & v)
 {
     PathSet context;
-    throw ThrownError(format("%1%") % state.coerceToString(pos, *args[0], context));
+    string s = state.coerceToString(pos, *args[0], context);
+    throw ThrownError(s);
 }