62 lines
1.7 KiB
Ada
62 lines
1.7 KiB
Ada
-- { 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;
|