diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index ff5fd50..8207e58 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -952,9 +952,12 @@
             // potentially nullable access.
             isPotentiallyNullable: false);
       }
-      if (includeExtensionMethods) {
+      if (includeExtensionMethods && receiverBound is! DynamicType) {
         ObjectAccessTarget target = _findExtensionMember(
-            receiverBound, coreTypes.objectClass, name, fileOffset,
+            isNonNullableByDefault ? receiverType : receiverBound,
+            coreTypes.objectClass,
+            name,
+            fileOffset,
             setter: setter);
         if (target != null) {
           return target;
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.transformed.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.transformed.expect
new file mode 100644
index 0000000..dbc33c0
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.strong.transformed.expect
@@ -0,0 +1,88 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
+//   num method2() => field1 + field2.length;
+//                                    ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class DynamicClass<T extends dynamic = dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
+  generic-covariant-impl field self::DynamicClass::T* field1;
+  generic-covariant-impl field self::DynamicClass::T* field2;
+  constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
+    : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
+    ;
+  method method() → dynamic
+    return this.{self::DynamicClass::field1}.*(this.{self::DynamicClass::field2});
+  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
+}
+class NumClass<T extends core::num* = core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
+  generic-covariant-impl field self::NumClass::T* field1;
+  generic-covariant-impl field self::NumClass::S* field2;
+  constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
+    : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
+    ;
+  method method1() → core::num*
+    return this.{self::NumClass::field1}.{core::num::*}(this.{self::NumClass::field2});
+  method method2() → core::num*
+    return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general/type_variable_bound_access.dart:22:36: Error: The getter 'length' isn't defined for the class 'num'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
+  num method2() => field1 + field2.length;
+                                   ^^^^^^");
+  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
+}
+class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int* = core::int*> extends core::Object {
+  generic-covariant-impl field self::Class::X0* field0 = null;
+  generic-covariant-impl field self::Class::X1* field1 = null;
+  generic-covariant-impl field self::Class::X2* field2 = null;
+  generic-covariant-impl field self::Class::X3* field3 = null;
+  generic-covariant-impl field self::Class::X4* field4 = null;
+  generic-covariant-impl field self::Class::X5* field5 = null;
+  synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
+    : super core::Object::•()
+    ;
+  method method() → dynamic {
+    this.{self::Class::field0}.{core::int::isEven};
+    this.{self::Class::field1}.{core::int::isEven};
+    this.{self::Class::field2}.{core::int::isEven};
+    this.{self::Class::field3}.{core::int::isEven};
+    this.{self::Class::field4}.{core::int::isEven};
+    this.{self::Class::field5}.{core::int::isEven};
+  }
+  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
+}
+static method main() → dynamic {
+  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
+  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}();
+}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.transformed.expect
new file mode 100644
index 0000000..a7cabde
--- /dev/null
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart.weak.transformed.expect
@@ -0,0 +1,59 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart:24:36: Error: The getter 'length' isn't defined for the class 'num'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
+//   num method2() => field1 + field2.length;
+//                                    ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class DynamicClass<T extends dynamic = dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
+  generic-covariant-impl field self::DynamicClass::T* field1;
+  generic-covariant-impl field self::DynamicClass::T* field2;
+  constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
+    : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
+    ;
+  method method() → dynamic
+    return this.{self::DynamicClass::field1}.*(this.{self::DynamicClass::field2});
+  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
+}
+class NumClass<T extends core::num* = core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
+  generic-covariant-impl field self::NumClass::T* field1;
+  generic-covariant-impl field self::NumClass::S* field2;
+  constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
+    : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
+    ;
+  method method1() → core::num*
+    return this.{self::NumClass::field1}.{core::num::*}(this.{self::NumClass::field2});
+  method method2() → core::num*
+    return this.{self::NumClass::field1}.{core::num::+}(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/type_variable_bound_access.dart:24:36: Error: The getter 'length' isn't defined for the class 'num'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'length'.
+  num method2() => field1 + field2.length;
+                                   ^^^^^^");
+  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
+}
+static method main() → dynamic {
+  new self::DynamicClass::•<core::num*, core::int*>(0.5, 2).{self::DynamicClass::method}();
+  new self::NumClass::•<core::num*, core::double*>(2, 0.5).{self::NumClass::method1}();
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart b/pkg/front_end/testcases/nnbd/issue43591.dart
new file mode 100644
index 0000000..f845be9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart
@@ -0,0 +1,26 @@
+// 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.
+
+extension E<T> on T {
+  T Function(T) get f => (T t) => t;
+}
+
+method1<S>(S s) {
+  S Function(S) f = s.f;
+}
+
+method2<S extends dynamic>(S s) {
+  throws(() => s.f);
+}
+
+main() {}
+
+throws(void Function() f) {
+  try {
+    f();
+  } catch (e) {
+    return;
+  }
+  throw 'Expected exception';
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.outline.expect
new file mode 100644
index 0000000..dbf8690
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E<T extends core::Object? = dynamic> on T% {
+  get f = self::E|get#f;
+}
+static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+  ;
+static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic
+  ;
+static method method2<S extends dynamic = dynamic>(self::method2::S% s) → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method throws(() → void f) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect
new file mode 100644
index 0000000..aae95d4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E<T extends core::Object? = dynamic> on T% {
+  get f = self::E|get#f;
+}
+static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+  return (self::E|get#f::T% t) → self::E|get#f::T% => t;
+static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
+  (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
+}
+static method method2<S extends dynamic = dynamic>(self::method2::S% s) → dynamic {
+  self::throws(() → void => s.f);
+}
+static method main() → dynamic {}
+static method throws(() → void f) → dynamic {
+  try {
+    f.call();
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect
new file mode 100644
index 0000000..aae95d4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.strong.transformed.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E<T extends core::Object? = dynamic> on T% {
+  get f = self::E|get#f;
+}
+static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+  return (self::E|get#f::T% t) → self::E|get#f::T% => t;
+static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
+  (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
+}
+static method method2<S extends dynamic = dynamic>(self::method2::S% s) → dynamic {
+  self::throws(() → void => s.f);
+}
+static method main() → dynamic {}
+static method throws(() → void f) → dynamic {
+  try {
+    f.call();
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.textual_outline.expect
new file mode 100644
index 0000000..eb34b94
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+extension E<T> (){}
+on T (){}
+method1<S>(S s) {}
+method2<S extends dynamic>(S s) {}
+main() {}
+throws(void Function() f) {}
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect
new file mode 100644
index 0000000..aae95d4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E<T extends core::Object? = dynamic> on T% {
+  get f = self::E|get#f;
+}
+static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+  return (self::E|get#f::T% t) → self::E|get#f::T% => t;
+static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
+  (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
+}
+static method method2<S extends dynamic = dynamic>(self::method2::S% s) → dynamic {
+  self::throws(() → void => s.f);
+}
+static method main() → dynamic {}
+static method throws(() → void f) → dynamic {
+  try {
+    f.call();
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect
new file mode 100644
index 0000000..aae95d4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue43591.dart.weak.transformed.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension E<T extends core::Object? = dynamic> on T% {
+  get f = self::E|get#f;
+}
+static method E|get#f<T extends core::Object? = dynamic>(final self::E|get#f::T% #this) → (self::E|get#f::T%) → self::E|get#f::T%
+  return (self::E|get#f::T% t) → self::E|get#f::T% => t;
+static method method1<S extends core::Object? = dynamic>(self::method1::S% s) → dynamic {
+  (self::method1::S%) → self::method1::S% f = self::E|get#f<self::method1::S%>(s);
+}
+static method method2<S extends dynamic = dynamic>(self::method2::S% s) → dynamic {
+  self::throws(() → void => s.f);
+}
+static method main() → dynamic {}
+static method throws(() → void f) → dynamic {
+  try {
+    f.call();
+  }
+  on core::Object catch(final core::Object e) {
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index c5561f0..452295f 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -90,7 +90,6 @@
 general/spread_collection: RuntimeError
 general/type_parameter_type_named_int: RuntimeError # Expected
 general/type_variable_as_super: RuntimeError
-general/type_variable_bound_access: TypeCheckError
 general/unsound_promotion: TypeCheckError
 general/void_methods: RuntimeError
 general/with_dependencies/issue_43084/issue_43084: RuntimeError
@@ -138,7 +137,6 @@
 general_nnbd_opt_out/statements: Crash
 general_nnbd_opt_out/type_parameter_type_named_int: RuntimeError # Expected
 general_nnbd_opt_out/type_variable_as_super: RuntimeError
-general_nnbd_opt_out/type_variable_bound_access: TypeCheckError
 general_nnbd_opt_out/unsound_promotion: TypeCheckError
 general_nnbd_opt_out/void_methods: RuntimeError
 inference/constructors_infer_from_arguments_argument_not_assignable: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 144376f..7d1edf3 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -93,7 +93,6 @@
 general/spread_collection: RuntimeError # Should be fixed as part of implementing spread collection support
 general/type_parameter_type_named_int: RuntimeError
 general/type_variable_as_super: RuntimeError
-general/type_variable_bound_access: TypeCheckError
 general/unsound_promotion: TypeCheckError
 general/void_methods: RuntimeError
 general/with_dependencies/issue_43084/issue_43084: RuntimeError
@@ -140,7 +139,6 @@
 general_nnbd_opt_out/statements: Crash
 general_nnbd_opt_out/type_parameter_type_named_int: RuntimeError
 general_nnbd_opt_out/type_variable_as_super: RuntimeError
-general_nnbd_opt_out/type_variable_bound_access: TypeCheckError
 general_nnbd_opt_out/unsound_promotion: TypeCheckError
 general_nnbd_opt_out/void_methods: RuntimeError
 inference/constructors_infer_from_arguments_argument_not_assignable: TypeCheckError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 015fa36..1d7593c 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -191,6 +191,7 @@
 nnbd/issue43211: FormatterCrash
 nnbd/issue43278: FormatterCrash
 nnbd/issue43354: FormatterCrash
+nnbd/issue43591: FormatterCrash
 nnbd/issue43689: FormatterCrash
 nnbd/language_issue1182: FormatterCrash
 nnbd/late: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 3ef9d65..21b2c44 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -53,7 +53,6 @@
 general_nnbd_opt_out/spread_collection: RuntimeError
 general_nnbd_opt_out/type_parameter_type_named_int: RuntimeError # Expected
 general_nnbd_opt_out/type_variable_as_super: RuntimeError
-general_nnbd_opt_out/type_variable_bound_access: TypeCheckError
 general_nnbd_opt_out/unsound_promotion: TypeCheckError
 general_nnbd_opt_out/void_methods: RuntimeError
 late_lowering/covariant_late_field: TypeCheckError
diff --git a/pkg/kernel/lib/naive_type_checker.dart b/pkg/kernel/lib/naive_type_checker.dart
index 1178a0c..2eb77b3 100644
--- a/pkg/kernel/lib/naive_type_checker.dart
+++ b/pkg/kernel/lib/naive_type_checker.dart
@@ -255,6 +255,11 @@
 
   @override
   void checkUnresolvedInvocation(DartType receiver, TreeNode where) {
+    while (receiver is TypeParameterType) {
+      TypeParameterType typeParameterType = receiver;
+      receiver = typeParameterType.bound;
+    }
+
     if (receiver is DynamicType) {
       return;
     }
diff --git a/tests/language/extension_methods/static_extension_resolution_7_test.dart b/tests/language/extension_methods/static_extension_resolution_7_test.dart
index 96c1712..64bb976 100644
--- a/tests/language/extension_methods/static_extension_resolution_7_test.dart
+++ b/tests/language/extension_methods/static_extension_resolution_7_test.dart
@@ -32,8 +32,8 @@
 
   void testPromotedType(S s) {
     if (s is int) {
-      // Check that `int` has no `f`, bind `T` to `int`.
-      int Function(int) f = s.f;
+      // Check that `int` has no `f`, erase `S & int` to `S`, bind `T` to `S`.
+      S Function(S) f = s.f;
     }
   }
 }
diff --git a/tests/language/nnbd/inference/late_variable_type_for_promotion_test.dart b/tests/language/nnbd/inference/late_variable_type_for_promotion_test.dart
index fd4ebed..11a3d2b 100644
--- a/tests/language/nnbd/inference/late_variable_type_for_promotion_test.dart
+++ b/tests/language/nnbd/inference/late_variable_type_for_promotion_test.dart
@@ -97,7 +97,12 @@
 void uninitializedUntyped() {
   late var x;
   x = 0;
-  x.expectStaticType<Exactly<dynamic>>();
+  if (false) {
+    // Check that the static type of [x] is dynamic:
+    Never n = x;
+    x = 0;
+    x = false;
+  }
   // Attempting to promote to `int?` should be ok, since `int?` is a subtype of
   // `dynamic`.
   if (x is int?) {
diff --git a/tests/language/operator/number_operator_typing_test.dart b/tests/language/operator/number_operator_typing_test.dart
index c650e61..a6fcd7d 100644
--- a/tests/language/operator/number_operator_typing_test.dart
+++ b/tests/language/operator/number_operator_typing_test.dart
@@ -149,11 +149,41 @@
     n.remainder(never).expectStaticType<Exactly<num>>();
   }
 
-  (dyn1 + d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 - d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 * d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 % d).expectStaticType<Exactly<dynamic>>();
-  dyn1.remainder(d).expectStaticType<Exactly<dynamic>>();
+  var dyn1a = dyn1 + d;
+  if (false) {
+    // Check that the static type of [dyn1a] is dynamic:
+    Never n = dyn1a;
+    dyn1a = 0;
+    dyn1a = false;
+  }
+  var dyn1b = dyn1 - d;
+  if (false) {
+    // Check that the static type of [dyn1b] is dynamic:
+    Never n = dyn1b;
+    dyn1b = 0;
+    dyn1b = false;
+  }
+  var dyn1c = dyn1 * d;
+  if (false) {
+    // Check that the static type of [dyn1c] is dynamic:
+    Never n = dyn1c;
+    dyn1c = 0;
+    dyn1c = false;
+  }
+  var dyn1d = dyn1 % d;
+  if (false) {
+    // Check that the static type of [dyn1d] is dynamic:
+    Never n = dyn1d;
+    dyn1d = 0;
+    dyn1d = false;
+  }
+  var dyn1e = dyn1.remainder(d);
+  if (false) {
+    // Check that the static type of [dyn1e] is dynamic:
+    Never n = dyn1a;
+    dyn1a = 0;
+    dyn1a = false;
+  }
 
   if (false) {
     (never + d).expectStaticType<Exactly<Never>>();
@@ -356,11 +386,41 @@
     n.remainder(never).expectStaticType<Exactly<num>>();
   }
 
-  (dyn1 + d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 - d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 * d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 % d).expectStaticType<Exactly<dynamic>>();
-  dyn1.remainder(d).expectStaticType<Exactly<dynamic>>();
+  var dyn1a = dyn1 + d;
+  if (false) {
+    // Check that the static type of [dyn1a] is dynamic:
+    Never n = dyn1a;
+    dyn1a = 0;
+    dyn1a = false;
+  }
+  var dyn1b = dyn1 - d;
+  if (false) {
+    // Check that the static type of [dyn1b] is dynamic:
+    Never n = dyn1b;
+    dyn1b = 0;
+    dyn1b = false;
+  }
+  var dyn1c = dyn1 * d;
+  if (false) {
+    // Check that the static type of [dyn1c] is dynamic:
+    Never n = dyn1c;
+    dyn1c = 0;
+    dyn1c = false;
+  }
+  var dyn1d = dyn1 % d;
+  if (false) {
+    // Check that the static type of [dyn1d] is dynamic:
+    Never n = dyn1d;
+    dyn1d = 0;
+    dyn1d = false;
+  }
+  var dyn1e = dyn1.remainder(d);
+  if (false) {
+    // Check that the static type of [dyn1e] is dynamic:
+    Never n = dyn1a;
+    dyn1a = 0;
+    dyn1a = false;
+  }
 
   if (false) {
     (never + d).expectStaticType<Exactly<Never>>();
@@ -599,11 +659,41 @@
     n.remainder(never).expectStaticType<Exactly<num>>();
   }
 
-  (dyn1 + d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 - d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 * d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 % d).expectStaticType<Exactly<dynamic>>();
-  dyn1.remainder(d).expectStaticType<Exactly<dynamic>>();
+  var dyn1a = dyn1 + d;
+  if (false) {
+    // Check that the static type of [dyn1a] is dynamic:
+    Never n = dyn1a;
+    dyn1a = 0;
+    dyn1a = false;
+  }
+  var dyn1b = dyn1 - d;
+  if (false) {
+    // Check that the static type of [dyn1b] is dynamic:
+    Never n = dyn1b;
+    dyn1b = 0;
+    dyn1b = false;
+  }
+  var dyn1c = dyn1 * d;
+  if (false) {
+    // Check that the static type of [dyn1c] is dynamic:
+    Never n = dyn1c;
+    dyn1c = 0;
+    dyn1c = false;
+  }
+  var dyn1d = dyn1 % d;
+  if (false) {
+    // Check that the static type of [dyn1d] is dynamic:
+    Never n = dyn1d;
+    dyn1d = 0;
+    dyn1d = false;
+  }
+  var dyn1e = dyn1.remainder(d);
+  if (false) {
+    // Check that the static type of [dyn1e] is dynamic:
+    Never n = dyn1a;
+    dyn1a = 0;
+    dyn1a = false;
+  }
 
   if (false) {
     (never + d).expectStaticType<Exactly<Never>>();
@@ -820,11 +910,41 @@
     n.remainder(never).expectStaticType<Exactly<num>>();
   }
 
-  (dyn1 + d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 - d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 * d).expectStaticType<Exactly<dynamic>>();
-  (dyn1 % d).expectStaticType<Exactly<dynamic>>();
-  dyn1.remainder(d).expectStaticType<Exactly<dynamic>>();
+  var dyn1a = dyn1 + d;
+  if (false) {
+    // Check that the static type of [dyn1a] is dynamic:
+    Never n = dyn1a;
+    dyn1a = 0;
+    dyn1a = false;
+  }
+  var dyn1b = dyn1 - d;
+  if (false) {
+    // Check that the static type of [dyn1b] is dynamic:
+    Never n = dyn1b;
+    dyn1b = 0;
+    dyn1b = false;
+  }
+  var dyn1c = dyn1 * d;
+  if (false) {
+    // Check that the static type of [dyn1c] is dynamic:
+    Never n = dyn1c;
+    dyn1c = 0;
+    dyn1c = false;
+  }
+  var dyn1d = dyn1 % d;
+  if (false) {
+    // Check that the static type of [dyn1d] is dynamic:
+    Never n = dyn1d;
+    dyn1d = 0;
+    dyn1d = false;
+  }
+  var dyn1e = dyn1.remainder(d);
+  if (false) {
+    // Check that the static type of [dyn1e] is dynamic:
+    Never n = dyn1a;
+    dyn1a = 0;
+    dyn1a = false;
+  }
 
   if (false) {
     (never + d).expectStaticType<Exactly<Never>>();
diff --git a/tools/VERSION b/tools/VERSION
index 0da300e..2ba0f39 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 5
+PRERELEASE 6
 PRERELEASE_PATCH 0
\ No newline at end of file
