about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libexpr/primops.cc6
-rw-r--r--src/libmain/shared.cc11
2 files changed, 9 insertions, 8 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 65e993708a34..8a513c5213fd 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -269,7 +269,11 @@ static Expr primDerivationStrict(EvalState & state, const ATermVector & args)
             if (key == "args") {
                 ATermList es;
                 value = evalExpr(state, value);
-                if (!matchList(value, es)) throw Error(format("`args' should be a list %1%") % value);
+                if (!matchList(value, es)) {
+                    static bool haveWarned = false;
+                    warnOnce(haveWarned, "the `args' attribute should evaluate to a list");
+                    es = flattenList(state, value);
+                }
                 for (ATermIterator i(es); i; ++i) {
                     string s;
                     toString(state, *i, context, s);
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index 2441cbf0139d..71be0dd5d0ef 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -44,13 +44,10 @@ Path makeRootName(const Path & gcRoot, int & counter)
 
 void printGCWarning()
 {
-    static bool warned = false;
-    if (!warned) {
-        printMsg(lvlInfo,
-            "warning: you did not specify `--add-root'; "
-            "the result might be removed by the garbage collector");
-        warned = true;
-    }
+    static bool haveWarned = false;
+    warnOnce(haveWarned, 
+        "warning: you did not specify `--add-root'; "
+        "the result might be removed by the garbage collector");
 }