| -- { dg-do compile } |
| |
| with System; |
| |
| package Discr5 is |
| |
| X, Y : Boolean; |
| |
| type R (D : Boolean := False) is tagged limited record |
| F : Integer; |
| case D is |
| when True => |
| F1, F2 : Integer; |
| when False => |
| null; |
| end case; |
| end record; |
| for R use record |
| F1 at 100 range 0..31; |
| end record; |
| |
| subtype Rt is R(True); |
| subtype Rf is R(False); |
| |
| type R1 (D1 : Boolean) is new R (X) with record |
| FF : Float; |
| case D1 is |
| when True => |
| F3, F4 : Float; |
| when False => |
| null; |
| end case; |
| end record; |
| for R1 use record |
| F4 at 200 range 0..31; |
| end record; |
| |
| subtype R1t is R1 (True); |
| subtype R1f is R1 (False); |
| |
| type R2 (D2 : Boolean) is new R1 (Y) with record |
| FFF: System.Address; |
| case D2 is |
| when True => |
| F5, F6: System.Address; |
| when False => |
| null; |
| end case; |
| end record; |
| for R2 use record |
| F6 at 300 range 0..63; |
| end record; |
| |
| subtype R2t is R2 (True); |
| subtype R2f is R2 (False); |
| |
| end Discr5; |