Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision bfeb37a69a2103c6f286452df6318dc31a9c9238)
+++ src/AST/Convert.cpp	(revision 72b518fc0f393f86bf6bb43b0dd79189e24e9cf3)
@@ -650,4 +650,10 @@
 	}
 
+    const ast::Stmt * visit( const ast::CorunStmt * node ) override final {
+        // There is no old-AST CorunStmt, so this should never be called.
+		assert( !node );
+		return nullptr;
+	}
+
 	TypeSubstitution * convertTypeSubstitution(const ast::TypeSubstitution * src) {
 
Index: src/AST/Fwd.hpp
===================================================================
--- src/AST/Fwd.hpp	(revision bfeb37a69a2103c6f286452df6318dc31a9c9238)
+++ src/AST/Fwd.hpp	(revision 72b518fc0f393f86bf6bb43b0dd79189e24e9cf3)
@@ -67,4 +67,5 @@
 class ImplicitCtorDtorStmt;
 class MutexStmt;
+class CorunStmt;
 
 class Expr;
Index: src/AST/Node.cpp
===================================================================
--- src/AST/Node.cpp	(revision bfeb37a69a2103c6f286452df6318dc31a9c9238)
+++ src/AST/Node.cpp	(revision 72b518fc0f393f86bf6bb43b0dd79189e24e9cf3)
@@ -192,4 +192,6 @@
 template class ast::ptr_base< ast::MutexStmt, ast::Node::ref_type::weak >;
 template class ast::ptr_base< ast::MutexStmt, ast::Node::ref_type::strong >;
+template class ast::ptr_base< ast::CorunStmt, ast::Node::ref_type::weak >;
+template class ast::ptr_base< ast::CorunStmt, ast::Node::ref_type::strong >;
 template class ast::ptr_base< ast::Expr, ast::Node::ref_type::weak >;
 template class ast::ptr_base< ast::Expr, ast::Node::ref_type::strong >;
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision bfeb37a69a2103c6f286452df6318dc31a9c9238)
+++ src/AST/Pass.hpp	(revision 72b518fc0f393f86bf6bb43b0dd79189e24e9cf3)
@@ -171,4 +171,5 @@
 	const ast::Stmt *             visit( const ast::ImplicitCtorDtorStmt * ) override final;
 	const ast::Stmt *             visit( const ast::MutexStmt            * ) override final;
+    const ast::Stmt *             visit( const ast::CorunStmt            * ) override final;
 	const ast::Expr *             visit( const ast::ApplicationExpr      * ) override final;
 	const ast::Expr *             visit( const ast::UntypedExpr          * ) override final;
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision bfeb37a69a2103c6f286452df6318dc31a9c9238)
+++ src/AST/Pass.impl.hpp	(revision 72b518fc0f393f86bf6bb43b0dd79189e24e9cf3)
@@ -1121,4 +1121,17 @@
 
 //--------------------------------------------------------------------------
+// CorunStmt
+template< typename core_t >
+const ast::Stmt * ast::Pass< core_t >::visit( const ast::CorunStmt * node ) {
+	VISIT_START( node );
+
+	if ( __visit_children() ) {
+		maybe_accept( node, &CorunStmt::stmt );
+	}
+
+	VISIT_END( Stmt, node );
+}
+
+//--------------------------------------------------------------------------
 // ApplicationExpr
 template< typename core_t >
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision bfeb37a69a2103c6f286452df6318dc31a9c9238)
+++ src/AST/Print.cpp	(revision 72b518fc0f393f86bf6bb43b0dd79189e24e9cf3)
@@ -922,4 +922,15 @@
 	}
 
+    virtual const ast::Stmt * visit( const ast::CorunStmt * node ) override final {
+		os << "Corun Statement" << endl;
+		os << indent << "... with Statement: ";
+		++indent;
+		safe_print( node->stmt );
+		--indent;
+		os << endl;
+
+		return node;
+	}
+
 	virtual const ast::Expr * visit( const ast::ApplicationExpr * node ) override final {
 		++indent;
Index: src/AST/Stmt.hpp
===================================================================
--- src/AST/Stmt.hpp	(revision bfeb37a69a2103c6f286452df6318dc31a9c9238)
+++ src/AST/Stmt.hpp	(revision 72b518fc0f393f86bf6bb43b0dd79189e24e9cf3)
@@ -532,4 +532,18 @@
 };
 
+// Corun Statement
+class CorunStmt final : public Stmt {
+  public:
+	ptr<Stmt> stmt;
+
+	CorunStmt( const CodeLocation & loc, const Stmt * stmt, const std::vector<Label> && labels = {} )
+		: Stmt(loc, std::move(labels)), stmt(stmt) {}
+
+	const Stmt * accept( Visitor & v ) const override { return v.visit( this ); }
+  private:
+	CorunStmt * clone() const override { return new CorunStmt{ *this }; }
+	MUTATE_FRIEND
+};
+
 } // namespace ast
 
Index: src/AST/Visitor.hpp
===================================================================
--- src/AST/Visitor.hpp	(revision bfeb37a69a2103c6f286452df6318dc31a9c9238)
+++ src/AST/Visitor.hpp	(revision 72b518fc0f393f86bf6bb43b0dd79189e24e9cf3)
@@ -59,4 +59,5 @@
     virtual const ast::Stmt *             visit( const ast::ImplicitCtorDtorStmt * ) = 0;
     virtual const ast::Stmt *             visit( const ast::MutexStmt            * ) = 0;
+    virtual const ast::Stmt *             visit( const ast::CorunStmt            * ) = 0;
     virtual const ast::Expr *             visit( const ast::ApplicationExpr      * ) = 0;
     virtual const ast::Expr *             visit( const ast::UntypedExpr          * ) = 0;
