Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision ff39851102f29c0466f925cb5ee671c50e7fa955)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision ebcb7bae48a91da35fda728980c5e82dc87fd7e6)
@@ -1558,17 +1558,25 @@
 		AlternativeFinder firstFinder( indexer, env );
 		firstFinder.findWithAdjustment( conditionalExpr->get_arg1() );
+		if ( firstFinder.alternatives.empty() ) return;
+		// find alternatives for true expression
+		AlternativeFinder secondFinder( indexer, env );
+		secondFinder.findWithAdjustment( conditionalExpr->get_arg2() );
+		if ( secondFinder.alternatives.empty() ) return;
+		// find alterantives for false expression
+		AlternativeFinder thirdFinder( indexer, env );
+		thirdFinder.findWithAdjustment( conditionalExpr->get_arg3() );
+		if ( thirdFinder.alternatives.empty() ) return;
 		for ( AltList::const_iterator first = firstFinder.alternatives.begin(); first != firstFinder.alternatives.end(); ++first ) {
-			// find alternatives for true expression
-			AlternativeFinder secondFinder( indexer, first->env );
-			secondFinder.findWithAdjustment( conditionalExpr->get_arg2() );
 			for ( AltList::const_iterator second = secondFinder.alternatives.begin(); second != secondFinder.alternatives.end(); ++second ) {
-				// find alterantives for false expression
-				AlternativeFinder thirdFinder( indexer, second->env );
-				thirdFinder.findWithAdjustment( conditionalExpr->get_arg3() );
 				for ( AltList::const_iterator third = thirdFinder.alternatives.begin(); third != thirdFinder.alternatives.end(); ++third ) {
+					TypeEnvironment compositeEnv;
+					compositeEnv.simpleCombine( first->env );
+					compositeEnv.simpleCombine( second->env );
+					compositeEnv.simpleCombine( third->env );
+
 					// unify true and false types, then infer parameters to produce new alternatives
 					OpenVarSet openVars;
 					AssertionSet needAssertions, haveAssertions;
-					Alternative newAlt( 0, third->env, first->cost + second->cost + third->cost );
+					Alternative newAlt( 0, compositeEnv, first->cost + second->cost + third->cost );
 					Type* commonType = nullptr;
 					if ( unify( second->expr->get_result(), third->expr->get_result(), newAlt.env, needAssertions, haveAssertions, openVars, indexer, commonType ) ) {
