Index: sdk/lib/_internal/compiler/implementation/ssa/nodes.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart |
index 23e9d32ce977bc57c75cc91ddca9a6744b508d6b..34981268893be2c0a5dc3e95e50e0ff2c6a22e3c 100644 |
--- a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart |
+++ b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart |
@@ -1115,12 +1115,13 @@ abstract class HInstruction implements Spannable { |
// instructions with generics. It has the generic type context |
// available. |
assert(type.kind != TypeKind.TYPE_VARIABLE); |
- assert(type.isRaw |
- || type.isMalformed |
- || type.kind == TypeKind.FUNCTION); |
- if (identical(type.element, compiler.dynamicClass)) return this; |
+ assert(type.isRaw || type.kind == TypeKind.FUNCTION); |
+ if (type.containsAmbiguousTypes) { |
+ return new HTypeConversion(type, kind, HType.UNKNOWN, this); |
+ } |
+ if (type.treatAsDynamic) return this; |
if (identical(type.element, compiler.objectClass)) return this; |
- if (type.isMalformed || type.kind != TypeKind.INTERFACE) { |
+ if (type.kind != TypeKind.INTERFACE) { |
return new HTypeConversion(type, kind, HType.UNKNOWN, this); |
} else if (kind == HTypeConversion.BOOLEAN_CONVERSION_CHECK) { |
// Boolean conversion checks work on non-nullable booleans. |