Index: src/GenPoly/Lvalue.cpp
===================================================================
--- src/GenPoly/Lvalue.cpp	(revision 5f225f59101d268668c9c4862e607c9573860bfb)
+++ src/GenPoly/Lvalue.cpp	(revision f3b67b61c77cdbc02930ce3fa8b8ccb9124f9ec5)
@@ -389,5 +389,5 @@
 		assert( 0 == diff );
 		// Remove useless generated casts.
-		if ( expr->isGenerated &&
+		if ( expr->isGenerated == ast::GeneratedFlag::GeneratedCast &&
 				ResolvExpr::typesCompatible(
 					expr->result,
@@ -398,4 +398,11 @@
 				std::cerr << "-- " << expr->arg->result << std::endl;
 			)
+			auto argAsEnum = expr->arg.as<ast::EnumInstType>();
+			auto resultAsEnum = expr->result.as<ast::EnumInstType>();
+			if (argAsEnum && resultAsEnum) {
+				if (argAsEnum->base->name != resultAsEnum->base->name) {
+					return expr;
+				}
+			}
 			return ast::mutate_field( expr->arg.get(),
 					&ast::Expr::env, expr->env.get() );
