Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision b6fe7e6c491f467e31d7ef488c6c0c23df6534a8)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 02cea2d984751c7c758ec159716a71562ab4c9f7)
@@ -197,5 +197,5 @@
 	}
 
-	void AlternativeFinder::find( Expression *expr, bool adjust, bool prune ) {
+	void AlternativeFinder::find( Expression *expr, bool adjust ) {
 		expr->accept( *this );
 		if ( alternatives.empty() ) {
@@ -207,26 +207,24 @@
 			}
 		}
-		if ( prune ) {
-			PRINT(
-				std::cerr << "alternatives before prune:" << std::endl;
-				printAlts( alternatives, std::cerr );
-			)
-			AltList::iterator oldBegin = alternatives.begin();
-			pruneAlternatives( alternatives.begin(), alternatives.end(), front_inserter( alternatives ), indexer );
-			if ( alternatives.begin() == oldBegin ) {
-				std::ostringstream stream;
-				stream << "Can't choose between alternatives for expression ";
-				expr->print( stream );
-				stream << "Alternatives are:";
-				AltList winners;
-				findMinCost( alternatives.begin(), alternatives.end(), back_inserter( winners ) );
-				printAlts( winners, stream, 8 );
-				throw SemanticError( stream.str() );
-			}
-			alternatives.erase( oldBegin, alternatives.end() );
-			PRINT(
-				std::cerr << "there are " << alternatives.size() << " alternatives after elimination" << std::endl;
-			)
-		}
+		PRINT(
+			std::cerr << "alternatives before prune:" << std::endl;
+			printAlts( alternatives, std::cerr );
+		)
+		AltList::iterator oldBegin = alternatives.begin();
+		pruneAlternatives( alternatives.begin(), alternatives.end(), front_inserter( alternatives ), indexer );
+		if ( alternatives.begin() == oldBegin ) {
+			std::ostringstream stream;
+			stream << "Can't choose between alternatives for expression ";
+			expr->print( stream );
+			stream << "Alternatives are:";
+			AltList winners;
+			findMinCost( alternatives.begin(), alternatives.end(), back_inserter( winners ) );
+			printAlts( winners, stream, 8 );
+			throw SemanticError( stream.str() );
+		}
+		alternatives.erase( oldBegin, alternatives.end() );
+		PRINT(
+			std::cerr << "there are " << alternatives.size() << " alternatives after elimination" << std::endl;
+		)
 
 		// Central location to handle gcc extension keyword for all expression types.
@@ -236,10 +234,10 @@
 	}
 
-	void AlternativeFinder::findWithAdjustment( Expression *expr, bool prune ) {
-		find( expr, true, prune );
+	void AlternativeFinder::findWithAdjustment( Expression *expr ) {
+		find( expr, true );
 	}
 
 	template< typename StructOrUnionType >
-	void AlternativeFinder::addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const TypeEnvironment & env, const std::string &name ) {
+	void AlternativeFinder::addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const std::string &name ) {
 		std::list< Declaration* > members;
 		aggInst->lookup( name, members );
@@ -762,7 +760,7 @@
 			if ( agg->expr->get_results().size() == 1 ) {
 				if ( StructInstType *structInst = dynamic_cast< StructInstType* >( agg->expr->get_results().front() ) ) {
-					addAggMembers( structInst, agg->expr, agg->cost, agg->env, memberExpr->get_member() );
+					addAggMembers( structInst, agg->expr, agg->cost, memberExpr->get_member() );
 				} else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( agg->expr->get_results().front() ) ) {
-					addAggMembers( unionInst, agg->expr, agg->cost, agg->env, memberExpr->get_member() );
+					addAggMembers( unionInst, agg->expr, agg->cost, memberExpr->get_member() );
 				} // if
 			} // if
@@ -791,7 +789,7 @@
 			renameTypes( alternatives.back().expr );
 			if ( StructInstType *structInst = dynamic_cast< StructInstType* >( (*i)->get_type() ) ) {
-				addAggMembers( structInst, &newExpr, Cost( 0, 0, 1 ), env, "" );
+				addAggMembers( structInst, &newExpr, Cost( 0, 0, 1 ), "" );
 			} else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( (*i)->get_type() ) ) {
-				addAggMembers( unionInst, &newExpr, Cost( 0, 0, 1 ), env, "" );
+				addAggMembers( unionInst, &newExpr, Cost( 0, 0, 1 ), "" );
 			} // if
 		} // for
@@ -1014,14 +1012,4 @@
 		alternatives.push_back( Alternative( impCpCtorExpr->clone(), env, Cost::zero ) );
 	}
-
-	void AlternativeFinder::visit( ConstructorExpr * ctorExpr ) {
-		AlternativeFinder finder( indexer, env );
-		// don't prune here, since it's guaranteed all alternatives will have the same type
-		// (giving the alternatives different types is half of the point of ConstructorExpr nodes)
-		finder.findWithAdjustment( ctorExpr->get_callExpr(), false );
-		for ( Alternative & alt : finder.alternatives ) {
-			alternatives.push_back( Alternative( new ConstructorExpr( alt.expr->clone() ), alt.env, alt.cost ) );
-		}
-	}
 } // namespace ResolvExpr
 
