From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7871) id 31D813858C53; Tue, 8 Nov 2022 08:40:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 31D813858C53 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1667896844; bh=CFjBdJVqLD5Nyc4OFKit1XlDzj4G23EGgW8MRecf4E8=; h=From:To:Subject:Date:From; b=KN+C9LV6J5WDqpq7sKUvy055p3LJwvTCgjqos1QkWOtMFY2UabMicTJVAtPOlqcuK UPOOniytldaLhCH59WBG8FoxsWxP1KmGeOHCOj/d5ONpPf8WozbXWOA/bZ+FZv40BU Qvg8C6So+YHd2JVqcphDXSn0oRCCNSUVLJcbVCRg= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Marc Poulhi?s To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-3780] ada: Reject limited objects in array and record delta aggregates X-Act-Checkin: gcc X-Git-Author: Piotr Trojanek X-Git-Refname: refs/heads/master X-Git-Oldrev: 2ff87e21c2053fe3a48ced3e2cc9ab1b900aceaa X-Git-Newrev: 79e02673e97d1a359ca1fc2dc3f6d51d0debe7d8 Message-Id: <20221108084044.31D813858C53@sourceware.org> Date: Tue, 8 Nov 2022 08:40:44 +0000 (GMT) List-Id: https://gcc.gnu.org/g:79e02673e97d1a359ca1fc2dc3f6d51d0debe7d8 commit r13-3780-g79e02673e97d1a359ca1fc2dc3f6d51d0debe7d8 Author: Piotr Trojanek Date: Thu Oct 14 23:31:21 2021 +0200 ada: Reject limited objects in array and record delta aggregates For array delta aggregates the base expression cannot be limited; for record delta aggregates the base expression can only be limited if it is a newly constructed object. gcc/ada/ * sem_aggr.adb (Resolve_Delta_Aggregate): Implement rules related to limited objects appearing as the base expression. Diff: --- gcc/ada/sem_aggr.adb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 383f18f7301..4da05dd7317 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -3421,6 +3421,18 @@ package body Sem_Aggr is Analyze_And_Resolve (Base, Typ); if Is_Array_Type (Typ) then + -- For an array_delta_aggregate, the base_expression and each + -- expression in every array_component_association shall be of a + -- nonlimited type; RM 4.3.4(13/5). However, to prevent repeated + -- errors we only check the base expression and not array component + -- associations. + + if Is_Limited_Type (Etype (Base)) then + Error_Msg_N + ("array delta aggregate shall be of a nonlimited type", Base); + Explain_Limited_Type (Etype (Base), Base); + end if; + Resolve_Delta_Array_Aggregate (N, Typ); else @@ -3432,6 +3444,11 @@ package body Sem_Aggr is ("delta aggregates for record types must use (), not '[']", N); end if; + -- The base_expression of a record_delta_aggregate can be of a + -- limited type only if it is newly constructed; RM 7.5(2.1/5). + + Check_Expr_OK_In_Limited_Aggregate (Base); + Resolve_Delta_Record_Aggregate (N, Typ); end if;