Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 3627356cd68ced646615fd33bd46a05914f6da3a)
+++ src/GenPoly/Box.cc	(revision bd91e2afb6df92caef7c482fb7c8ab8a8a35bf42)
@@ -337,4 +337,5 @@
 			DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );
 			assert( dwt );
+			Type *memberType = dwt->get_type();
 
 			if ( firstMember ) {
@@ -342,5 +343,5 @@
 			} else {
 				// make sure all members after the first (automatically aligned at 0) are properly padded for alignment
-				addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), new AlignofExpr( dwt->get_type() ) ) );
+				addStmt( layoutDecl->get_statements(), makeAlignTo( derefVar( sizeParam ), new AlignofExpr( memberType->clone() ) ) );
 			}
 			
@@ -351,8 +352,8 @@
 
 			// add member size to current size
-			addExpr( layoutDecl->get_statements(), makeOp( "?+=?", derefVar( sizeParam ), new SizeofExpr( dwt->get_type() ) ) );
+			addExpr( layoutDecl->get_statements(), makeOp( "?+=?", derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) );
 			
 			// take max of member alignment and global alignment
-			addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( dwt->get_type() ) ) );
+			addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) );
 		}
 		// make sure the type is end-padded to a multiple of its alignment
@@ -391,10 +392,11 @@
 			DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *member );
 			assert( dwt );
+			Type *memberType = dwt->get_type();
 			
 			// take max member size and global size
-			addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( sizeParam ), new SizeofExpr( dwt->get_type() ) ) );
+			addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( sizeParam ), new SizeofExpr( memberType->clone() ) ) );
 			
 			// take max of member alignment and global alignment
-			addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( dwt->get_type() ) ) );
+			addStmt( layoutDecl->get_statements(), makeAssignMax( derefVar( alignParam ), new AlignofExpr( memberType->clone() ) ) );
 		}
 		// make sure the type is end-padded to a multiple of its alignment
