Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Minor
-
Resolution: Unresolved
-
Affects Version/s: 2.9.0, 2.9.0.1, 2.9.1
-
Fix Version/s: 1000
-
Component/s: Compiler: Optimizing
-
Labels:None
-
Number of attachments :
Description
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).
Possible Solutions:
(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.