library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
//   local1; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
//   local2; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
//   local4; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
//   local5; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
//   local6; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
//   local1; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
//   local2; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
//   local4; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
//   local5; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
//   local6; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
//   local1; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
//   local5; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
//   local1; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
//   local5; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3 += 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
//   local4 += 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3 += 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
//   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? {
  T% local1;
  late T% local2;
  core::int local3;
  late core::int local4;
  asy::FutureOr<core::int> local5;
  late asy::FutureOr<core::int> local6;
  function #local7#initializer() → T%
    return value;
  late T% local7 = #local7#initializer.call();
  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
  local1; // error
  ^^^^^^" in local1;
  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
  local2; // error
  ^^^^^^" in local2;
  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
  local3; // error
  ^^^^^^" in local3;
  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
  local4; // error
  ^^^^^^" in local4;
  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
  local5; // error
  ^^^^^^" in local5;
  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
  local6; // error
  ^^^^^^" in local6;
  local7;
};
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? {
  T% local1;
  late T% local2;
  core::int local3;
  late core::int local4;
  asy::FutureOr<core::int> local5;
  late asy::FutureOr<core::int> local6;
  function #local7#initializer() → T%
    return value;
  late T% local7 = #local7#initializer.call();
  if(b) {
    local1 = value;
    local2 = value;
    local3 = 0;
    local4 = 0;
    local5 = 0;
    local6 = 0;
    local7;
  }
  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
  local1; // error
  ^^^^^^" in local1;
  local2;
  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
  local3; // error
  ^^^^^^" in local3;
  local4;
  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
  local5; // error
  ^^^^^^" in local5;
  local6;
  local7;
};
static field () → core::Null? fieldCompound = () → core::Null? {
  core::int local3;
  late core::int local4;
  local3 = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
  local3 += 0; // error
  ^^^^^^" in local3).{core::num::+}(0);
  local4 = (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
  local4 += 0; // error
  ^^^^^^" in local4).{core::num::+}(0);
};
static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
  self::methodDirect::T% local1;
  late self::methodDirect::T% local2;
  core::int local3;
  late core::int local4;
  asy::FutureOr<core::int> local5;
  late asy::FutureOr<core::int> local6;
  function #local7#initializer() → self::methodDirect::T%
    return value;
  late self::methodDirect::T% local7 = #local7#initializer.call();
  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
  local1; // error
  ^^^^^^" in local1;
  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
  local2; // error
  ^^^^^^" in local2;
  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
  local3; // error
  ^^^^^^" in local3;
  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
  local4; // error
  ^^^^^^" in local4;
  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
  local5; // error
  ^^^^^^" in local5;
  let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
  local6; // error
  ^^^^^^" in local6;
  local7;
}
static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
  self::methodConditional::T% local1;
  late self::methodConditional::T% local2;
  core::int local3;
  late core::int local4;
  asy::FutureOr<core::int> local5;
  late asy::FutureOr<core::int> local6;
  function #local7#initializer() → self::methodConditional::T%
    return value;
  late self::methodConditional::T% local7 = #local7#initializer.call();
  if(b) {
    local1 = value;
    local2 = value;
    local3 = 0;
    local4 = 0;
    local5 = 0;
    local6 = 0;
    local7 = value;
  }
  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
  local1; // error
  ^^^^^^" in local1;
  local2;
  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
  local3; // error
  ^^^^^^" in local3;
  local4;
  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
  local5; // error
  ^^^^^^" in local5;
  local6;
  local7;
}
static method methodCompound() → dynamic {
  core::int local3;
  late core::int local4;
  local3 = (let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
  local3 += 0; // error
  ^^^^^^" in local3).{core::num::+}(0);
  local4 = (let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
  local4 += 0; // error
  ^^^^^^" in local4).{core::num::+}(0);
}
static method main() → dynamic {}
