Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision be9036d588c561590b98fa24451d88cd00ce0af1)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 326338aec9e5906b6b09c788119731fd8edfeb42)
@@ -749,18 +749,20 @@
 				if ( PointerType *pointer = dynamic_cast< PointerType* >( func->expr->get_result()->stripReferences() ) ) {
 					if ( FunctionType *function = dynamic_cast< FunctionType* >( pointer->get_base() ) ) {
-						referenceToRvalueConversion( func->expr );
+						Alternative newFunc( *func );
+						referenceToRvalueConversion( newFunc.expr );
 						for ( std::list< AltList >::iterator actualAlt = possibilities.begin(); actualAlt != possibilities.end(); ++actualAlt ) {
 							// XXX
 							//Designators::check_alternative( function, *actualAlt );
-							makeFunctionAlternatives( *func, function, *actualAlt, std::back_inserter( candidates ) );
+							makeFunctionAlternatives( newFunc, function, *actualAlt, std::back_inserter( candidates ) );
 						}
 					}
 				} else if ( TypeInstType *typeInst = dynamic_cast< TypeInstType* >( func->expr->get_result()->stripReferences() ) ) { // handle ftype (e.g. *? on function pointer)
-					referenceToRvalueConversion( func->expr );
 					EqvClass eqvClass;
 					if ( func->env.lookup( typeInst->get_name(), eqvClass ) && eqvClass.type ) {
 						if ( FunctionType *function = dynamic_cast< FunctionType* >( eqvClass.type ) ) {
+							Alternative newFunc( *func );
+							referenceToRvalueConversion( newFunc.expr );
 							for ( std::list< AltList >::iterator actualAlt = possibilities.begin(); actualAlt != possibilities.end(); ++actualAlt ) {
-								makeFunctionAlternatives( *func, function, *actualAlt, std::back_inserter( candidates ) );
+								makeFunctionAlternatives( newFunc, function, *actualAlt, std::back_inserter( candidates ) );
 							} // for
 						} // if
@@ -773,10 +775,11 @@
 					if ( PointerType *pointer = dynamic_cast< PointerType* >( funcOp->expr->get_result()->stripReferences() ) ) {
 						if ( FunctionType *function = dynamic_cast< FunctionType* >( pointer->get_base() ) ) {
-							referenceToRvalueConversion( funcOp->expr );
+							Alternative newFunc( *funcOp );
+							referenceToRvalueConversion( newFunc.expr );
 							for ( std::list< AltList >::iterator actualAlt = possibilities.begin(); actualAlt != possibilities.end(); ++actualAlt ) {
 								AltList currentAlt;
 								currentAlt.push_back( *func );
 								currentAlt.insert( currentAlt.end(), actualAlt->begin(), actualAlt->end() );
-								makeFunctionAlternatives( *funcOp, function, currentAlt, std::back_inserter( candidates ) );
+								makeFunctionAlternatives( newFunc, function, currentAlt, std::back_inserter( candidates ) );
 							} // for
 						} // if
