Isaac Dunham also reported that some diff implementations can't handle nonseekable input, so write to a temporary file instead of <(command).

Use trap EXIT to make sure the temporary files get deleted.
diff --git a/scripts/bloatcheck b/scripts/bloatcheck
index d18fbe0..fff4690 100755
--- a/scripts/bloatcheck
+++ b/scripts/bloatcheck
@@ -58,6 +58,10 @@
   printf "% 71d total\n" "$TOTAL"
 }
 
-diff -U 0 <(nm --size-sort "$1" | sort -k3,3) \
-     <(nm --size-sort "$2" | sort -k3,3) \
-     | tail -n +3 | sed -n 's/^\([-+]\)/\1 /p' | sort -k4,4 | do_bloatcheck
+DIFF1=`mktemp base.XXXXXXX`
+DIFF2=`mktemp bloat.XXXXXXX`
+trap "rm $DIFF1 $DIFF2" EXIT
+nm --size-sort "$1" | sort -k3,3 > $DIFF1
+nm --size-sort "$2" | sort -k3,3 > $DIFF2
+diff -U 0 $DIFF1 $DIFF2 | tail -n +3 | sed -n 's/^\([-+]\)/\1 /p' \
+  | sort -k4,4 | do_bloatcheck