Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision c7f12a486e42e8b7e1569779966df2681cc1ed38)
+++ src/GenPoly/Box.cc	(revision 637c139a9dc1ec8c55bede326c893f33fb83ccd1)
@@ -354,14 +354,10 @@
 		addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( sizeParam ), new ConstantExpr( Constant::from_ulong( 0 ) ) ) );
 		addExpr( layoutDecl->get_statements(), makeOp( "?=?", derefVar( alignParam ), new ConstantExpr( Constant::from_ulong( 1 ) ) ) );
-		unsigned long n_members = 0;
-		bool firstMember = true;
-		for ( Declaration* member : structDecl->get_members() ) {
-			DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( member );
+		for ( auto index_member : enumerate( structDecl->members ) ) {
+			DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( index_member.val );
 			assert( dwt );
 			Type *memberType = dwt->get_type();
 
-			if ( firstMember ) {
-				firstMember = false;
-			} else {
+			if ( 0 < index_member.idx ) {
 				// 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( memberType->clone() ) ) );
@@ -369,7 +365,6 @@
 
 			// place current size in the current offset index
-			addExpr( layoutDecl->get_statements(), makeOp( "?=?", makeOp( "?[?]", new VariableExpr( offsetParam ), new ConstantExpr( Constant::from_ulong( n_members ) ) ),
+			addExpr( layoutDecl->get_statements(), makeOp( "?=?", makeOp( "?[?]", new VariableExpr( offsetParam ), new ConstantExpr( Constant::from_ulong( index_member.idx ) ) ),
 			                                                      derefVar( sizeParam ) ) );
-			++n_members;
 
 			// add member size to current size
