updated for version 7.0-084
diff --git a/src/eval.c b/src/eval.c
index 162cdf4..5b5bfbc 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6074,6 +6074,10 @@
     tabpage_T	*tp;
 #endif
 
+    /* Only do this once. */
+    want_garbage_collect = FALSE;
+    may_garbage_collect = FALSE;
+
     /*
      * 1. Go through all accessible variables and mark all lists and dicts
      *    with copyID.
@@ -9636,7 +9640,9 @@
     typval_T	*argvars;
     typval_T	*rettv;
 {
-    garbage_collect();
+    /* This is postponed until we are back at the toplevel, because we may be
+     * using Lists and Dicts internally.  E.g.: ":echo [garbagecollect()]". */
+    want_garbage_collect = TRUE;
 }
 
 /*