set -e does not apply to ( ) blocks,
so implement the check manually.
sigh.

R=r
DELTA=17  (6 added, 0 deleted, 11 changed)
OCL=30606
CL=30612
diff --git a/src/make.bash b/src/make.bash
index 6b103c6..00cc6b4 100755
--- a/src/make.bash
+++ b/src/make.bash
@@ -19,17 +19,23 @@
 chmod +x $HOME/bin/quietgcc
 
 for i in lib9 libbio libmach_amd64 libregexp cmd pkg cmd/gobuild cmd/godoc cmd/gofmt
-do (
-	echo; echo; echo %%%% making $i %%%%; echo
-	cd $i
-	case $i in
-	cmd)
-		bash make.bash
-		;;
-	*)
-		make install
-	esac
-) done
+do
+	# The ( ) here are to preserve the current directory
+	# for the next round despite the cd $i below.
+	# set -e does not apply to ( ) so we must explicitly
+	# test the exit status.
+	(
+		echo; echo; echo %%%% making $i %%%%; echo
+		cd $i
+		case $i in
+		cmd)
+			bash make.bash
+			;;
+		*)
+			make install
+		esac
+	)  || exit 1
+done
 
 case "`uname`" in
 Darwin)