library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
//   local2 = value; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
//   local4 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
//   local6 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
//   local2 = value; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
//   local4 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
//   local6 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
//   local2 = value; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
//   local4 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
//   local6 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
//   local2 = value; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
//   local4 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
//   local6 = 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
//   local4 += 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
//   local4 += 0; // error
//   ^^^^^^
//
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

import "dart:async";

static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
  late final T% local2;
  late final core::int local4;
  late final asy::FutureOr<core::int> local6;
  local2 = value;
  local4 = 0;
  local6 = 0;
  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
  local2 = value; // error
  ^^^^^^" in local2 = value;
  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
  local4 = 0; // error
  ^^^^^^" in local4 = 0;
  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
  local6 = 0; // error
  ^^^^^^" in local6 = 0;
};
static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
  late final T% local2;
  late final core::int local4;
  late final asy::FutureOr<core::int> local6;
  if(b) {
    local2 = value;
    local4 = 0;
    local6 = 0;
  }
  local2 = value;
  local4 = 0;
  local6 = 0;
  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
  local2 = value; // error
  ^^^^^^" in local2 = value;
  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
  local4 = 0; // error
  ^^^^^^" in local4 = 0;
  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
  local6 = 0; // error
  ^^^^^^" in local6 = 0;
};
static field () → core::Null? fieldCompound = () → core::Null? {
  late final core::int local4;
  local4 = 0;
  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
  local4 += 0; // error
  ^^^^^^" in local4 = local4.{core::num::+}(0);
};
static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
  late final self::methodDirect::T% local2;
  late final core::int local4;
  late final asy::FutureOr<core::int> local6;
  local2 = value;
  local4 = 0;
  local6 = 0;
  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
  local2 = value; // error
  ^^^^^^" in local2 = value;
  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
  local4 = 0; // error
  ^^^^^^" in local4 = 0;
  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
  local6 = 0; // error
  ^^^^^^" in local6 = 0;
}
static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
  late final self::methodConditional::T% local2;
  late final core::int local4;
  late final asy::FutureOr<core::int> local6;
  if(b) {
    local2 = value;
    local4 = 0;
    local6 = 0;
  }
  local2 = value;
  local4 = 0;
  local6 = 0;
  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
  local2 = value; // error
  ^^^^^^" in local2 = value;
  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
  local4 = 0; // error
  ^^^^^^" in local4 = 0;
  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
  local6 = 0; // error
  ^^^^^^" in local6 = 0;
}
static method methodCompound() → dynamic {
  late final core::int local4;
  local4 = 0;
  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
  local4 += 0; // error
  ^^^^^^" in local4 = local4.{core::num::+}(0);
}
static method main() → dynamic {}
