// @dart = 2.9999
class A {
  int a = 42;
  late int b = (this.a * 2) >> 1;
  foo(late int x) {}
}
bar(late int x) {}
baz() {}
hest() async {}
fisk() async {}
class B {
  late final int x = 42;
  const B();
}
class C {
  late final int x;
  initVars() {}
}
main() {}
