Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision 7b2c0a99c8399186a163082542761fcc5f9dfb56)
+++ src/GenPoly/InstantiateGeneric.cc	(revision acd738aa4b3c107e0d22096954fcb98fa69acfe6)
@@ -367,7 +367,7 @@
 				concDecl->set_body( inst->get_baseStruct()->has_body() );
 				substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
-				DeclMutator::addDeclaration( concDecl );
-				insert( inst, typeSubs, concDecl );
+				insert( inst, typeSubs, concDecl ); // must insert before recursion
 				concDecl->acceptMutator( *this ); // recursively instantiate members
+				DeclMutator::addDeclaration( concDecl ); // must occur before declaration is added so that member instantiations appear first
 			}
 			StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() );
@@ -422,7 +422,7 @@
 				concDecl->set_body( inst->get_baseUnion()->has_body() );
 				substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
-				DeclMutator::addDeclaration( concDecl );
-				insert( inst, typeSubs, concDecl );
+				insert( inst, typeSubs, concDecl ); // must insert before recursion
 				concDecl->acceptMutator( *this ); // recursively instantiate members
+				DeclMutator::addDeclaration( concDecl ); // must occur before declaration is added so that member instantiations appear first
 			}
 			UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() );
