"
Using property’s getter to check isAccessible is not possible because it throws an UninitializedPropertyAccessException if the property is not initialized. So, the compiler must generate direct read access to the backing field’s property. The requirement “must be a reference to a property, the backing field of which should be accessible” is thus needed because the compiler must know statically which property is referenced, check that it’s a lateinit property, and ensure that it’s possible to generate access to the backing field.
The generated bytecode itself is very simple. Because isInitialized is an intrinsic, we’re able to avoid the generation of the anonymous class for the property reference and use the GETFIELD instruction directly.” -> i think this answers definitively