diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index edb4a54..d237dcf 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -2361,9 +2361,7 @@
 
   @override
   Constant visitIsExpression(IsExpression node) {
-    // TODO(jensj): Why does this call .accept directly?
-    // (@askesc says it's probably an oversight)
-    final Constant constant = node.operand.accept(this);
+    final Constant constant = _evaluateSubexpression(node.operand);
     if (constant is AbortConstant) return constant;
     if (shouldBeUnevaluated) {
       return unevaluated(
diff --git a/tests/language/least_upper_bound/least_upper_bound_fbound_test.dart b/tests/language/least_upper_bound/least_upper_bound_fbound_test.dart
new file mode 100644
index 0000000..9fb032f
--- /dev/null
+++ b/tests/language/least_upper_bound/least_upper_bound_fbound_test.dart
@@ -0,0 +1,50 @@
+// 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.
+
+import '../static_type_helper.dart';
+
+// Test least upper bound for a type variable with an F-bound.
+
+bool condition = true;
+
+class A<X extends A<X, X>?, Y extends A<Y, Y>?> {
+  X x;
+  late Y y;
+
+  A(this.x);
+
+  void m(X x, Y y) {
+    // UP(X extends A<X, X>?, Y extends A<Y, Y>?) ==
+    // A<Object?, Object?>?.
+    var z = condition ? x : y;
+    z.expectStaticType<Exactly<A<Object?, Object?>?>>();
+
+    // Distinguish top types.
+    if (z == null) throw 0;
+    var zx = z.x, zy = z.y;
+
+    // Not `dynamic`, not `void`.
+    zx?.whatever;
+    //  ^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
+    // [cfe] The getter 'whatever' isn't defined for the class 'Object'.
+    zy?.whatever;
+    //  ^^^^^^^^
+    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
+    // [cfe] The getter 'whatever' isn't defined for the class 'Object'.
+
+    if (zx == null || zy == null) throw 0;
+    zx.expectStaticType<Exactly<Object>>();
+    zy.expectStaticType<Exactly<Object>>();
+  }
+}
+
+class B<X> extends A<B<X>?, B<X>?> {
+  B() : super(null);
+}
+
+void main() {
+  var b = B<Null>();
+  b.m(b, null);
+}
diff --git a/tests/language/least_upper_bound/least_upper_bound_function_test.dart b/tests/language/least_upper_bound/least_upper_bound_function_test.dart
new file mode 100644
index 0000000..6d0e187
--- /dev/null
+++ b/tests/language/least_upper_bound/least_upper_bound_function_test.dart
@@ -0,0 +1,51 @@
+// 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.
+
+// Test least upper bound for a Function type and a type that doesn't match
+// any of the cases for function types being subtypes of each other.
+
+import 'dart:async';
+import '../static_type_helper.dart';
+
+bool condition = true;
+
+void main() {
+  void f1(void Function() x, Object y) {
+    var z = condition ? x : y;
+    z.expectStaticType<Exactly<Object>>();
+  }
+
+  void f2(int x, void Function<X>() y) {
+    var z = condition ? x : y;
+    z.expectStaticType<Exactly<Object>>();
+  }
+
+  void f3(double Function(int, int) x, FutureOr<Function> y) {
+    var z = condition ? x : y;
+    z.expectStaticType<Exactly<Object>>();
+  }
+
+  void f4(FutureOr<Function?> x, Function(int i, {int j}) y) {
+    var z = condition ? x : y;
+    z.expectStaticType<Exactly<Object?>>();
+  }
+
+  void f5(Function Function<Y>([Y y]) x, dynamic y) {
+    var z = condition ? x : y;
+    // Check that the type is a top type.
+    z.expectStaticType<Exactly<dynamic>>();
+    // Check that the type is `dynamic`.
+    z.unknownMember;
+  }
+
+  void f6(Never x, Never Function() y) {
+    var z = condition ? x : y;
+    z.expectStaticType<Exactly<Never Function()>>();
+  }
+
+  void f7(Function(Function) x, Null y) {
+    var z = condition ? x : y;
+    z.expectStaticType<Exactly<Object?>>();
+  }
+}
diff --git a/tools/VERSION b/tools/VERSION
index 0fd19c8..178e41b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 11
 PATCH 0
-PRERELEASE 200
+PRERELEASE 201
 PRERELEASE_PATCH 0
\ No newline at end of file
