Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 2a7629736950233b6ec108b88f8129a13e0c5912)
+++ src/GenPoly/Box.cc	(revision b3ab8f014c6536b34905d8762958940b61efa2c2)
@@ -904,6 +904,16 @@
 					return;
 				} else if ( arg->get_results().front()->get_isLvalue() ) {
-					// VariableExpr and MemberExpr are lvalues
-					arg = new AddressExpr( arg );
+					// VariableExpr and MemberExpr are lvalues; need to check this isn't coming from the second arg of a comma expression though (not an lvalue)
+					if ( CommaExpr *commaArg = dynamic_cast< CommaExpr* >( arg ) ) {
+						// hoist first half of expression and return second
+						stmtsToAdd.push_back( new ExprStmt( noLabels, commaArg->get_arg1() ) );
+						arg = new AddressExpr( commaArg->get_arg2() );
+						
+						commaArg->set_arg1( 0 );
+						commaArg->set_arg2( 0 );
+						delete commaArg;
+					} else {
+						arg = new AddressExpr( arg );
+					}
 				} else {
 					// use type computed in unification to declare boxed variables
@@ -1000,6 +1010,4 @@
 			} // for
 		}
-
-
 
 		FunctionDecl *Pass1::makeAdapter( FunctionType *adaptee, FunctionType *realType, const std::string &mangleName, const TyVarMap &tyVars ) {
