Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision d75038c7edb1fbc46c79bb4e32e79ce22012ddcc)
+++ src/GenPoly/Box.cc	(revision ae7014e7b75d45382eeb01c420e11ca6894a5de9)
@@ -1401,16 +1401,14 @@
 					std::list< TypeDecl* >::const_iterator forallIt = forallParams.begin();
 					for ( ; tyIt != tyParams.end() && forallIt != forallParams.end(); ++tyIt, ++forallIt ) {
-						if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue; // skip types with no assign op (ftype/dtype)
-
-						std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions();
-						assert( ! asserts.empty() && "Type param needs assignment operator assertion" );
-						DeclarationWithType *actualDecl = asserts.front();
-						TypeInstType *actualType = isTypeInstAssignment( actualDecl );
-						assert( actualType && "First assertion of type with assertions should be assignment operator" );
+						// Add appropriate mapping to assignment expression environment
 						TypeExpr *formalTypeExpr = dynamic_cast< TypeExpr* >( *tyIt );
 						assert( formalTypeExpr && "type parameters must be type expressions" );
 						Type *formalType = formalTypeExpr->get_type();
-						assignExpr->get_env()->add( actualType->get_name(), formalType );
-						
+						assignExpr->get_env()->add( (*forallIt)->get_name(), formalType );
+
+						// skip types with no assign op (ftype/dtype)
+						if ( (*forallIt)->get_kind() != TypeDecl::Any ) continue;
+
+						// find assignment operator for formal type
 						DeclarationWithType *assertAssign = 0;
 						if ( TypeInstType *formalTypeInstType = dynamic_cast< TypeInstType* >( formalType ) ) {
@@ -1426,6 +1424,9 @@
 							}
 						}
-						
-
+
+						// add inferred parameter for field assignment operator to assignment expression
+						std::list< DeclarationWithType* > &asserts = (*forallIt)->get_assertions();
+						assert( ! asserts.empty() && "Type param needs assignment operator assertion" );
+						DeclarationWithType *actualDecl = asserts.front();
 						assignExpr->get_inferParams()[ actualDecl->get_uniqueId() ]
 							= ParamEntry( assertAssign->get_uniqueId(), assertAssign->get_type()->clone(), actualDecl->get_type()->clone(), wrapFunctionDecl( assertAssign ) );
