Index: src/GenPoly/Lvalue.cc
===================================================================
--- src/GenPoly/Lvalue.cc	(revision 397c101ac3d4d5036b990774a5ad5b6598528e82)
+++ src/GenPoly/Lvalue.cc	(revision 0f9ceacb0d69af179f9dba9f14b304e5fa6560d7)
@@ -60,5 +60,5 @@
 		}
 
-		struct ReferenceConversions final : public WithStmtsToAdd {
+		struct ReferenceConversions final : public WithStmtsToAdd, public WithGuards {
 			Expression * postmutate( CastExpr * castExpr );
 			Expression * postmutate( AddressExpr * addrExpr );
@@ -71,4 +71,14 @@
 
 		struct FixIntrinsicResult final : public WithGuards {
+			enum {
+				NoSkip,
+				Skip,
+				SkipInProgress
+			} skip = NoSkip;
+
+			void premutate( AsmExpr * ) { GuardValue( skip ); skip = Skip; }
+			void premutate( ApplicationExpr * ) { GuardValue( skip ); skip = (skip == Skip) ? SkipInProgress : NoSkip; }
+
+
 			Expression * postmutate( ApplicationExpr * appExpr );
 			void premutate( FunctionDecl * funcDecl );
@@ -162,5 +172,5 @@
 
 		Expression * FixIntrinsicResult::postmutate( ApplicationExpr * appExpr ) {
-			if ( isIntrinsicReference( appExpr ) ) {
+			if ( skip != SkipInProgress && isIntrinsicReference( appExpr ) ) {
 				// eliminate reference types from intrinsic applications - now they return lvalues
 				ReferenceType * result = strict_dynamic_cast< ReferenceType * >( appExpr->result );
