| -- { dg-do compile } |
| package body Old_Errors is |
| |
| A : Integer; |
| |
| function F |
| (X : Integer := A'Old) -- { dg-error "can only appear within subprogram" } |
| return Integer is |
| begin |
| return X; |
| end F; |
| |
| procedure P (I : in Integer; O : out Integer; IO : in out Integer) is |
| Y : Integer := 0; |
| function G |
| (X : Integer := Y'Old) -- { dg-error "cannot refer to local variable" } |
| return Integer is |
| begin |
| return X; |
| end G; |
| |
| function H (X : Integer := A'Old) return Integer is -- OK |
| begin |
| return X; |
| end H; |
| |
| begin |
| Y := Y'Old; -- { dg-error "cannot refer to local variable" } |
| declare |
| Z : Integer := 0; |
| procedure Inner is |
| IL : Integer := 0; |
| begin |
| IL := IL'Old; -- { dg-error "cannot refer to local variable" } |
| Z := Z'Old; -- OK |
| end Inner; |
| begin |
| Y := Z'Old; -- { dg-error "cannot refer to local variable" } |
| end; |
| Y := I'Old; -- { dg-warning "Old applied to constant has no effect" } |
| Y := O'Old; -- OK |
| Y := IO'Old; -- OK |
| Y := G; -- OK, error has been signalled at G declaration |
| pragma Assert (G (3)'Old = Y); -- { dg-error "cannot refer to local variable" } |
| end P; |
| |
| end Old_Errors; |