// Copyright (c) 2017, 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

abstract class Base {
  void update(void Function(Iterable) updates);
  void update2(void updates(Iterable iterable));
}

class CovariantParsingIssue implements Base {
  void update(covariant void Function(List) updates) {}
  void update2(covariant void updates(List list)) {}
}

void VoidParsingIssue() {
  List<void Function(int)> functions = [(int i) => print(i + 1)];
  functions[0](42);
}

void main() {
  new CovariantParsingIssue();
  VoidParsingIssue();
}
