Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision dd857bb5c31f5f9dbb8ca6e44a3191e0ad19fbbe)
+++ src/AST/Convert.cpp	(revision 2a54479cc754e390c11af4b63bed63a65cd98e28)
@@ -10,6 +10,6 @@
 // Created On       : Thu May 09 15::37::05 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed May 29 17:05:00 2019
-// Update Count     : 9
+// Last Modified On : Thu May 06 19:51:00 2019
+// Update Count     : 10
 //
 
@@ -49,4 +49,5 @@
 // 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::Type * sizeType = nullptr;
 ast::FunctionDecl * dereferenceOperator = nullptr;
 ast::StructDecl   * dtorStruct = nullptr;
@@ -709,7 +710,5 @@
 		auto expr = visitBaseExpr( node,
 			new MemberExpr(
-				inCache(node->member) ?
-					dynamic_cast<DeclarationWithType *>(this->node) :
-					get<DeclarationWithType>().accept1(node->member),
+				get<DeclarationWithType>().accept1(node->member),
 				get<Expression>().accept1(node->aggregate)
 			)
@@ -722,7 +721,5 @@
 		auto expr = visitBaseExpr( node,
 			new VariableExpr(
-				inCache(node->var) ?
-					dynamic_cast<DeclarationWithType *>(this->node) :
-					get<DeclarationWithType>().accept1(node->var)
+				get<DeclarationWithType>().accept1(node->var)
 			)
 		);
@@ -819,7 +816,5 @@
 			new OffsetofExpr(
 				get<Type>().accept1(node->type),
-				inCache(node->member) ?
-					dynamic_cast<DeclarationWithType *>(this->node) :
-					get<DeclarationWithType>().accept1(node->member)
+				get<DeclarationWithType>().accept1(node->member)
 			)
 		);
@@ -1082,5 +1077,10 @@
 
 	const ast::Type * visit( const ast::BasicType * node ) override final {
-		this->node = new BasicType{ cv( node ), (BasicType::Kind)(unsigned)node->kind };
+		auto type = new BasicType{ cv( node ), (BasicType::Kind)(unsigned)node->kind };
+		// I believe this should always be a BasicType.
+		if ( sizeType == node ) {
+			Validate::SizeType = type;
+		}
+		this->node = type;
 		return nullptr;
 	}
@@ -2092,7 +2092,5 @@
 			new ast::MemberExpr(
 				old->location,
-				inCache(old->member) ?
-					dynamic_cast<ast::DeclWithType *>(this->node) :
-					GET_ACCEPT_1(member, DeclWithType),
+				GET_ACCEPT_1(member, DeclWithType),
 				GET_ACCEPT_1(aggregate, Expr)
 			)
@@ -2104,7 +2102,5 @@
 			new ast::VariableExpr(
 				old->location,
-				inCache(old->var) ?
-					dynamic_cast<ast::DeclWithType *>(this->node) :
-					GET_ACCEPT_1(var, DeclWithType)
+				GET_ACCEPT_1(var, DeclWithType)
 			)
 		);
@@ -2234,7 +2230,5 @@
 				old->location,
 				GET_ACCEPT_1(type, Type),
-				inCache(old->member) ?
-					dynamic_cast<ast::DeclWithType *>(this->node) :
-					GET_ACCEPT_1(member, DeclWithType)
+				GET_ACCEPT_1(member, DeclWithType)
 			)
 		);
@@ -2472,5 +2466,10 @@
 
 	virtual void visit( BasicType * old ) override final {
-		this->node = new ast::BasicType{ (ast::BasicType::Kind)(unsigned)old->kind, cv( old ) };
+		auto type = new ast::BasicType{ (ast::BasicType::Kind)(unsigned)old->kind, cv( old ) };
+		// I believe this should always be a BasicType.
+		if ( Validate::SizeType == old ) {
+			sizeType = type;
+		}
+		this->node = type;
 	}
 
