Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 1f7dc61b5b760185c1c66c9315fb7f309173dba5)
+++ src/ResolvExpr/Resolver.cc	(revision 6668a3ed6616003d19792926e5fac85310231168)
@@ -1112,5 +1112,5 @@
 		}
 
-		
+
 	} // anonymous namespace
 /// Establish post-resolver invariants for expressions
@@ -1158,5 +1158,5 @@
 
 	namespace {
-		
+
 
 		/// resolve `untyped` to the expression whose candidate satisfies `pred` with the
@@ -1905,6 +1905,21 @@
 
 			clause2.target.args.reserve( clause.target.args.size() );
+			const ast::StructDecl * decl_monitor = symtab.lookupStruct( "monitor$" );
 			for ( auto arg : argsCandidates.front() ) {
-				clause2.target.args.emplace_back( std::move( arg->expr ) );
+				const auto & loc = stmt->location;
+
+				ast::Expr * init = new ast::CastExpr( loc,
+					new ast::UntypedExpr( loc,
+						new ast::NameExpr( loc, "get_monitor" ),
+						{ arg->expr }
+					),
+					new ast::PointerType(
+						new ast::StructInstType(
+							decl_monitor
+						)
+					)
+				);
+
+				clause2.target.args.emplace_back( findSingleExpression( init, symtab ) );
 			}
 
@@ -2077,5 +2092,5 @@
 		if (auto functionDecl = decl.as<ast::FunctionDecl>()) {
 			// xxx - can intrinsic gen ever fail?
-			if (functionDecl->linkage == ast::Linkage::AutoGen) { 
+			if (functionDecl->linkage == ast::Linkage::AutoGen) {
 				auto mutDecl = mutate(functionDecl);
 				mutDecl->isDeleted = true;
