The get_obj_tib isntruction is treated as a unary operator. This is true except during allocation when the object's tib field is being initialized.
The following has been observed. The allocation sequence, after inlining, has a loop which makes it attractive for gcp to move a get_obj_tib from outside the uninterruptible region to the loop's initialization block. Unfortunately, this happens to be before the tib's initialization (int_store).
(1) Augment the semantics of uninterruptible so it means that tib's can change inside the region. Forbid get_obj_tib and
get_array_length from moving into or out of such regions.
(2) Slightly cleaner, but more work, would be to create a new region type called object_initialization.
(3) Create new magics (set_obj_tib, set_array_length). Make all header-related operations non-unary.
This issue replaces SF bug #1147514.