Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 2d11663e05da9b5f76704ffe64a5b46d0ec78c1a)
+++ src/AST/Convert.cpp	(revision f9a7cf02009d22652a44bc6eb45f9b86af2f2e54)
@@ -10,6 +10,6 @@
 // Created On       : Thu May 09 15::37::05 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Thu May 06 19:51:00 2019
-// Update Count     : 10
+// Last Modified On : Man Jun 10 11:51:00 2019
+// Update Count     : 11
 //
 
@@ -92,4 +92,9 @@
 
 	Label makeLabel(Statement * labelled, const ast::Label& label) {
+		// This probably will leak memory, but only until we get rid of the old tree.
+		if ( nullptr == labelled && label.location.isSet() ) {
+			labelled = new NullStmt();
+			labelled->location = label.location;
+		}
 		return Label(
 			label.name,
@@ -154,7 +159,4 @@
 		auto&& attr = get<Attribute>().acceptL( node->attributes );
 		if ( inCache( node ) ) {
-			if(node->name == "tmp") {
-				std::cerr << (void*)node << "(new) in cache " << (void*)this->node << "(old)" << std::endl;
-			}
 			return nullptr;
 		}
@@ -169,7 +171,4 @@
 			Type::FuncSpecifiers( node->funcSpec.val )
 		);
-		if(node->name == "tmp") {
-			std::cerr << (void*)node << "(new) created " << (void*)decl << "(old)" << std::endl;
-		}
 		return declWithTypePostamble( decl, node );
 	}
@@ -1390,10 +1389,4 @@
 	// Local Utilities:
 
-	#define construct(T, key, ...) ({ \
-		void * data = ::operator new(sizeof(T)); \
-		cache.emplace( key, (T*)data ); \
-		new (data) T( __VA_ARGS__ ); \
-	})
-
 	template<typename NewT, typename OldT>
 	NewT * getAccept1( OldT old ) {
@@ -1409,5 +1402,5 @@
 
 	template<typename NewT, typename OldC>
-	std::vector< ast::ptr<NewT> > getAcceptV( OldC& old ) {
+	std::vector< ast::ptr<NewT> > getAcceptV( const OldC& old ) {
 		std::vector< ast::ptr<NewT> > ret;
 		ret.reserve( old.size() );
@@ -1422,7 +1415,7 @@
 #	define GET_ACCEPT_V(child, type) \
 		getAcceptV< ast::type, decltype( old->child ) >( old->child )
-	
+
 	template<typename NewT, typename OldC>
-	std::deque< ast::ptr<NewT> > getAcceptD( OldC& old ) {
+	std::deque< ast::ptr<NewT> > getAcceptD( const OldC& old ) {
 		std::deque< ast::ptr<NewT> > ret;
 		for ( auto a : old ) {
@@ -1437,7 +1430,9 @@
 		getAcceptD< ast::type, decltype( old->child ) >( old->child )
 
-	ast::Label make_label(Label* old) {
+	ast::Label make_label(const Label* old) {
+		CodeLocation const & location =
+		    ( old->labelled ) ? old->labelled->location : CodeLocation();
 		return ast::Label(
-			old->labelled->location,
+			location,
 			old->name,
 			GET_ACCEPT_V(attributes, Attribute)
@@ -1470,18 +1465,9 @@
 
 	virtual void visit( ObjectDecl * old ) override final {
-		if( old->name == "tmp" ) {
-			std::cerr << "building parameters for" << (void*)old << std::endl;
-		}
 		auto&& type = GET_ACCEPT_1(type, Type);
 		auto&& init = GET_ACCEPT_1(init, Init);
 		auto&& bfwd = GET_ACCEPT_1(bitfieldWidth, Expr);
 		auto&& attr = GET_ACCEPT_V(attributes, Attribute);
-		if( old->name == "tmp" ) {
-			std::cerr << "checking cache for " << (void*)old << std::endl;
-		}
 		if ( inCache( old ) ) {
-			if( old->name == "tmp" ) {
-				std::cerr << (void*)old << "(old) in cache " << (void*)this->node << "(new)" << std::endl;
-			}
 			return;
 		}
@@ -1498,7 +1484,4 @@
 		);
 		cache.emplace(old, decl);
-		if( old->name == "tmp" ) {
-			std::cerr << (void*)old << "(old) added to cache with " << (void*)decl << "(new)" << std::endl;
-		}
 		assert(cache.find( old ) != cache.end());
 		decl->scopeLevel = old->scopeLevel;
@@ -1509,8 +1492,4 @@
 
 		this->node = decl;
-
-		if( old->name == "tmp" ) {
-			std::cerr << (void*)old << "(old) created " << (void*)this->node << "(new)" << std::endl;
-		}
 	}
 
@@ -1827,9 +1806,8 @@
 			}
 
-			Label label = old->originalTarget;
 			auto stmt = new ast::BranchStmt(
 				old->location,
 				kind,
-				make_label(&label),
+				make_label(&old->originalTarget),
 				GET_LABELS_V(old->labels)
 			);
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision 2d11663e05da9b5f76704ffe64a5b46d0ec78c1a)
+++ src/AST/Pass.hpp	(revision f9a7cf02009d22652a44bc6eb45f9b86af2f2e54)
@@ -262,7 +262,13 @@
 /// Used to restore values/functions/etc. when the Pass finishes visiting this node
 class WithGuards {
-	__pass::at_cleanup_t at_cleanup;
-
+	__pass::at_cleanup_t at_cleanup = [](__pass::cleanup_func_t, void*) {
+		std::cerr << "No cleanup function was set" << std::endl;
+		abort();
+	};
+
+	template< typename pass_t>
+	friend auto __pass::at_cleanup( pass_t & pass, int ) -> decltype( &pass.at_cleanup );
 public:
+
 	/// When this node is finished being visited, restore the value of a variable
 	template< typename T >
