Index: tests/io/io-acquire2.cfa
===================================================================
--- tests/io/io-acquire2.cfa	(revision 00f5fdefb1f00c535cfc71935924c58091e7c4ad)
+++ tests/io/io-acquire2.cfa	(revision 00f5fdefb1f00c535cfc71935924c58091e7c4ad)
@@ -0,0 +1,87 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// io-acquire.cfa -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Mon Mar  1 18:40:09 2021
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jan 10 16:10:20 2022
+// Update Count     : 74
+// 
+
+#include <fstream.hfa>
+#include <thread.hfa>
+#include <mutex_stmt.hfa>
+
+Duration default_preemption() {	return 0; }
+
+thread T {};
+void main( T & ) {
+	// output from parallel threads should not be scrambled
+
+	for ( 100 ) {										// expression protection
+		mutex( sout ) sout | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
+	}
+	mutex( sout ) {										// statement protection
+		for ( 100 ) {
+			sout | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
+		}
+	}
+	{													// duplicate protection demonstrating recursive lock
+		ofstream & h1( ofstream & os ) {				// helper
+			mutex( os ) return os | 1 | 2 | 3 | 4;		// unnecessary mutex
+		}
+		ofstream & h2( ofstream & os ) {				// helper
+			mutex( os ) return os | 6 | 7 | 8 | 9;		// unnecessary mutex
+		}
+		mutex( sout ) {									// unnecessary mutex
+			for ( 100 ) {
+				mutex( sout ) {
+					sout | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
+					sout | h1 | 5 | h2;					// refactored code
+				}
+			}
+		}
+	}
+
+	// above output used as input to parallel threads 
+
+	int a, b, c, d, e, f, g, h, i;
+	for ( 100 ) {										// expression protection
+		mutex( sin ) sin | a | b | c | d | e | f | g | h | i;
+	}
+	mutex( sin ) {										// statement protection
+		for ( 100 ) {
+			sin  | a | b | c | d | e | f | g | h | i;
+		}
+	}
+	{													// duplicate protection demonstrating recursive lock
+		ifstream & h1( ifstream & is ) {				// helper
+			mutex( is ) return is | a | b | c | d;		// unnecessary mutex
+		}
+		ifstream & h2( ifstream & is ) {				// helper
+			mutex( is ) return is | f | g | h | i;		// unnecessary mutex
+		}
+		mutex( sin ) {									// unnecessary mutex
+			for ( 5 ) {
+				mutex( sin ) {
+					sin  | a | b | c | d | e | f | g | h | i;
+					sin  | h1 | e | h2;					// refactored code
+				}
+			}
+		}
+	}
+}
+int main() {
+	processor p;
+	T t[5];
+} 
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa io-acquire2.cfa" //
+// End: //
