Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision 5ebb2fbc4b016fd78c06c9c803482afa39068689)
+++ src/GenPoly/InstantiateGeneric.cc	(revision e15df4c2fcf95d96cb620db7060d7c9e78f55d63)
@@ -220,22 +220,23 @@
 			assert(paramType && "Aggregate parameters should be type expressions");
 
-			switch ( (*baseParam)->get_kind() ) {
-			case TypeDecl::Any: {
-				// substitute parameter for otype; makes the type concrete or dynamic depending on the parameter
+			if ( (*baseParam)->isComplete() ) {
+				// substitute parameter for complete (otype or sized dtype) type; makes the struct concrete or dynamic depending on the parameter
 				out.push_back( paramType->clone() );
 				gt |= isPolyType( paramType->get_type() ) ? genericType::dynamic : genericType::concrete;
-				break;
-			}
-			case TypeDecl::Dtype:
-				// can pretend that any dtype is `void`
-				out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
-				break;
-			case TypeDecl::Ftype:
-				// can pretend that any ftype is `void (*)(void)`
-				out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
-				break;
-			case TypeDecl::Ttype:
-				assertf( false, "Ttype parameters are not currently allowed as parameters to generic types." );
-				break;
+			} else switch ( (*baseParam)->get_kind() ) {
+				case TypeDecl::Dtype:
+					// can pretend that any incomplete dtype is `void`
+					out.push_back( new TypeExpr( new VoidType( Type::Qualifiers() ) ) );
+					break;
+				case TypeDecl::Ftype:
+					// can pretend that any ftype is `void (*)(void)`
+					out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
+					break;
+				case TypeDecl::Ttype:
+					assertf( false, "Ttype parameters are not currently allowed as parameters to generic types." );
+					break;
+				case TypeDecl::Any:
+					assertf( false, "otype parameters handled by baseParam->isComplete()." );
+					break;
 			}
 		}
