Index: src/GenPoly/Lvalue.cc
===================================================================
--- src/GenPoly/Lvalue.cc	(revision 27aca84c89a0c7286b8f204457ed8b73e6f31156)
+++ src/GenPoly/Lvalue.cc	(revision 70a5acf64cb1850994236fd2ed4362de64437a59)
@@ -425,4 +425,17 @@
 				assert( diff == 0 );
 				// conversion between references of the same depth
+				if ( ResolvExpr::typesCompatible( castExpr->result, castExpr->arg->result, SymTab::Indexer() ) && castExpr->isGenerated ) {
+					// Remove useless generated casts
+					PRINT(
+						std::cerr << "types are compatible, removing cast: " << castExpr << std::endl;
+						std::cerr << "-- " << castExpr->result << std::endl;
+						std::cerr << "-- " << castExpr->arg->result << std::endl;
+					)
+					Expression * ret = castExpr->arg;
+					castExpr->arg = nullptr;
+					std::swap( castExpr->env, ret->env );
+					delete castExpr;
+					return ret;
+				}
 				return castExpr;
 			}
