Index: src/Concurrency/KeywordsNew.cpp
===================================================================
--- src/Concurrency/KeywordsNew.cpp	(revision f27331cadb91ea3ae3579341d5753e810e16d653)
+++ src/Concurrency/KeywordsNew.cpp	(revision 56f519bcc1a437269e9985dafac21f245561e354)
@@ -10,6 +10,6 @@
 // Created On       : Tue Nov 16  9:53:00 2021
 // Last Modified By : Andrew Beach
-// Last Modified On : Tue Nov 30 11:04:00 2021
-// Update Count     : 0
+// Last Modified On : Wed Dec  1 11:24:00 2021
+// Update Count     : 1
 //
 
@@ -42,7 +42,8 @@
 	const ast::Stmt * postvisit( const ast::MutexStmt * stmt );
 
-	std::vector<const ast::DeclWithType *> findMutexArgs(
+	static std::vector<const ast::DeclWithType *> findMutexArgs(
 			const ast::FunctionDecl * decl, bool & first );
-	void validate( const ast::DeclWithType * decl );
+	static void validate( const ast::DeclWithType * decl );
+
 	ast::CompoundStmt * addDtorStatements( const ast::FunctionDecl* func, const ast::CompoundStmt *, const std::vector<const ast::DeclWithType *> &);
 	ast::CompoundStmt * addStatements( const ast::FunctionDecl* func, const ast::CompoundStmt *, const std::vector<const ast::DeclWithType *> &);
@@ -50,5 +51,5 @@
 	ast::CompoundStmt * addThreadDtorStatements( const ast::FunctionDecl* func, const ast::CompoundStmt * body, const std::vector<const ast::DeclWithType *> & args );
 
-public:
+private:
 	const ast::StructDecl * monitor_decl = nullptr;
 	const ast::StructDecl * guard_decl = nullptr;
@@ -98,11 +99,11 @@
 
 	// Monitors can't be constructed with mutual exclusion.
-	if ( CodeGen::isConstructor( decl->name ) && !is_first_argument_mutex ) {
-		SemanticError( decl, "constructors cannot have mutex parameters" );
+	if ( CodeGen::isConstructor( decl->name ) && is_first_argument_mutex ) {
+		SemanticError( decl, "constructors cannot have mutex parameters\n" );
 	}
 
 	// It makes no sense to have multiple mutex parameters for the destructor.
 	if ( isDtor && mutexArgs.size() != 1 ) {
-		SemanticError( decl, "destructors can only have 1 mutex argument" );
+		SemanticError( decl, "destructors can only have 1 mutex argument\n" );
 	}
 
@@ -172,12 +173,9 @@
 	for ( auto arg : decl->params ) {
 		const ast::Type * type = arg->get_type();
-		if ( !type->is_mutex() ) continue;
-
-		if ( once ) {
-			first = true;
-			once = false;
+		if ( type->is_mutex() ) {
+			if ( once ) first = true;
+			mutexArgs.push_back( arg.get() );
 		}
-
-		mutexArgs.push_back( arg.get() );
+		once = false;
 	}
 	return mutexArgs;
Index: src/Validate/CompoundLiteral.cpp
===================================================================
--- src/Validate/CompoundLiteral.cpp	(revision f27331cadb91ea3ae3579341d5753e810e16d653)
+++ src/Validate/CompoundLiteral.cpp	(revision 56f519bcc1a437269e9985dafac21f245561e354)
@@ -27,6 +27,5 @@
 
 struct CompoundLiteral final :
-		public ast::WithDeclsToAdd<>,
-		public ast::WithVisitorRef<CompoundLiteral> {
+		public ast::WithDeclsToAdd<> {
 	ast::Storage::Classes storageClasses;
 
@@ -44,5 +43,6 @@
 
 	// Transform: [storageClasses] ... (struct S){...} ...
-	// Into:      [storageClasses] struct S _compLit = {...}; / ... temp ...
+	// Into:      [storageClasses] struct S _compLit = {...};
+	//                             ... _compLit ...
 	ast::ObjectDecl * temp = new ast::ObjectDecl(
 		expr->location,
Index: tests/concurrent/.expect/ctor-check.txt
===================================================================
--- tests/concurrent/.expect/ctor-check.txt	(revision 56f519bcc1a437269e9985dafac21f245561e354)
+++ tests/concurrent/.expect/ctor-check.txt	(revision 56f519bcc1a437269e9985dafac21f245561e354)
@@ -0,0 +1,8 @@
+concurrent/ctor-check.cfa:11:1 error: constructors cannot have mutex parameters
+?{}: function
+... with parameters
+  lvalue reference to instance of struct Empty with body
+... returning nothing
+ with body
+  Compound Statement:
+
Index: tests/concurrent/ctor-check.cfa
===================================================================
--- tests/concurrent/ctor-check.cfa	(revision 56f519bcc1a437269e9985dafac21f245561e354)
+++ tests/concurrent/ctor-check.cfa	(revision 56f519bcc1a437269e9985dafac21f245561e354)
@@ -0,0 +1,15 @@
+#include <monitor.hfa>
+
+monitor Empty {};
+
+struct Test {};
+
+// Should work:
+void ?{}(Test & this, Empty & mutex mon) {}
+
+// Should not work:
+void ?{}(Empty & mutex this) {}
+
+int main(void) {
+	printf("done\n");
+}
