Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 25a8631f08338cc1669e7078819234c717d97f6b)
+++ src/GenPoly/Box.cc	(revision fea3faac1cd99d58dc1dd738883cfb602a81f178)
@@ -202,5 +202,5 @@
 		};
 
-		/// Replaces initialization of polymorphic values with alloca, declaration of dtype/ftype with appropriate void expression, and sizeof expressions of polymorphic types with the proper variable
+		/// Replaces initialization of polymorphic values with alloca, declaration of dtype/ftype with appropriate void expression, sizeof expressions of polymorphic types with the proper variable, and strips fields from generic struct declarations.
 		class Pass3 final : public PolyMutator {
 		  public:
@@ -210,4 +210,6 @@
 			using PolyMutator::mutate;
 			virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ) override;
+			virtual Declaration *mutate( StructDecl *structDecl ) override;
+			virtual Declaration *mutate( UnionDecl *unionDecl ) override;
 			virtual ObjectDecl *mutate( ObjectDecl *objectDecl ) override;
 			virtual TypedefDecl *mutate( TypedefDecl *objectDecl ) override;
@@ -1857,4 +1859,19 @@
 		}
 
+		/// Strips the members from a generic aggregate
+		void stripGenericMembers(AggregateDecl* decl) {
+			if ( ! decl->get_parameters().empty() ) decl->get_members().clear();
+		}
+
+		Declaration *Pass3::mutate( StructDecl *structDecl ) {
+			stripGenericMembers( structDecl );
+			return structDecl;
+		}
+		
+		Declaration *Pass3::mutate( UnionDecl *unionDecl ) {
+			stripGenericMembers( unionDecl );
+			return unionDecl;
+		}
+
 		TypeDecl * Pass3::mutate( TypeDecl *typeDecl ) {
 //   Initializer *init = 0;
