Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 86c934afc97d8a22e2f4abd6d1b2a93b1f569acf)
+++ src/Common/PassVisitor.impl.h	(revision 834b89258d7f4a00204b5a1203c6de5a5161498f)
@@ -1018,10 +1018,42 @@
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( WaitForStmt * node ) {
-	VISIT_BODY( node );
+	VISIT_START( node );
+
+	for( auto & clause : node->clauses ) {
+		maybeAccept_impl( clause.target.function, *this );
+		maybeAccept_impl( clause.target.arguments, *this );
+
+		maybeAccept_impl( clause.statement, *this );
+		maybeAccept_impl( clause.condition, *this );
+	}
+
+	maybeAccept_impl( node->timeout.time, *this );
+	maybeAccept_impl( node->timeout.statement, *this );
+	maybeAccept_impl( node->timeout.condition, *this );
+	maybeAccept_impl( node->orelse.statement, *this );
+	maybeAccept_impl( node->orelse.condition, *this );
+
+	VISIT_END( node );
 }
 
 template< typename pass_type >
 Statement * PassVisitor< pass_type >::mutate( WaitForStmt * node ) {
-	MUTATE_BODY( Statement, node );
+	MUTATE_START( node );
+
+	for( auto & clause : node->clauses ) {
+		maybeMutate_impl( clause.target.function, *this );
+		maybeMutate_impl( clause.target.arguments, *this );
+
+		maybeMutate_impl( clause.statement, *this );
+		maybeMutate_impl( clause.condition, *this );
+	}
+
+	maybeMutate_impl( node->timeout.time, *this );
+	maybeMutate_impl( node->timeout.statement, *this );
+	maybeMutate_impl( node->timeout.condition, *this );
+	maybeMutate_impl( node->orelse.statement, *this );
+	maybeMutate_impl( node->orelse.condition, *this );
+
+	MUTATE_END( Statement, node );
 }
 
