Index: tests/concurrent/mutexstmt/.expect/locks.txt
===================================================================
--- tests/concurrent/mutexstmt/.expect/locks.txt	(revision a552a8c919f291eac14c7c36f9d5b256a40bdf79)
+++ tests/concurrent/mutexstmt/.expect/locks.txt	(revision 4ecc35a465ad7c7402bd46ec1b54aa1dd910885b)
@@ -3,2 +3,4 @@
 Start Test: multi lock deadlock/mutual exclusion
 End Test: multi lock deadlock/mutual exclusion
+Start Test: multi polymorphic lock deadlock/mutual exclusion
+End Test: multi polymorphic lock deadlock/mutual exclusion
Index: tests/concurrent/mutexstmt/locks.cfa
===================================================================
--- tests/concurrent/mutexstmt/locks.cfa	(revision a552a8c919f291eac14c7c36f9d5b256a40bdf79)
+++ tests/concurrent/mutexstmt/locks.cfa	(revision 4ecc35a465ad7c7402bd46ec1b54aa1dd910885b)
@@ -4,4 +4,6 @@
 
 const unsigned int num_times = 10000;
+
+Duration default_preemption() { return 0; }
 
 single_acquisition_lock m1, m2, m3, m4, m5;
@@ -23,8 +25,18 @@
 }
 
+void refTest( single_acquisition_lock & m ) {
+	mutex ( m ) {
+		assert(!insideFlag);
+		insideFlag = true;
+		assert(insideFlag);
+		insideFlag = false;
+	}
+}
+
 thread T_Multi {};
 
 void main( T_Multi & this ) {
 	for (unsigned int i = 0; i < num_times; i++) {
+		refTest( m1 );
 		mutex ( m1 ) {
 			assert(!insideFlag);
@@ -60,11 +72,47 @@
 }
 
+single_acquisition_lock l1;
+linear_backoff_then_block_lock l2;
+owner_lock l3;
+
+thread T_Multi_Poly {};
+
+void main( T_Multi_Poly & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		refTest( l1 );
+		mutex ( l1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l1, l2, l3 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l3, l1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l1, l2 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
 int num_tasks = 10;
 int main() {
-	processor p[10];
+	processor p[num_tasks - 1];
 
 	printf("Start Test: single lock mutual exclusion\n");
 	{
-		T_Mutex t[10];
+		T_Mutex t[num_tasks];
 	}
 	assert(count == num_tasks * num_times);
@@ -72,6 +120,11 @@
 	printf("Start Test: multi lock deadlock/mutual exclusion\n");
 	{
-		T_Multi t[10];
+		T_Multi t[num_tasks];
 	}
 	printf("End Test: multi lock deadlock/mutual exclusion\n");
+	printf("Start Test: multi polymorphic lock deadlock/mutual exclusion\n");
+	{
+		T_Multi_Poly t[num_tasks];
+	}
+	printf("End Test: multi polymorphic lock deadlock/mutual exclusion\n");
 }
