diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 81f2c8f5b..c03346878 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1130,7 +1130,8 @@ ex_listdo(exarg_T *eap)
 	    if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
 		    || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
 	    {
-		if (i >= qf_size || i >= eap->line2)
+		if (did_emsg || got_int || did_throw
+			|| i >= qf_size || i >= eap->line2)
 		    break;
 
 		qf_idx = qf_get_cur_idx(eap);
