Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision f474e917671c80fd81b2ffce8b4dac26709b333e)
+++ src/AST/Convert.cpp	(revision bc4bea8d55e65e4a11ce31fe3543dd8270eccfb8)
@@ -47,7 +47,9 @@
 namespace {
 
-// This is to preserve the SymTab::dereferenceOperator hack. It does not (and perhaps should not)
+// This is to preserve the FindSpecialDecls hack. It does not (and perhaps should not)
 // allow us to use the same stratagy in the new ast.
 ast::FunctionDecl * dereferenceOperator = nullptr;
+ast::StructDecl   * dtorStruct = nullptr;
+ast::FunctionDecl * dtorStructDestroy = nullptr;
 
 }
@@ -176,4 +178,7 @@
 			Validate::dereferenceOperator = decl;
 		}
+		if ( dtorStructDestroy == node ) {
+			Validate::dtorStructDestroy = decl;
+		}
 		return declWithTypePostamble( decl, node );
 	}
@@ -231,4 +236,9 @@
 			LinkageSpec::Spec( node->linkage.val )
 		);
+
+		if ( dtorStruct == node ) {
+			Validate::dtorStruct = decl;
+		}
+
 		return aggregatePostamble( decl, node );
 	}
@@ -1458,4 +1468,8 @@
 			dereferenceOperator = decl;
 		}
+
+		if ( Validate::dtorStructDestroy == old ) {
+			dtorStructDestroy = decl;
+		}
 	}
 
@@ -1479,4 +1493,8 @@
 
 		this->node = decl;
+
+		if ( Validate::dtorStruct == old ) {
+			dtorStruct = decl;
+		}
 	}
 
Index: src/AST/Node.hpp
===================================================================
--- src/AST/Node.hpp	(revision f474e917671c80fd81b2ffce8b4dac26709b333e)
+++ src/AST/Node.hpp	(revision bc4bea8d55e65e4a11ce31fe3543dd8270eccfb8)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 8 10:27:04 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Thu May 23 16:00:00 2019
-// Update Count     : 4
+// Last Modified On : Mon Jun  3 13:26:00 2019
+// Update Count     : 5
 //
 
@@ -107,5 +107,5 @@
 	ptr_base() : node(nullptr) {}
 	ptr_base( const node_t * n ) : node(n) { if( node ) _inc(node); }
-	~ptr_base() { if( node ) _dec(node); }
+	~ptr_base() { if( node ) { auto tmp = node; node = nullptr; _dec(tmp); } }
 
 	ptr_base( const ptr_base & o ) : node(o.node) {
@@ -127,5 +127,5 @@
 	template<typename o_node_t>
 	ptr_base & operator=( const o_node_t * node ) {
-		assign( node ? strict_dynamic_cast<const node_t *>(node) : nullptr );
+		assign( strict_dynamic_cast<const node_t *, nullptr>(node) );
 		return *this;
 	}
Index: src/AST/Type.hpp
===================================================================
--- src/AST/Type.hpp	(revision f474e917671c80fd81b2ffce8b4dac26709b333e)
+++ src/AST/Type.hpp	(revision bc4bea8d55e65e4a11ce31fe3543dd8270eccfb8)
@@ -48,4 +48,5 @@
 
 	Type * set_const( bool v ) { qualifiers.is_const = v; return this; }
+	Type * set_volatile( bool v ) { qualifiers.is_volatile = v; return this; }
 	Type * set_restrict( bool v ) { qualifiers.is_restrict = v; return this; }
 	Type * set_lvalue( bool v ) { qualifiers.is_lvalue = v; return this; }
Index: src/AST/TypeSubstitution.cpp
===================================================================
--- src/AST/TypeSubstitution.cpp	(revision f474e917671c80fd81b2ffce8b4dac26709b333e)
+++ src/AST/TypeSubstitution.cpp	(revision bc4bea8d55e65e4a11ce31fe3543dd8270eccfb8)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 15:54:35 2017
-// Update Count     : 4
+// Last Modified By : Andrew Beach
+// Last Modified On : Mon Jun  3 13:26:00 2017
+// Update Count     : 5
 //
 
@@ -26,12 +26,5 @@
 }
 
-TypeSubstitution::~TypeSubstitution() {
-	for ( TypeEnvType::iterator i = typeEnv.begin(); i != typeEnv.end(); ++i ) {
-		delete( i->second );
-	}
-	for ( VarEnvType::iterator i = varEnv.begin(); i != varEnv.end(); ++i ) {
-		delete( i->second );
-	}
-}
+TypeSubstitution::~TypeSubstitution() {}
 
 TypeSubstitution &TypeSubstitution::operator=( const TypeSubstitution &other ) {
