| -- { dg-do run } |
| -- { dg-options "-gnat12" } |
| |
| procedure In_Out_Parameter3 is |
| |
| type Arr is array (1..16) of Integer; |
| |
| type Rec1 is record |
| A : Arr; |
| B : Boolean; |
| end record; |
| |
| type Rec2 is record |
| R : Rec1; |
| end record; |
| pragma Pack (Rec2); |
| |
| function F (I : In Out Rec1) return Boolean is |
| A : Integer := I.A (1); |
| begin |
| I.A (1) := I.A (1) + 1; |
| return (A > 0); |
| end; |
| |
| I : Rec2 := (R => (A => (others => 0), B => True)); |
| B : Boolean; |
| |
| begin |
| B := F (I.R); |
| if B then |
| raise Program_Error; |
| end if; |
| if I.R.A (1) /= 1 then |
| raise Program_Error; |
| end if; |
| if F (I.R) = False then |
| raise Program_Error; |
| end if; |
| if I.R.A (1) /= 2 then |
| raise Program_Error; |
| end if; |
| end; |