-- { dg-do run } -- { dg-options "-gnatws" } with Text_IO; procedure renaming2 is type RealNodeData; type RefRealNodeData is access RealNodeData; type ExpressionEntry; type RefExpression is access ExpressionEntry; type RefDefUseEntry is access Natural; type ExpressionEntry is record Number : RefDefUseEntry; Id : Integer; end record; type RealNodeData is record Node : RefExpression; Id : Integer; end record; for ExpressionEntry use record Number at 0 range 0 .. 63; Id at 8 range 0 .. 31; end record ; for RealNodeData use record Node at 0 range 0 .. 63; Id at 8 range 0 .. 31; end record ; U_Node : RefDefUseEntry := new Natural'(1); E_Node : RefExpression := new ExpressionEntry'(Number => U_Node, Id => 2); R_Node : RefRealNodeData := new RealNodeData'(Node => E_Node, Id => 3); procedure test_routine (NodeRealData : RefRealNodeData) is OldHead : RefDefUseEntry renames NodeRealData.all.Node.all.Number; OldHead1 : constant RefDefUseEntry := OldHead; begin NodeRealData.all.Node := new ExpressionEntry'(Number => null, Id => 4); declare OldHead2 : constant RefDefUseEntry := OldHead; begin if OldHead1 /= OldHead2 then Text_IO.Put_Line (" OldHead changed !!!"); end if; end; end; begin test_routine (R_Node); end;