Version 2.11.0-243.0.dev

Merge commit '10c03da2c295de74ac072fb2bc76d8e7a9ed80d6' into 'dev'
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart
new file mode 100644
index 0000000..e256d1e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.9
+
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+class Class<T> with Mixin1<T>, Mixin2<T> {
+  set field(Typedef value) {
+    super.field;
+    super.field = value;
+    super.method1();
+    super.method2(null);
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.textual_outline.expect
new file mode 100644
index 0000000..0cd68c4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+// @dart = 2.9
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+class Class<T> with Mixin1<T>, Mixin2<T> {
+  set field(Typedef value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0cd68c4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+// @dart = 2.9
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+class Class<T> with Mixin1<T>, Mixin2<T> {
+  set field(Typedef value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
new file mode 100644
index 0000000..66bacd4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
@@ -0,0 +1,111 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib1.dart" as mai;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class _Class&Object&Mixin1<T extends core::Object* = dynamic> = core::Object with mai::Mixin1<self::_Class&Object&Mixin1::T*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class&Object&Mixin1<self::_Class&Object&Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class&Object&Mixin1&Mixin2<T extends core::Object* = dynamic> = self::_Class&Object&Mixin1<self::_Class&Object&Mixin1&Mixin2::T*> with mai::Mixin2<self::_Class&Object&Mixin1&Mixin2::T*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
+    : super self::_Class&Object&Mixin1::•()
+    ;
+  abstract member-signature set field((dynamic) →* core::Type* _) → void; -> mai::Mixin2::field
+  abstract member-signature get field() → (dynamic) →* core::Type*; -> mai::Mixin2::field
+  abstract member-signature method method1() → (dynamic) →* core::Type*; -> mai::Mixin2::method1
+  abstract member-signature method method2((dynamic) →* core::Type* t) → void; -> mai::Mixin2::method2
+}
+class Class<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1&Mixin2<self::Class::T*> {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super self::_Class&Object&Mixin1&Mixin2::•()
+    ;
+  set field((dynamic) →* core::Type value) → void {
+    super.{mai::Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{mai::Mixin2::method1}();
+    super.{mai::Mixin2::method2}(null);
+  }
+}
+static method main() → dynamic {}
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class Mixin1<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature set field((core::Object*) →* core::Type* _) → void; -> mai2::Interface::field
+  abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+  abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
+}
+abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  field (dynamic) →* core::Type field = null;
+  synthetic constructor •() → mai::Mixin2<mai::Mixin2::T*>*
+    : super core::Object::•()
+    ;
+  method method1() → (dynamic) →* core::Type
+    return null;
+  method method2((dynamic) →* core::Type t) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai2;
+import "dart:core" as core;
+
+typedef Typedef<unrelated T extends mai2::Value<dynamic> = mai2::Value<dynamic>, contravariant I extends core::Object? = dynamic> = (I%) → core::Type;
+abstract class Value<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → mai2::Value<mai2::Value::T%>
+    : super core::Object::•()
+    ;
+}
+class Interface<T extends mai2::Value<dynamic> = mai2::Value<dynamic>, I extends core::Object? = dynamic> extends core::Object {
+  field (mai2::Interface::I%) →? core::Type field = null;
+  synthetic constructor •() → mai2::Interface<mai2::Interface::T, mai2::Interface::I%>
+    : super core::Object::•()
+    ;
+  method method1() → (mai2::Interface::I%) →? core::Type
+    return null;
+  method method2((mai2::Interface::I%) →? core::Type t) → void {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..6098a71
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
@@ -0,0 +1,125 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib1.dart" as mai;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class _Class&Object&Mixin1<T extends core::Object* = dynamic> extends core::Object implements mai::Mixin1<self::_Class&Object&Mixin1::T*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class&Object&Mixin1<self::_Class&Object&Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator /* from org-dartlang-testcase:///main_lib1.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ toString() → core::String*; -> core::Object::toString
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set /* from org-dartlang-testcase:///main_lib1.dart */ field((core::Object*) →* core::Type* _) → void; -> mai2::Interface::field
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
+}
+abstract class _Class&Object&Mixin1&Mixin2<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1<self::_Class&Object&Mixin1&Mixin2::T*> implements mai::Mixin2<self::_Class&Object&Mixin1&Mixin2::T*> /*isAnonymousMixin,isEliminatedMixin*/  {
+  field (dynamic) →* core::Type field = null /* from org-dartlang-testcase:///main_lib1.dart */;
+  synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
+    : super self::_Class&Object&Mixin1::•()
+    ;
+  method /* from org-dartlang-testcase:///main_lib1.dart */ method1() → (dynamic) →* core::Type
+    return null;
+  method /* from org-dartlang-testcase:///main_lib1.dart */ method2((dynamic) →* core::Type t) → void {}
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator /* from org-dartlang-testcase:///main_lib1.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ toString() → core::String*; -> core::Object::toString
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1&Mixin2<self::Class::T*> {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super self::_Class&Object&Mixin1&Mixin2::•()
+    ;
+  set field((dynamic) →* core::Type value) → void {
+    super.{mai::Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{mai::Mixin2::method1}();
+    super.{mai::Mixin2::method2}(null);
+  }
+}
+static method main() → dynamic {}
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class Mixin1<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature set field((core::Object*) →* core::Type* _) → void; -> mai2::Interface::field
+  abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+  abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
+}
+abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  field (dynamic) →* core::Type field = null;
+  synthetic constructor •() → mai::Mixin2<mai::Mixin2::T*>*
+    : super core::Object::•()
+    ;
+  method method1() → (dynamic) →* core::Type
+    return null;
+  method method2((dynamic) →* core::Type t) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai2;
+import "dart:core" as core;
+
+typedef Typedef<unrelated T extends mai2::Value<dynamic> = mai2::Value<dynamic>, contravariant I extends core::Object? = dynamic> = (I%) → core::Type;
+abstract class Value<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → mai2::Value<mai2::Value::T%>
+    : super core::Object::•()
+    ;
+}
+class Interface<T extends mai2::Value<dynamic> = mai2::Value<dynamic>, I extends core::Object? = dynamic> extends core::Object {
+  field (mai2::Interface::I%) →? core::Type field = null;
+  synthetic constructor •() → mai2::Interface<mai2::Interface::T, mai2::Interface::I%>
+    : super core::Object::•()
+    ;
+  method method1() → (mai2::Interface::I%) →? core::Type
+    return null;
+  method method2((mai2::Interface::I%) →? core::Type t) → void {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart
new file mode 100644
index 0000000..e256d1e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.9
+
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+class Class<T> with Mixin1<T>, Mixin2<T> {
+  set field(Typedef value) {
+    super.field;
+    super.field = value;
+    super.method1();
+    super.method2(null);
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.textual_outline.expect
new file mode 100644
index 0000000..0cd68c4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+// @dart = 2.9
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+class Class<T> with Mixin1<T>, Mixin2<T> {
+  set field(Typedef value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0cd68c4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+// @dart = 2.9
+import 'main_lib1.dart';
+import 'main_lib2.dart';
+
+class Class<T> with Mixin1<T>, Mixin2<T> {
+  set field(Typedef value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
new file mode 100644
index 0000000..66bacd4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
@@ -0,0 +1,111 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib1.dart" as mai;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class _Class&Object&Mixin1<T extends core::Object* = dynamic> = core::Object with mai::Mixin1<self::_Class&Object&Mixin1::T*> /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class&Object&Mixin1<self::_Class&Object&Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _Class&Object&Mixin1&Mixin2<T extends core::Object* = dynamic> = self::_Class&Object&Mixin1<self::_Class&Object&Mixin1&Mixin2::T*> with mai::Mixin2<self::_Class&Object&Mixin1&Mixin2::T*> /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
+    : super self::_Class&Object&Mixin1::•()
+    ;
+  abstract member-signature set field((dynamic) →* core::Type* _) → void; -> mai::Mixin2::field
+  abstract member-signature get field() → (dynamic) →* core::Type*; -> mai::Mixin2::field
+  abstract member-signature method method1() → (dynamic) →* core::Type*; -> mai::Mixin2::method1
+  abstract member-signature method method2((dynamic) →* core::Type* t) → void; -> mai::Mixin2::method2
+}
+class Class<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1&Mixin2<self::Class::T*> {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super self::_Class&Object&Mixin1&Mixin2::•()
+    ;
+  set field((dynamic) →* core::Type value) → void {
+    super.{mai::Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{mai::Mixin2::method1}();
+    super.{mai::Mixin2::method2}(null);
+  }
+}
+static method main() → dynamic {}
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class Mixin1<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature set field((core::Object*) →* core::Type* _) → void; -> mai2::Interface::field
+  abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+  abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
+}
+abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  field (dynamic) →* core::Type field = null;
+  synthetic constructor •() → mai::Mixin2<mai::Mixin2::T*>*
+    : super core::Object::•()
+    ;
+  method method1() → (dynamic) →* core::Type
+    return null;
+  method method2((dynamic) →* core::Type t) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai2;
+import "dart:core" as core;
+
+typedef Typedef<unrelated T extends mai2::Value<dynamic> = mai2::Value<dynamic>, contravariant I extends core::Object? = dynamic> = (I%) → core::Type;
+abstract class Value<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → mai2::Value<mai2::Value::T%>
+    : super core::Object::•()
+    ;
+}
+class Interface<T extends mai2::Value<dynamic> = mai2::Value<dynamic>, I extends core::Object? = dynamic> extends core::Object {
+  field (mai2::Interface::I%) →? core::Type field = null;
+  synthetic constructor •() → mai2::Interface<mai2::Interface::T, mai2::Interface::I%>
+    : super core::Object::•()
+    ;
+  method method1() → (mai2::Interface::I%) →? core::Type
+    return null;
+  method method2((mai2::Interface::I%) →? core::Type t) → void {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
new file mode 100644
index 0000000..6098a71
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
@@ -0,0 +1,125 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "main_lib1.dart" as mai;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class _Class&Object&Mixin1<T extends core::Object* = dynamic> extends core::Object implements mai::Mixin1<self::_Class&Object&Mixin1::T*> /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_Class&Object&Mixin1<self::_Class&Object&Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator /* from org-dartlang-testcase:///main_lib1.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ toString() → core::String*; -> core::Object::toString
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature set /* from org-dartlang-testcase:///main_lib1.dart */ field((core::Object*) →* core::Type* _) → void; -> mai2::Interface::field
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
+}
+abstract class _Class&Object&Mixin1&Mixin2<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1<self::_Class&Object&Mixin1&Mixin2::T*> implements mai::Mixin2<self::_Class&Object&Mixin1&Mixin2::T*> /*isAnonymousMixin,isEliminatedMixin*/  {
+  field (dynamic) →* core::Type field = null /* from org-dartlang-testcase:///main_lib1.dart */;
+  synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
+    : super self::_Class&Object&Mixin1::•()
+    ;
+  method /* from org-dartlang-testcase:///main_lib1.dart */ method1() → (dynamic) →* core::Type
+    return null;
+  method /* from org-dartlang-testcase:///main_lib1.dart */ method2((dynamic) →* core::Type t) → void {}
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator /* from org-dartlang-testcase:///main_lib1.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ toString() → core::String*; -> core::Object::toString
+  abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class Class<T extends core::Object* = dynamic> extends self::_Class&Object&Mixin1&Mixin2<self::Class::T*> {
+  synthetic constructor •() → self::Class<self::Class::T*>*
+    : super self::_Class&Object&Mixin1&Mixin2::•()
+    ;
+  set field((dynamic) →* core::Type value) → void {
+    super.{mai::Mixin2::field};
+    super.{self::_Class&Object&Mixin1&Mixin2::field} = value;
+    super.{mai::Mixin2::method1}();
+    super.{mai::Mixin2::method2}(null);
+  }
+}
+static method main() → dynamic {}
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+abstract class Mixin1<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
+    : super core::Object::•()
+    ;
+  abstract member-signature set field((core::Object*) →* core::Type* _) → void; -> mai2::Interface::field
+  abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+  abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
+}
+abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
+  field (dynamic) →* core::Type field = null;
+  synthetic constructor •() → mai::Mixin2<mai::Mixin2::T*>*
+    : super core::Object::•()
+    ;
+  method method1() → (dynamic) →* core::Type
+    return null;
+  method method2((dynamic) →* core::Type t) → void {}
+  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+  abstract member-signature method toString() → core::String*; -> core::Object::toString
+  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai2;
+import "dart:core" as core;
+
+typedef Typedef<unrelated T extends mai2::Value<dynamic> = mai2::Value<dynamic>, contravariant I extends core::Object? = dynamic> = (I%) → core::Type;
+abstract class Value<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → mai2::Value<mai2::Value::T%>
+    : super core::Object::•()
+    ;
+}
+class Interface<T extends mai2::Value<dynamic> = mai2::Value<dynamic>, I extends core::Object? = dynamic> extends core::Object {
+  field (mai2::Interface::I%) →? core::Type field = null;
+  synthetic constructor •() → mai2::Interface<mai2::Interface::T, mai2::Interface::I%>
+    : super core::Object::•()
+    ;
+  method method1() → (mai2::Interface::I%) →? core::Type
+    return null;
+  method method2((mai2::Interface::I%) →? core::Type t) → void {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main_lib1.dart b/pkg/front_end/testcases/nnbd_mixed/super_access/main_lib1.dart
new file mode 100644
index 0000000..ee49dbf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main_lib1.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.9
+
+import 'main_lib2.dart';
+
+abstract class Mixin1<T> implements Interface<Value, Object> {}
+
+abstract class Mixin2<T> implements Interface<Value, Object> {
+  Typedef field;
+  Typedef method1() => null;
+  void method2(Typedef t) {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main_lib2.dart b/pkg/front_end/testcases/nnbd_mixed/super_access/main_lib2.dart
new file mode 100644
index 0000000..06013cc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main_lib2.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+abstract class Value<T> {}
+
+typedef Typedef<T extends Value, I> = Type Function(I item);
+
+class Interface<T extends Value, I> {
+  Typedef<T, I>? field;
+  Typedef<T, I>? method1() => null;
+  void method2(Typedef<T, I>? t) {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/test.options b/pkg/front_end/testcases/nnbd_mixed/super_access/test.options
new file mode 100644
index 0000000..8400751
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/test.options
@@ -0,0 +1 @@
+main_lib2.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index bf869dd..dd1bc46 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -72,6 +72,8 @@
 nnbd_mixed/issue41567: TypeCheckError
 nnbd_mixed/messages_with_types_opt_in: TypeCheckError
 nnbd_mixed/messages_with_types_opt_out: TypeCheckError
+nnbd_mixed/super_access/main: Crash # Issue 43864
+nnbd_mixed/super_access/main.no_link: Crash # Issue 43864
 value_class/simple: RuntimeError # Expected
 value_class/value_extends_non_value: RuntimeError # Expected
 value_class/value_implements_non_value: RuntimeError # Expected
diff --git a/tools/VERSION b/tools/VERSION
index 15291f9..d7e753d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 11
 PATCH 0
-PRERELEASE 242
+PRERELEASE 243
 PRERELEASE_PATCH 0
\ No newline at end of file