Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 92360603d942184e66e5f92706ecc75c6b04f121)
+++ src/InitTweak/FixInit.cc	(revision 5ccb10d750e81ef921035bdd254327997acd80ae)
@@ -591,23 +591,4 @@
 
 				Expression * retExpr = new CommaExpr( assign, new VariableExpr( returnDecl ) );
-				if ( callExpr->get_result()->get_lvalue() ) {
-					// lvalue returning functions are funny. Lvalue.cc inserts a *? in front of any lvalue returning
-					// non-intrinsic function. Add an AddressExpr to the call to negate the derefence and change the
-					// type of the return temporary from T to T* to properly capture the return value. Then dereference
-					// the result of the comma expression, since the lvalue returning call was originally wrapped with
-					// an AddressExpr.  Effectively, this turns
-					//   lvalue T f();
-					//   &*f();
-					// into
-					//   T * f();
-					//   T * tmp_cp_retN;
-					//   &*(tmp_cp_retN = &*f(), tmp_cp_retN);		// the first * and second & are generated here
-					// which work out in terms of types, but is pretty messy. It would be nice to find a better way.
-					assign->get_args().back() = new AddressExpr( assign->get_args().back() );
-
-					returnDecl->set_type( new PointerType( Type::Qualifiers(), returnDecl->get_type() ) );
-					retExpr->set_result( new PointerType( Type::Qualifiers(), retExpr->get_result() ) );
-					retExpr = UntypedExpr::createDeref( retExpr );
-				} // if
 				// move env from callExpr to retExpr
 				retExpr->set_env( callExpr->get_env() );
