Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 6da49249c40e0918f2934629d6c9ab8505542597)
+++ src/SymTab/Validate.cc	(revision 8a3ecb9d480fc4ef7f8aafe585128c501f7a9384)
@@ -363,5 +363,7 @@
 				auto base = td->base;
 				assert( base );
-				return base->clone();
+				Type * ret = base->clone();
+				ret->get_qualifiers() = qualType->get_qualifiers();
+				return ret;
 			} else {
 				// .T => T is not a type name
@@ -383,4 +385,5 @@
 					if ( StructDecl * aggr = dynamic_cast< StructDecl * >( member ) ) {
 						if ( aggr->name == inst->name ) {
+							// TODO: is this case, and other non-TypeInstType cases, necessary?
 							return new StructInstType( qualType->get_qualifiers(), aggr );
 						}
@@ -399,9 +402,11 @@
 					}
 				} else if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( child ) ) {
-					// struct typedefs are being replaced by forward decls too early; move it to hoist struct
+					// name on the right is a typedef
 					if ( NamedTypeDecl * aggr = dynamic_cast< NamedTypeDecl * > ( member ) ) {
 						if ( aggr->name == inst->name ) {
 							assert( aggr->base );
-							return aggr->base->clone();
+							Type * ret = aggr->base->clone();
+							ret->get_qualifiers() = qualType->get_qualifiers();
+							return ret;
 						}
 					}
