Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision 234b1cb4afd88ccf2b1f3e001a2eae5dc12ca39b)
+++ src/AST/Expr.hpp	(revision 9af00d231cf219857c0daa7acd7bcf57da94ac23)
@@ -248,4 +248,7 @@
 	AddressExpr( const CodeLocation & loc, const Expr * a );
 
+	/// Generate AddressExpr wrapping given expression at same location
+	AddressExpr( const Expr * a ) : AddressExpr( a->location, a ) {}
+
 	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
 private:
@@ -281,4 +284,10 @@
 	/// Cast-to-void
 	CastExpr( const CodeLocation & loc, const Expr * a, GeneratedFlag g = GeneratedCast );
+
+	/// Wrap a cast expression around an existing expression (always generated)
+	CastExpr( const Expr * a, const Type * to ) : CastExpr( a->location, a, to, GeneratedCast ) {}
+
+	/// Wrap a cast-to-void expression around an existing expression (always generated)
+	CastExpr( const Expr * a ) : CastExpr( a->location, a, GeneratedCast ) {}
 
 	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
Index: src/AST/Node.hpp
===================================================================
--- src/AST/Node.hpp	(revision 234b1cb4afd88ccf2b1f3e001a2eae5dc12ca39b)
+++ src/AST/Node.hpp	(revision 9af00d231cf219857c0daa7acd7bcf57da94ac23)
@@ -17,4 +17,5 @@
 
 #include <cassert>
+#include <cstddef>     // for nullptr_t
 #include <iosfwd>
 #include <type_traits> // for remove_reference
@@ -181,4 +182,10 @@
 	}
 
+	ptr_base & operator=( std::nullptr_t ) {
+		if ( node ) _dec(node);
+		node = nullptr;
+		return *this;
+	}
+
 	ptr_base & operator=( const ptr_base & o ) {
 		assign(o.node);
Index: src/AST/Stmt.hpp
===================================================================
--- src/AST/Stmt.hpp	(revision 234b1cb4afd88ccf2b1f3e001a2eae5dc12ca39b)
+++ src/AST/Stmt.hpp	(revision 9af00d231cf219857c0daa7acd7bcf57da94ac23)
@@ -61,6 +61,6 @@
 	CompoundStmt( CompoundStmt&& o ) = default;
 
-	void push_back( Stmt * s ) { kids.emplace_back( s ); }
-	void push_front( Stmt * s ) { kids.emplace_front( s ); }
+	void push_back( const Stmt * s ) { kids.emplace_back( s ); }
+	void push_front( const Stmt * s ) { kids.emplace_front( s ); }
 
 	const CompoundStmt * accept( Visitor & v ) const override { return v.visit( this ); }
