updated for version 7.2.408
Problem:    With ":g/the/s/foo/bar/" the '[ and '] marks can be set to a line
            that was not changed.
Solution:   Only set '[ and '] marks when a substitution was done.
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 68627a5..bf5af40 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -4238,6 +4238,7 @@
     char_u	*sub_firstline;		/* allocated copy of first sub line */
     int		endcolumn = FALSE;	/* cursor in last column when done */
     pos_T	old_cursor = curwin->w_cursor;
+    int		start_nsubs;
 
     cmd = eap->arg;
     if (!global_busy)
@@ -4245,6 +4246,7 @@
 	sub_nsubs = 0;
 	sub_nlines = 0;
     }
+    start_nsubs = sub_nsubs;
 
     if (eap->cmdidx == CMD_tilde)
 	which_pat = RE_LAST;	/* use last used regexp */
@@ -5106,7 +5108,7 @@
     if (do_count)
 	curwin->w_cursor = old_cursor;
 
-    if (sub_nsubs)
+    if (sub_nsubs > start_nsubs)
     {
 	/* Set the '[ and '] marks. */
 	curbuf->b_op_start.lnum = eap->line1;