Index: src/Tuples/TupleAssignment.cc
===================================================================
--- src/Tuples/TupleAssignment.cc	(revision 65660bd065cbc0b68c92db2425b5984d675dff58)
+++ src/Tuples/TupleAssignment.cc	(revision ac9ca967fc4b0004f809382a113690d4c01cae00)
@@ -142,5 +142,9 @@
 		for ( std::list< Expression * >::iterator i = new_assigns.begin(); i != new_assigns.end(); ++i ) {
 			ResolvExpr::AlternativeFinder finder( currentFinder.get_indexer(), currentFinder.get_environ() );
-			finder.findWithAdjustment(*i);
+			try {
+				finder.findWithAdjustment(*i);
+			} catch (...) {
+				return; // xxx - no match should not mean failure, it just means this particular tuple assignment isn't valid
+			}
 			// prune expressions that don't coincide with
 			ResolvExpr::AltList alts = finder.get_alternatives();
@@ -157,7 +161,7 @@
 		}
 		// xxx - need to do this??
-		// TypeEnvironment compositeEnv;
-		// simpleCombineEnvironments( i->begin(), i->end(), compositeEnv );
-		currentFinder.get_alternatives().push_front( ResolvExpr::Alternative(new TupleAssignExpr(solved_assigns, matcher->tmpDecls), currentFinder.get_environ(), ResolvExpr::sumCost( current ) ) );
+		ResolvExpr::TypeEnvironment compositeEnv;
+		simpleCombineEnvironments( current.begin(), current.end(), compositeEnv );
+		currentFinder.get_alternatives().push_front( ResolvExpr::Alternative(new TupleAssignExpr(solved_assigns, matcher->tmpDecls), compositeEnv, ResolvExpr::sumCost( current ) ) );
 	}
 
