Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 6668a3ed6616003d19792926e5fac85310231168)
+++ src/ResolvExpr/ConversionCost.cc	(revision 4390fb6c47ec12d50fb1bde675943fbc98fe057a)
@@ -333,5 +333,11 @@
 		} else if ( dynamic_cast< const EnumInstType * >( dest ) ) {
 			// xxx - not positive this is correct, but appears to allow casting int => enum
-			cost = Cost::unsafe;
+			// TODO
+			EnumDecl * decl = dynamic_cast< const EnumInstType * >( dest )->baseEnum;
+			if ( decl->base ) {
+				cost = Cost::infinity;
+			} else {
+				cost = Cost::unsafe;
+			} // if
 		} // if
 		// no cases for zero_t/one_t because it should not be possible to convert int, etc. to zero_t/one_t.
@@ -610,5 +616,10 @@
 	} else if ( dynamic_cast< const ast::EnumInstType * >( dst ) ) {
 		// xxx - not positive this is correct, but appears to allow casting int => enum
-		cost = Cost::unsafe;
+		const ast::EnumDecl * decl = (dynamic_cast< const ast::EnumInstType * >( dst ))->base.get();
+		if ( decl->base ) {
+			cost = Cost::infinity;
+		} else {
+			cost = Cost::unsafe;
+		} // if
 	}
 }
