Version 2.11.0-176.0.dev

Merge commit 'b8909a487806310f1d64c83e41989703d4b47f21' into 'dev'
diff --git a/DEPS b/DEPS
index 02d36bb..5d510bd 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
   # hashes. It requires access to the dart-build-access group, which EngProd
   # has.
-  "co19_rev": "da33ec472443aa14d969bf54b9adc3af71cb6382",
+  "co19_rev": "58e95961ea492a749ca6eccf5586fdf8271f8266",
   "co19_2_rev": "e48b3090826cf40b8037648f19d211e8eab1b4b6",
 
   # The internal benchmarks to use. See go/dart-benchmarks-internal
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 1f4fe07..e429f2b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -85,7 +85,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 111;
+  static const int DATA_VERSION = 112;
 
   /// The length of the list returned by [_computeDeclaredVariablesSignature].
   static const int _declaredVariablesSignatureLength = 4;
diff --git a/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart b/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
index d636bf2..c90174a 100644
--- a/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
@@ -13,12 +13,17 @@
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/element/type_visitor.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:analyzer/src/summary2/function_type_builder.dart';
+import 'package:analyzer/src/summary2/named_type_builder.dart';
 import 'package:meta/meta.dart';
 
 /// Helper visitor that clones a type if a nested type is replaced, and
 /// otherwise returns `null`.
 class ReplacementVisitor
-    implements TypeVisitor<DartType>, InferenceTypeVisitor<DartType> {
+    implements
+        TypeVisitor<DartType>,
+        InferenceTypeVisitor<DartType>,
+        LinkingTypeVisitor<DartType> {
   const ReplacementVisitor();
 
   void changeVariance() {}
@@ -47,6 +52,27 @@
     );
   }
 
+  DartType createFunctionTypeBuilder({
+    @required FunctionTypeBuilder type,
+    @required List<TypeParameterElement> newTypeParameters,
+    @required List<ParameterElement> newParameters,
+    @required DartType newReturnType,
+    @required NullabilitySuffix newNullability,
+  }) {
+    if (newNullability == null &&
+        newReturnType == null &&
+        newParameters == null) {
+      return null;
+    }
+
+    return FunctionTypeBuilder(
+      newTypeParameters ?? type.typeFormals,
+      newParameters ?? type.parameters,
+      newReturnType ?? type.returnType,
+      newNullability ?? type.nullabilitySuffix,
+    );
+  }
+
   DartType createInterfaceType({
     @required InterfaceType type,
     @required List<DartType> newTypeArguments,
@@ -63,6 +89,23 @@
     );
   }
 
+  NamedTypeBuilder createNamedTypeBuilder({
+    @required NamedTypeBuilder type,
+    @required List<DartType> newTypeArguments,
+    @required NullabilitySuffix newNullability,
+  }) {
+    if (newTypeArguments == null && newNullability == null) {
+      return null;
+    }
+
+    return NamedTypeBuilder(
+      type.typeSystem,
+      type.element,
+      newTypeArguments ?? type.arguments,
+      newNullability ?? type.nullabilitySuffix,
+    );
+  }
+
   DartType createNeverType({
     @required NeverTypeImpl type,
     @required NullabilitySuffix newNullability,
@@ -207,17 +250,99 @@
   }
 
   @override
+  DartType visitFunctionTypeBuilder(FunctionTypeBuilder node) {
+    var newNullability = visitNullability(node);
+
+    List<TypeParameterElement> newTypeParameters;
+    for (var i = 0; i < node.typeFormals.length; i++) {
+      var typeParameter = node.typeFormals[i];
+      var bound = typeParameter.bound;
+      if (bound != null) {
+        var newBound = bound.accept(this);
+        if (newBound != null) {
+          newTypeParameters ??= node.typeFormals.toList(growable: false);
+          newTypeParameters[i] = TypeParameterElementImpl.synthetic(
+            typeParameter.name,
+          )..bound = newBound;
+        }
+      }
+    }
+
+    Substitution substitution;
+    if (newTypeParameters != null) {
+      var map = <TypeParameterElement, DartType>{};
+      for (var i = 0; i < newTypeParameters.length; ++i) {
+        var typeParameter = node.typeFormals[i];
+        var newTypeParameter = newTypeParameters[i];
+        map[typeParameter] = newTypeParameter.instantiate(
+          nullabilitySuffix: NullabilitySuffix.none,
+        );
+      }
+
+      substitution = Substitution.fromMap(map);
+
+      for (var i = 0; i < newTypeParameters.length; i++) {
+        var newTypeParameter = newTypeParameters[i];
+        var bound = newTypeParameter.bound;
+        if (bound != null) {
+          var newBound = substitution.substituteType(bound);
+          (newTypeParameter as TypeParameterElementImpl).bound = newBound;
+        }
+      }
+    }
+
+    DartType visitType(DartType type) {
+      if (type == null) return null;
+      var result = type.accept(this);
+      if (substitution != null) {
+        result = substitution.substituteType(result ?? type);
+      }
+      return result;
+    }
+
+    var newReturnType = visitType(node.returnType);
+
+    changeVariance();
+
+    List<ParameterElement> newParameters;
+    for (var i = 0; i < node.parameters.length; i++) {
+      var parameter = node.parameters[i];
+
+      var type = parameter.type;
+      var newType = visitType(type);
+
+      // ignore: deprecated_member_use_from_same_package
+      var kind = parameter.parameterKind;
+      var newKind = visitParameterKind(kind);
+
+      if (newType != null || newKind != null) {
+        newParameters ??= node.parameters.toList(growable: false);
+        newParameters[i] = parameter.copyWith(
+          type: newType,
+          kind: newKind,
+        );
+      }
+    }
+
+    changeVariance();
+
+    return createFunctionTypeBuilder(
+      type: node,
+      newTypeParameters: newTypeParameters,
+      newParameters: newParameters,
+      newReturnType: newReturnType,
+      newNullability: newNullability,
+    );
+  }
+
+  @override
   DartType visitInterfaceType(InterfaceType type) {
     var newNullability = visitNullability(type);
 
-    List<DartType> newTypeArguments;
-    for (var i = 0; i < type.typeArguments.length; i++) {
-      var substitution = type.typeArguments[i].accept(this);
-      if (substitution != null) {
-        newTypeArguments ??= type.typeArguments.toList(growable: false);
-        newTypeArguments[i] = substitution;
-      }
-    }
+    var newTypeArguments = _typeArguments(
+      type.element.typeParameters,
+      type.typeArguments,
+    );
 
     return createInterfaceType(
       type: type,
@@ -227,6 +352,26 @@
   }
 
   @override
+  DartType visitNamedTypeBuilder(NamedTypeBuilder type) {
+    var newNullability = visitNullability(type);
+
+    var parameters = const <TypeParameterElement>[];
+    var element = type.element;
+    if (element is ClassElement) {
+      parameters = element.typeParameters;
+    } else if (element is FunctionTypeAliasElement) {
+      parameters = element.typeParameters;
+    }
+
+    var newArguments = _typeArguments(parameters, type.arguments);
+    return createNamedTypeBuilder(
+      type: type,
+      newTypeArguments: newArguments,
+      newNullability: newNullability,
+    );
+  }
+
+  @override
   DartType visitNeverType(NeverType type) {
     var newNullability = visitNullability(type);
 
@@ -244,6 +389,11 @@
     return null;
   }
 
+  DartType visitTypeArgument(
+      TypeParameterElement parameter, DartType argument) {
+    return argument.accept(this);
+  }
+
   @override
   DartType visitTypeParameterType(TypeParameterType type) {
     var newNullability = visitNullability(type);
@@ -273,4 +423,28 @@
   DartType visitVoidType(VoidType type) {
     return null;
   }
+
+  List<DartType> _typeArguments(
+    List<TypeParameterElement> parameters,
+    List<DartType> arguments,
+  ) {
+    if (arguments == null) {
+      return null;
+    }
+
+    if (arguments.length != parameters.length) {
+      return null;
+    }
+
+    List<DartType> newArguments;
+    for (var i = 0; i < arguments.length; i++) {
+      var substitution = visitTypeArgument(parameters[i], arguments[i]);
+      if (substitution != null) {
+        newArguments ??= arguments.toList(growable: false);
+        newArguments[i] = substitution;
+      }
+    }
+
+    return newArguments;
+  }
 }
diff --git a/pkg/analyzer/lib/src/dart/micro/cider_byte_store.dart b/pkg/analyzer/lib/src/dart/micro/cider_byte_store.dart
index 5d97366..57531d9 100644
--- a/pkg/analyzer/lib/src/dart/micro/cider_byte_store.dart
+++ b/pkg/analyzer/lib/src/dart/micro/cider_byte_store.dart
@@ -2,6 +2,7 @@
 // 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 'package:analyzer/src/dart/analysis/cache.dart';
 import 'package:collection/collection.dart';
 
 /// Store of bytes associated with string keys and a hash.
@@ -23,19 +24,16 @@
   void put(String key, List<int> signature, List<int> bytes);
 }
 
-class CiderCacheEntry {
-  final List<int> signature;
-  final List<int> bytes;
+class CiderCachedByteStore implements CiderByteStore {
+  final Cache<String, CiderCacheEntry> _cache;
 
-  CiderCacheEntry(this.signature, this.bytes);
-}
-
-class CiderMemoryByteStore implements CiderByteStore {
-  final Map<String, CiderCacheEntry> _map = {};
+  CiderCachedByteStore(int maxCacheSize)
+      : _cache =
+            Cache<String, CiderCacheEntry>(maxCacheSize, (v) => v.bytes.length);
 
   @override
   List<int> get(String key, List<int> signature) {
-    var entry = _map[key];
+    var entry = _cache.get(key, () => null);
 
     if (entry != null &&
         const ListEquality<int>().equals(entry.signature, signature)) {
@@ -46,6 +44,13 @@
 
   @override
   void put(String key, List<int> signature, List<int> bytes) {
-    _map[key] = CiderCacheEntry(signature, bytes);
+    _cache.put(key, CiderCacheEntry(signature, bytes));
   }
 }
+
+class CiderCacheEntry {
+  final List<int> signature;
+  final List<int> bytes;
+
+  CiderCacheEntry(this.signature, this.bytes);
+}
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index 206d69c..5216076 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -40,6 +40,9 @@
 import 'package:meta/meta.dart';
 import 'package:yaml/yaml.dart';
 
+const M = 1024 * 1024 /*1 MiB*/;
+const memoryCacheSize = 200 * M;
+
 class FileContext {
   final AnalysisOptionsImpl analysisOptions;
   final FileState file;
@@ -113,7 +116,7 @@
         getFileDigest = getFileDigest,
         prefetchFiles = prefetchFiles,
         workspace = workspace {
-    byteStore ??= CiderMemoryByteStore();
+    byteStore ??= CiderCachedByteStore(memoryCacheSize);
     this.byteStore = byteStore;
     _libraryContextReset = _LibraryContextReset(
       fileResolver: this,
diff --git a/pkg/analyzer/lib/src/summary2/default_types_builder.dart b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
index ce0b852..d06952b 100644
--- a/pkg/analyzer/lib/src/summary2/default_types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
@@ -6,13 +6,15 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/replacement_visitor.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/dart/element/type_algebra.dart';
+import 'package:analyzer/src/dart/resolver/variance.dart';
 import 'package:analyzer/src/summary2/function_type_builder.dart';
 import 'package:analyzer/src/summary2/lazy_ast.dart';
 import 'package:analyzer/src/summary2/named_type_builder.dart';
 import 'package:analyzer/src/summary2/type_builder.dart';
 import 'package:analyzer/src/util/graph.dart';
+import 'package:meta/meta.dart';
 
 class DefaultTypesBuilder {
   void build(List<AstNode> nodes) {
@@ -152,12 +154,14 @@
     if (parameterList == null) return;
 
     var typeProvider = declarationElement.library.typeProvider;
-    var dynamicType = typeProvider.dynamicType;
-    var nullType = typeProvider.nullType;
+    var dynamicType = DynamicTypeImpl.instance;
+    var bottomType = declarationElement.library.isNonNullableByDefault
+        ? NeverTypeImpl.instance
+        : typeProvider.nullType;
 
     var nodes = parameterList.typeParameters;
     var length = nodes.length;
-    var elements = List<TypeParameterElement>(length);
+    var elements = List<TypeParameterElementImpl>(length);
     var bounds = List<DartType>(length);
     for (int i = 0; i < length; i++) {
       var node = nodes[i];
@@ -173,15 +177,17 @@
       for (var i in component) {
         var element = elements[i];
         dynamicSubstitution[element] = dynamicType;
-        nullSubstitution[element] = nullType;
+        nullSubstitution[element] = bottomType;
       }
 
-      var substitution = Substitution.fromUpperAndLowerBounds(
-        dynamicSubstitution,
-        nullSubstitution,
-      );
       for (var i in component) {
-        bounds[i] = substitution.substituteType(bounds[i]);
+        var variable = elements[i];
+        var visitor = _UpperLowerReplacementVisitor(
+          upper: dynamicSubstitution,
+          lower: nullSubstitution,
+          variance: variable.variance,
+        );
+        bounds[i] = visitor.run(bounds[i]);
       }
     }
 
@@ -190,14 +196,16 @@
       var nullSubstitution = <TypeParameterElement, DartType>{};
       var element = elements[i];
       thisSubstitution[element] = bounds[i];
-      nullSubstitution[element] = nullType;
+      nullSubstitution[element] = bottomType;
 
-      var substitution = Substitution.fromUpperAndLowerBounds(
-        thisSubstitution,
-        nullSubstitution,
-      );
       for (var j = 0; j < length; j++) {
-        bounds[j] = substitution.substituteType(bounds[j]);
+        var variable = elements[j];
+        var visitor = _UpperLowerReplacementVisitor(
+          upper: thisSubstitution,
+          lower: nullSubstitution,
+          variance: variable.variance,
+        );
+        bounds[j] = visitor.run(bounds[j]);
       }
     }
 
@@ -355,3 +363,55 @@
     }
   }
 }
+
+class _UpperLowerReplacementVisitor extends ReplacementVisitor {
+  final Map<TypeParameterElement, DartType> _upper;
+  final Map<TypeParameterElement, DartType> _lower;
+  Variance _variance;
+
+  _UpperLowerReplacementVisitor({
+    @required Map<TypeParameterElement, DartType> upper,
+    @required Map<TypeParameterElement, DartType> lower,
+    @required Variance variance,
+  })  : _upper = upper,
+        _lower = lower,
+        _variance = variance;
+
+  @override
+  void changeVariance() {
+    if (_variance == Variance.covariant) {
+      _variance = Variance.contravariant;
+    } else if (_variance == Variance.contravariant) {
+      _variance = Variance.covariant;
+    }
+  }
+
+  DartType run(DartType type) {
+    return type.accept(this) ?? type;
+  }
+
+  @override
+  DartType visitTypeArgument(
+    TypeParameterElement parameter,
+    DartType argument,
+  ) {
+    var savedVariance = _variance;
+    try {
+      _variance = _variance.combine(
+        (parameter as TypeParameterElementImpl).variance,
+      );
+      return super.visitTypeArgument(parameter, argument);
+    } finally {
+      _variance = savedVariance;
+    }
+  }
+
+  @override
+  DartType visitTypeParameterType(TypeParameterType type) {
+    if (_variance == Variance.contravariant) {
+      return _lower[type.element];
+    } else {
+      return _upper[type.element];
+    }
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/micro/file_resolution.dart b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
index 3e90ad5..250b588 100644
--- a/pkg/analyzer/test/src/dart/micro/file_resolution.dart
+++ b/pkg/analyzer/test/src/dart/micro/file_resolution.dart
@@ -22,7 +22,8 @@
 class FileResolutionTest with ResourceProviderMixin, ResolutionTest {
   static final String _testFile = '/workspace/dart/test/lib/test.dart';
 
-  final CiderByteStore byteStore = CiderMemoryByteStore();
+  final CiderByteStore byteStore =
+      CiderCachedByteStore(20 * 1024 * 1024 /* 20 MB */);
 
   final StringBuffer logBuffer = StringBuffer();
   PerformanceLog logger;
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 77e7e0e..863692f 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -1766,6 +1766,135 @@
         withTypeParameterVariance: true);
   }
 
+  test_class_typeParameters_defaultType_functionTypeAlias_contravariant_legacy() async {
+    var library = await checkLibrary(r'''
+typedef F<X> = void Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(
+        library,
+        r'''
+typedef F<contravariant X> = void Function(X );
+notSimplyBounded class A<covariant X extends void Function(X) = void Function(Null)> {
+}
+''',
+        withTypeParameterVariance: true);
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_contravariant_nullSafe() async {
+    featureSet = enableNnbd;
+    var library = await checkLibrary(r'''
+typedef F<X> = void Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(
+        library,
+        r'''
+typedef F<contravariant X> = void Function(X );
+notSimplyBounded class A<covariant X extends void Function(X) = void Function(Never)> {
+}
+''',
+        withTypeParameterVariance: true);
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_invariant_legacy() async {
+    var library = await checkLibrary(r'''
+typedef F<X> = X Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(
+        library,
+        r'''
+typedef F<invariant X> = X Function(X );
+notSimplyBounded class A<covariant X extends X Function(X) = dynamic Function(dynamic)> {
+}
+''',
+        withTypeParameterVariance: true);
+  }
+
+  test_class_typeParameters_defaultType_functionTypeAlias_invariant_nullSafe() async {
+    featureSet = enableNnbd;
+    var library = await checkLibrary(r'''
+typedef F<X> = X Function(X);
+
+class A<X extends F<X>> {}
+''');
+    checkElementText(
+        library,
+        r'''
+typedef F<invariant X> = X Function(X );
+notSimplyBounded class A<covariant X extends X Function(X) = dynamic Function(dynamic)> {
+}
+''',
+        withTypeParameterVariance: true);
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_both_legacy() async {
+    var library = await checkLibrary(r'''
+class A<X extends X Function(X)> {}
+''');
+    checkElementText(library, r'''
+notSimplyBounded class A<X extends X Function(X) = dynamic Function(Null)> {
+}
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_both_nullSafe() async {
+    featureSet = enableNnbd;
+    var library = await checkLibrary(r'''
+class A<X extends X Function(X)> {}
+''');
+    checkElementText(library, r'''
+notSimplyBounded class A<X extends X Function(X) = dynamic Function(Never)> {
+}
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_contravariant_legacy() async {
+    var library = await checkLibrary(r'''
+class A<X extends void Function(X)> {}
+''');
+    checkElementText(library, r'''
+notSimplyBounded class A<X extends void Function(X) = void Function(Null)> {
+}
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_contravariant_nullSafe() async {
+    featureSet = enableNnbd;
+    var library = await checkLibrary(r'''
+class A<X extends void Function(X)> {}
+''');
+    checkElementText(library, r'''
+notSimplyBounded class A<X extends void Function(X) = void Function(Never)> {
+}
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_covariant_legacy() async {
+    var library = await checkLibrary(r'''
+class A<X extends X Function()> {}
+''');
+    checkElementText(library, r'''
+notSimplyBounded class A<X extends X Function() = dynamic Function()> {
+}
+''');
+  }
+
+  test_class_typeParameters_defaultType_genericFunctionType_covariant_nullSafe() async {
+    featureSet = enableNnbd;
+    var library = await checkLibrary(r'''
+class A<X extends X Function()> {}
+''');
+    checkElementText(library, r'''
+notSimplyBounded class A<X extends X Function() = dynamic Function()> {
+}
+''');
+  }
+
   test_classes() async {
     var library = await checkLibrary('class C {} class D {}');
     checkElementText(library, r'''
@@ -11463,14 +11592,14 @@
   test_typedef_type_parameters_f_bound_complex() async {
     var library = await checkLibrary('typedef U F<T extends List<U>, U>(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends List<U> = List<dynamic>, U> = U Function(T t);
+notSimplyBounded typedef F<T extends List<U> = List<Null>, U> = U Function(T t);
 ''');
   }
 
   test_typedef_type_parameters_f_bound_simple() async {
     var library = await checkLibrary('typedef U F<T extends U, U>(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends U, U> = U Function(T t);
+notSimplyBounded typedef F<T extends U = Null, U> = U Function(T t);
 ''');
   }
 
@@ -11478,7 +11607,7 @@
     var library =
         await checkLibrary('typedef F<T extends U, U> = U Function(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends U, U> = U Function(T t);
+notSimplyBounded typedef F<T extends U = Null, U> = U Function(T t);
 ''');
   }
 
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 61305c7..4b00e14 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -2,8 +2,6 @@
 // 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 'dart:async';
-
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
diff --git a/tests/language/nnbd/definite_assignment/read_error_test.dart b/tests/language/nnbd/definite_assignment/read_error_test.dart
index 2f08ad1..0894e58 100644
--- a/tests/language/nnbd/definite_assignment/read_error_test.dart
+++ b/tests/language/nnbd/definite_assignment/read_error_test.dart
@@ -1066,8 +1066,10 @@
     final dynamic x;
     x = 3;
     3 ?? x;
-    //   ^
-    // [analyzer] STATIC_WARNING.DEAD_NULL_AWARE_EXPRESSION
+//  ^
+// [cfe] Operand of null-aware operation '??' has type 'int' which excludes null.
+//       ^
+// [analyzer] STATIC_WARNING.DEAD_NULL_AWARE_EXPRESSION
   }
 }
 
diff --git a/tools/VERSION b/tools/VERSION
index 1fad799..300b947 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 11
 PATCH 0
-PRERELEASE 175
+PRERELEASE 176
 PRERELEASE_PATCH 0
\ No newline at end of file