Index: src/Tuples/Explode.cc
===================================================================
--- src/Tuples/Explode.cc	(revision 1aa4b712079414c5564f7303ac0f872c241ee810)
+++ src/Tuples/Explode.cc	(revision a64644c8182e47ed436d2d8d7dd8ea0e08ce8362)
@@ -23,4 +23,5 @@
 			Expression * applyAddr( Expression * expr, bool first = true ) {
 				if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( expr ) ){
+					foundUniqueExpr = true;
 					std::list< Expression * > exprs;
 					for ( Expression *& expr : tupleExpr->get_exprs() ) {
@@ -46,5 +47,8 @@
 				// should now be a tuple of addresses rather than the address of a tuple.
 				// Still, this code is a bit awkward, and could use some improvement.
-				foundUniqueExpr = true;
+				if ( dynamic_cast< AddressExpr * > ( uniqueExpr->get_expr() ) ) {
+					// this unique expression has already been mutated or otherwise shouldn't be (can't take the address-of an address-of expression)
+					return uniqueExpr;
+				}
 				UniqueExpr * newUniqueExpr = new UniqueExpr( applyAddr( uniqueExpr->get_expr() ), uniqueExpr->get_id() );
 				delete uniqueExpr;
