Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 8a6cf7efc5b53b47e66ba1a8f429bb5b7c181aa2)
+++ src/SynTree/Expression.cc	(revision 9a4e996a97a1acdc0bffdb80d5fbfdf61334f5e1)
@@ -34,4 +34,5 @@
 #include "InitTweak/InitTweak.h"
 
+#include "GenPoly/Lvalue.h"
 
 Expression::Expression( Expression *_aname ) : result( 0 ), env( 0 ), argName( _aname ) {}
@@ -409,5 +410,12 @@
 		Type * base = InitTweak::getPointerBase( type );
 		assertf( base, "expected pointer type in dereference (type was %s)", toString( type ).c_str() );
-		ret->set_result( new ReferenceType( Type::Qualifiers(), base->clone() ) );
+		ret->set_result( base->clone() );
+		if ( GenPoly::referencesPermissable() ) {
+			// if references are still allowed in the AST, dereference returns a reference
+			ret->set_result( new ReferenceType( Type::Qualifiers(), ret->get_result() ) );
+		} else {
+			// references have been removed, in which case dereference returns an lvalue of the base type.
+			ret->get_result()->set_lvalue( true );
+		}
 	}
 	return ret;
