| -- { dg-options "-gnat2020" } |

| F1, F2, F3 : Integer := 0; |

| function Make (X : Integer) return T1 is |

| type T2 is new T1 with private; |

| function Make (X : Integer) return T2; |

| X : constant T2 := (0, 0, 0, 0); |

| Y : constant T2 := (1, 2, 0, 0); |

| function Make (X : Integer) return T2 is |

| return (X, X ** 2, X ** 3, X ** 4); |

| Z : T2 := (Y with delta F1 => 111); |

| -- a legal delta aggregate whose type is a private extension |

| pragma Assert (Y = (X with delta F1 => 1, F2 => 2)); |

| pragma assert (Y.F2 = X.F1); |

| Z := (X with delta F1 => 1); |

| -- The base of the delta aggregate can be overloaded, in which case |

| -- the candidate interpretations for the aggregate are those of the |

| -- base, to be resolved from context. |

| Z := (Make (2) with delta F1 => 1); |