library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
//   local1; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
//   local2; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
//   local4; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
//   local5; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
//   local6; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
//   local1; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
//   local2; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
//   local4; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
//   local5; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
//   local6; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
//   local1; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
//   local5; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
//   local1; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
//   local3; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
//   local5; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/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/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
//   local4 += 0; // error
//   ^^^^^^
//
// pkg/front_end/testcases/late_lowering/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/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
//   local4 += 0; // error
//   ^^^^^^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

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;
  T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → T%
    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
  function #local2#set(T% #t1) → dynamic {
    #local2#isSet = true;
    return local2 = #t1;
  }
  core::int local3;
  core::int? local4;
  core::bool #local4#isSet = false;
  function #local4#get() → core::int
    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.");
  function #local4#set(core::int #t2) → dynamic {
    #local4#isSet = true;
    return local4 = #t2;
  }
  FutureOr<core::int>local5;
  FutureOr<core::int>? local6;
  core::bool #local6#isSet = false;
  function #local6#get() → FutureOr<core::int>
    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.");
  function #local6#set(FutureOr<core::int>#t3) → dynamic {
    #local6#isSet = true;
    return local6 = #t3;
  }
  T? local7;
  core::bool #local7#isSet = false;
  function #local7#get() → T% {
    if(!#local7#isSet) {
      local7 = value;
      #local7#isSet = true;
    }
    return local7{T%};
  }
  function #local7#set(T% #t4) → dynamic {
    #local7#isSet = true;
    return local7 = #t4;
  }
  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/late_lowering/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> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Late variable 'local2' without initializer is definitely unassigned.
  local2; // error
  ^^^^^^" in #local2#get.call();
  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/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> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Late variable 'local4' without initializer is definitely unassigned.
  local4; // error
  ^^^^^^" in #local4#get.call();
  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/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> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Late variable 'local6' without initializer is definitely unassigned.
  local6; // error
  ^^^^^^" in #local6#get.call();
  #local7#get.call();
};
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;
  T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → T%
    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
  function #local2#set(T% #t11) → dynamic {
    #local2#isSet = true;
    return local2 = #t11;
  }
  core::int local3;
  core::int? local4;
  core::bool #local4#isSet = false;
  function #local4#get() → core::int
    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.");
  function #local4#set(core::int #t12) → dynamic {
    #local4#isSet = true;
    return local4 = #t12;
  }
  FutureOr<core::int>local5;
  FutureOr<core::int>? local6;
  core::bool #local6#isSet = false;
  function #local6#get() → FutureOr<core::int>
    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.");
  function #local6#set(FutureOr<core::int>#t13) → dynamic {
    #local6#isSet = true;
    return local6 = #t13;
  }
  T? local7;
  core::bool #local7#isSet = false;
  function #local7#get() → T% {
    if(!#local7#isSet) {
      local7 = value;
      #local7#isSet = true;
    }
    return local7{T%};
  }
  function #local7#set(T% #t14) → dynamic {
    #local7#isSet = true;
    return local7 = #t14;
  }
  if(b) {
    local1 = value;
    #local2#set.call(value);
    local3 = 0;
    #local4#set.call(0);
    local5 = 0;
    #local6#set.call(0);
    #local7#get.call();
  }
  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
  local1; // error
  ^^^^^^" in local1;
  #local2#get.call();
  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
  local3; // error
  ^^^^^^" in local3;
  #local4#get.call();
  let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
  local5; // error
  ^^^^^^" in local5;
  #local6#get.call();
  #local7#get.call();
};
static field () → core::Null? fieldCompound = () → core::Null? {
  core::int local3;
  core::int? local4;
  core::bool #local4#isSet = false;
  function #local4#get() → core::int
    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.");
  function #local4#set(core::int #t18) → dynamic {
    #local4#isSet = true;
    return local4 = #t18;
  }
  local3 = (let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/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#set.call((let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Late variable 'local4' without initializer is definitely unassigned.
  local4 += 0; // error
  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
};
static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
  self::methodDirect::T% local1;
  self::methodDirect::T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → self::methodDirect::T%
    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
  function #local2#set(self::methodDirect::T% #t21) → dynamic {
    #local2#isSet = true;
    return local2 = #t21;
  }
  core::int local3;
  core::int? local4;
  core::bool #local4#isSet = false;
  function #local4#get() → core::int
    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.");
  function #local4#set(core::int #t22) → dynamic {
    #local4#isSet = true;
    return local4 = #t22;
  }
  FutureOr<core::int>local5;
  FutureOr<core::int>? local6;
  core::bool #local6#isSet = false;
  function #local6#get() → FutureOr<core::int>
    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.");
  function #local6#set(FutureOr<core::int>#t23) → dynamic {
    #local6#isSet = true;
    return local6 = #t23;
  }
  self::methodDirect::T? local7;
  core::bool #local7#isSet = false;
  function #local7#get() → self::methodDirect::T% {
    if(!#local7#isSet) {
      local7 = value;
      #local7#isSet = true;
    }
    return local7{self::methodDirect::T%};
  }
  function #local7#set(self::methodDirect::T% #t24) → dynamic {
    #local7#isSet = true;
    return local7 = #t24;
  }
  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/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> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Late variable 'local2' without initializer is definitely unassigned.
  local2; // error
  ^^^^^^" in #local2#get.call();
  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/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> #t28 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Late variable 'local4' without initializer is definitely unassigned.
  local4; // error
  ^^^^^^" in #local4#get.call();
  let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/late_lowering/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> #t30 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Late variable 'local6' without initializer is definitely unassigned.
  local6; // error
  ^^^^^^" in #local6#get.call();
  #local7#get.call();
}
static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
  self::methodConditional::T% local1;
  self::methodConditional::T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → self::methodConditional::T%
    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
  function #local2#set(self::methodConditional::T% #t31) → dynamic {
    #local2#isSet = true;
    return local2 = #t31;
  }
  core::int local3;
  core::int? local4;
  core::bool #local4#isSet = false;
  function #local4#get() → core::int
    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.");
  function #local4#set(core::int #t32) → dynamic {
    #local4#isSet = true;
    return local4 = #t32;
  }
  FutureOr<core::int>local5;
  FutureOr<core::int>? local6;
  core::bool #local6#isSet = false;
  function #local6#get() → FutureOr<core::int>
    return #local6#isSet ?{FutureOr<core::int>} local6{FutureOr<core::int>} : throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.");
  function #local6#set(FutureOr<core::int>#t33) → dynamic {
    #local6#isSet = true;
    return local6 = #t33;
  }
  self::methodConditional::T? local7;
  core::bool #local7#isSet = false;
  function #local7#get() → self::methodConditional::T% {
    if(!#local7#isSet) {
      local7 = value;
      #local7#isSet = true;
    }
    return local7{self::methodConditional::T%};
  }
  function #local7#set(self::methodConditional::T% #t34) → dynamic {
    #local7#isSet = true;
    return local7 = #t34;
  }
  if(b) {
    local1 = value;
    #local2#set.call(value);
    local3 = 0;
    #local4#set.call(0);
    local5 = 0;
    #local6#set.call(0);
    #local7#set.call(value);
  }
  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
  local1; // error
  ^^^^^^" in local1;
  #local2#get.call();
  let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
  local3; // error
  ^^^^^^" in local3;
  #local4#get.call();
  let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
  local5; // error
  ^^^^^^" in local5;
  #local6#get.call();
  #local7#get.call();
}
static method methodCompound() → dynamic {
  core::int local3;
  core::int? local4;
  core::bool #local4#isSet = false;
  function #local4#get() → core::int
    return #local4#isSet ?{core::int} local4{core::int} : throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.");
  function #local4#set(core::int #t38) → dynamic {
    #local4#isSet = true;
    return local4 = #t38;
  }
  local3 = (let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/late_lowering/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#set.call((let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Late variable 'local4' without initializer is definitely unassigned.
  local4 += 0; // error
  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
}
static method main() → dynamic {}
