Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision ebcb7bae48a91da35fda728980c5e82dc87fd7e6)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 320eb73a17c6f83eb7bf2bba712e6e451474a9c7)
@@ -1544,10 +1544,16 @@
 		AlternativeFinder firstFinder( indexer, env );
 		firstFinder.findWithAdjustment( logicalExpr->get_arg1() );
+		if ( firstFinder.alternatives.empty() ) return;
+		AlternativeFinder secondFinder( indexer, env );
+		secondFinder.findWithAdjustment( logicalExpr->get_arg2() );
+		if ( secondFinder.alternatives.empty() ) return;
 		for ( AltList::const_iterator first = firstFinder.alternatives.begin(); first != firstFinder.alternatives.end(); ++first ) {
-			AlternativeFinder secondFinder( indexer, first->env );
-			secondFinder.findWithAdjustment( logicalExpr->get_arg2() );
 			for ( AltList::const_iterator second = secondFinder.alternatives.begin(); second != secondFinder.alternatives.end(); ++second ) {
+				TypeEnvironment compositeEnv;
+				compositeEnv.simpleCombine( first->env );
+				compositeEnv.simpleCombine( second->env );
+
 				LogicalExpr *newExpr = new LogicalExpr( first->expr->clone(), second->expr->clone(), logicalExpr->get_isAnd() );
-				alternatives.push_back( Alternative( newExpr, second->env, first->cost + second->cost ) );
+				alternatives.push_back( Alternative( newExpr, compositeEnv, first->cost + second->cost ) );
 			}
 		}
@@ -1609,11 +1615,16 @@
 		AlternativeFinder firstFinder( indexer, env );
 		firstFinder.findWithAdjustment( rangeExpr->get_low() );
+		if ( firstFinder.alternatives.empty() ) return;
+		AlternativeFinder secondFinder( indexer, env );
+		secondFinder.findWithAdjustment( rangeExpr->get_high() );
+		if ( secondFinder.alternatives.empty() ) return;
 		for ( AltList::const_iterator first = firstFinder.alternatives.begin(); first != firstFinder.alternatives.end(); ++first ) {
-			AlternativeFinder secondFinder( indexer, first->env );
-			secondFinder.findWithAdjustment( rangeExpr->get_high() );
 			for ( AltList::const_iterator second = secondFinder.alternatives.begin(); second != secondFinder.alternatives.end(); ++second ) {
+				TypeEnvironment compositeEnv;
+				compositeEnv.simpleCombine( first->env );
+				compositeEnv.simpleCombine( second->env );
 				OpenVarSet openVars;
 				AssertionSet needAssertions, haveAssertions;
-				Alternative newAlt( 0, second->env, first->cost + second->cost );
+				Alternative newAlt( 0, compositeEnv, first->cost + second->cost );
 				Type* commonType = nullptr;
 				if ( unify( first->expr->get_result(), second->expr->get_result(), newAlt.env, needAssertions, haveAssertions, openVars, indexer, commonType ) ) {
