diff --git a/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.err.exp b/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.err.exp new file mode 100644 index 000000000..ba0da519d --- /dev/null +++ b/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.err.exp @@ -0,0 +1 @@ +trace: throwing diff --git a/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.exp b/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.exp new file mode 100644 index 000000000..be54b4b4e --- /dev/null +++ b/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.exp @@ -0,0 +1 @@ +"done" diff --git a/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.nix b/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.nix new file mode 100644 index 000000000..b398e26fd --- /dev/null +++ b/tests/functional/lang/eval-okay-tryeval-failed-thunk-reeval.nix @@ -0,0 +1,7 @@ +# Since Nix 2.32, errors are memoized +let + # This attribute value will only be evaluated once. + foo = builtins.trace "throwing" throw "nope"; +in +# Trigger and catch the error twice. +builtins.seq (builtins.tryEval foo).success builtins.seq (builtins.tryEval foo).success "done"