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%) → Null fieldDirect = <T extends core::Object? = dynamic>(T% value) → Null {
  T% local1;
  T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → T%
    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
  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::LateError::localNI("local4");
  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::LateError::localNI("local6");
  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%) → Null fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → Null {
  T% local1;
  T? local2;
  core::bool #local2#isSet = false;
  function #local2#get() → T%
    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateError::localNI("local2");
  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::LateError::localNI("local4");
  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::LateError::localNI("local6");
  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 () → Null fieldCompound = () → 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::LateError::localNI("local4");
  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::LateError::localNI("local2");
  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::LateError::localNI("local4");
  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::LateError::localNI("local6");
  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::LateError::localNI("local2");
  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::LateError::localNI("local4");
  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::LateError::localNI("local6");
  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::LateError::localNI("local4");
  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 {}
