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";

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 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 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 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 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 {}
