| -- { dg-do run } |
| -- { dg-options "-gnatws" } |
| |
| procedure Tfren is |
| type R; |
| type Ar is access all R; |
| type R is record F1: Integer; F2: Ar; end record; |
| |
| for R use record |
| F1 at 1 range 0..31; |
| F2 at 5 range 0..63; |
| end record; |
| |
| procedure Foo (RR1, RR2: Ar); |
| |
| procedure Foo (RR1, RR2 : Ar) is |
| begin |
| if RR2.all.F1 /= 55 then raise program_error; end if; |
| end; |
| |
| R3: aliased R := (55, Null); |
| R2: aliased R := (44, R3'Access); |
| R1: aliased R := (22, R2'Access); |
| P: Ar := R1'Access; |
| |
| X: Ar renames P.all.F2; |
| Y: Ar renames X.all.F2; |
| |
| begin |
| P := R2'Access; |
| R1.F2 := R1'Access; |
| Foo (X, Y); |
| Y.F1 := -111; |
| if Y.F1 /= -111 then raise Constraint_Error; end if; |
| end Tfren; |