diff --git a/pkg/compiler/lib/src/js_backend/specialized_checks.dart b/pkg/compiler/lib/src/js_backend/specialized_checks.dart index c16d94e87d2..ed26a6cdf12 100644 --- a/pkg/compiler/lib/src/js_backend/specialized_checks.dart +++ b/pkg/compiler/lib/src/js_backend/specialized_checks.dart @@ -30,20 +30,24 @@ class InstanceOfIsTestSpecialization implements IsTestSpecialization { class SpecializedChecks { static IsTestSpecialization? findIsTestSpecialization( - DartType dartType, MemberEntity compiland, JClosedWorld closedWorld) { + DartType dartType, MemberEntity compiland, JClosedWorld closedWorld, + {required bool experimentNullSafetyChecks}) { if (dartType is LegacyType) { DartType base = dartType.baseType; // `Never*` accepts only `null`. if (base is NeverType) return SimpleIsTestSpecialization.isNull; // `Object*` is top and should be handled by constant folding. if (base.isObject) return null; - return _findIsTestSpecialization(base, compiland, closedWorld); + return _findIsTestSpecialization(base, compiland, closedWorld, + experimentNullSafetyChecks: experimentNullSafetyChecks); } - return _findIsTestSpecialization(dartType, compiland, closedWorld); + return _findIsTestSpecialization(dartType, compiland, closedWorld, + experimentNullSafetyChecks: experimentNullSafetyChecks); } static IsTestSpecialization? _findIsTestSpecialization( - DartType dartType, MemberEntity compiland, JClosedWorld closedWorld) { + DartType dartType, MemberEntity compiland, JClosedWorld closedWorld, + {required bool experimentNullSafetyChecks}) { if (dartType is InterfaceType) { ClassEntity element = dartType.element; JCommonElements commonElements = closedWorld.commonElements; @@ -98,6 +102,10 @@ class SpecializedChecks { return SimpleIsTestSpecialization.isNotNull; } + if (experimentNullSafetyChecks && dartType.typeArguments.isNotEmpty) { + return null; + } + ClassHierarchy classHierarchy = closedWorld.classHierarchy; InterceptorData interceptorData = closedWorld.interceptorData; OutputUnitData outputUnitData = closedWorld.outputUnitData; diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart index 4043f1b6be8..12c34d020d0 100644 --- a/pkg/compiler/lib/src/ssa/optimize.dart +++ b/pkg/compiler/lib/src/ssa/optimize.dart @@ -2305,7 +2305,8 @@ class SsaInstructionSimplifier extends HBaseVisitor } final specialization = SpecializedChecks.findIsTestSpecialization( - node.dartType, _graph.element, _closedWorld); + node.dartType, _graph.element, _closedWorld, + experimentNullSafetyChecks: _options.experimentNullSafetyChecks); if (specialization == SimpleIsTestSpecialization.isNull || specialization == SimpleIsTestSpecialization.isNotNull) {