From patchwork Tue May 7 08:00:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Marc_Poulhi=C3=A8s?= X-Patchwork-Id: 1932293 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=adacore.com header.i=@adacore.com header.a=rsa-sha256 header.s=google header.b=HFrimdKH; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VYWG60Wn3z1xnS for ; Tue, 7 May 2024 18:11:58 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 494A13849AF4 for ; Tue, 7 May 2024 08:11:56 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by sourceware.org (Postfix) with ESMTPS id 74935384AB69 for ; Tue, 7 May 2024 08:00:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 74935384AB69 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 74935384AB69 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::330 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715068822; cv=none; b=AMkaDbuwm+1w57LHjbJZUcQ4pU0drYgRvlyXVWnVDRBXsEpD2piUQRQoC7eKecM04Hcgup8gWEN9yvULcc5I4eZWwdVsaza+jaeJdjBfbsiWbLnA7XCbG8oGhgk00eCOtUY73jCrDunQTXvF58mOhlFRtTmfAfkXNCHZ2bYeC0I= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715068822; c=relaxed/simple; bh=nuBX1FgSm0zMCh0DghupGafKGgoPKMNuz4kgRj8gWiU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=iy/F+DWckDEQ2KpXhhwrMHxU+ercHWFnzeSmvPmP1IxZbhTRiK5bhIB1255GEk/b4utXpto+nO5+YDkKNbnjqT6shtNPQ4/KsPRmG+zC0jkOEWnShEPtCOu+p3OTl836nGdpTxxQo6B8oaMkV2wNVbohGd0JXhQvektWm/W0TyU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-41e82b78387so20055135e9.0 for ; Tue, 07 May 2024 01:00:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1715068811; x=1715673611; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=DzdMpJNc7rdzKxkhrp43ikExm5fNZ4J4nxFQCbUCvzA=; b=HFrimdKHmoSCiR/WNaxePihqVnDHIb31bs7u+YpM1VHNJqwxohA8OizBXq+3/NuRYx 0SKQ8a1ys4gHamlPTRbKxbdt2yF10i/OrG9/ApaJ69Bha9LHio2qEHL/ezJ3Z25vVMpS dcWHejnx5oeOH/0dP+4Uhd/BVQ8oZH3xDhM++m1c+4xHlXlFHnI9OgHVDyL7HHFxSo5b LCZuOL35sXr4o4RuFGuxhVn3vkAlmcuMhVm8tTm0TjskM/CVYejQv9/hPUkQpPb3jPhr 1i8Y1SzMAxhcS/Li2q7TTo5UczLTZUvpj3U8GN744a+7/chrgkPSKjy13Rp3FlK7f4Nx PQng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715068811; x=1715673611; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=DzdMpJNc7rdzKxkhrp43ikExm5fNZ4J4nxFQCbUCvzA=; b=c7r7Ib2gvqptLIkQYJ9oon/yHiYgNtczu6BVdvQR0f0Es+1PMHkV83BXLuZuDGSpEf 2a7r1dFCNRboY/8MjdXl2SVpij3feB5gkzdsP3BqeLLxMtmeOwCuzZjNYmHy/+T63zek pQwf6D9JAneShNRD/DM35ADjg2eBt7vf96q26AUJ5gklKXUylYarpyWY00W83EMP/9h/ pFv9N2XF0fQpdVGFlJOeGBgBkTH090cj55flqLmjRYlkMWhmCd89xnEWsACYqfufbZz+ 4L/QkGmVhx70qrc5UKj49hNKhU2vX7huV1dm4gPKBdDQPk+OGz/KIYPJ7vkkd2bzqtay qK4w== X-Gm-Message-State: AOJu0YxjyDN7/+45RB2pu9jtPAeW0U+QNKU2Fbb2xZMdExlCXPHGoiji 3JYHkj2/9Cyr0LN4ORbL3BvQOcpeVrIcNwx1QZw5XowHZGCS/QaNij0KCLlrCJBw48mEtq72fM8 = X-Google-Smtp-Source: AGHT+IGXydt43b+qtWioIgy9vkEZIu1ubV31758NnKdl5QPppZGBdpD3SEOC1IUoO6gWoQGFHbBHOQ== X-Received: by 2002:a05:600c:3ca1:b0:41c:290e:7e6b with SMTP id bg33-20020a05600c3ca100b0041c290e7e6bmr8894681wmb.13.1715068811156; Tue, 07 May 2024 01:00:11 -0700 (PDT) Received: from localhost.localdomain ([2001:861:3382:1a90:11a6:1c9d:5099:b1e8]) by smtp.gmail.com with ESMTPSA id n12-20020a5d588c000000b0034cfb79220asm12442434wrf.116.2024.05.07.01.00.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 May 2024 01:00:10 -0700 (PDT) From: =?utf-8?q?Marc_Poulhi=C3=A8s?= To: gcc-patches@gcc.gnu.org Cc: Bob Duff Subject: [COMMITTED] ada: Aspects on multiple component declarations Date: Tue, 7 May 2024 10:00:09 +0200 Message-ID: <20240507080009.37052-1-poulhies@adacore.com> X-Mailer: git-send-email 2.43.2 MIME-Version: 1.0 X-Spam-Status: No, score=-13.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org From: Bob Duff This patch fixes a bug where aspect specifications were ignored on all but the last of multiple component declarations. For example, in a record type with components "X, Y: T with Volatile;" only Y was marked Volatile; X was not. Both should be marked Volatile. The fix is in Par.Ch3.P_Component_Items, where P_Aspect_Specifications needs to be called each time through the loop. In addition, various minor cleanups. gcc/ada/ * par-ch3.adb (P_Component_Items): Move P_Aspect_Specifications into the loop, so aspects can be attached to multiple component declarations. (P_Type_Declaration, P_Subtype_Declaration) (P_Known_Discriminant_Part_Opt): Remove default for Semicolon in calls to P_Aspect_Specifications. * gen_il-gen-gen_nodes.adb (N_Discriminant_Specification): Add Aspect_Specifications field to N_Discriminant_Specification, which was missing. * aspects.adb (Has_Aspect_Specifications_Flag): Make it True for N_Discriminant_Specification. * par-ch13.adb: Remove default for Semicolon in calls to P_Aspect_Specifications. (Get_Aspect_Specifications): Misc cleanup. (P_Aspect_Specifications): Remove comment. It's not clear what "the flag" is referring to, but anyway the first part of the comment is obvious, and the second part is apparently obsolete. Misc cleanup. * par.adb (P_Aspect_Specifications, Get_Aspect_Specifications): Remove default for Semicolon; calls are more readable that way. Improve comments. * par-ch12.adb: Remove default for Semicolon in calls to P_Aspect_Specifications. * par-ch6.adb: Likewise. * par-ch7.adb: Likewise. * par-ch9.adb: Likewise. * par-endh.adb: Likewise. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/aspects.adb | 3 ++- gcc/ada/gen_il-gen-gen_nodes.adb | 1 + gcc/ada/par-ch12.adb | 12 ++++++------ gcc/ada/par-ch13.adb | 30 +++++++----------------------- gcc/ada/par-ch3.adb | 12 ++++++------ gcc/ada/par-ch6.adb | 12 ++++++------ gcc/ada/par-ch7.adb | 2 +- gcc/ada/par-ch9.adb | 4 ++-- gcc/ada/par-endh.adb | 6 +++--- gcc/ada/par.adb | 22 +++++++++++----------- 10 files changed, 45 insertions(+), 59 deletions(-) diff --git a/gcc/ada/aspects.adb b/gcc/ada/aspects.adb index 0d4988ac540..696ee672acd 100644 --- a/gcc/ada/aspects.adb +++ b/gcc/ada/aspects.adb @@ -450,6 +450,7 @@ package body Aspects is Has_Aspect_Specifications_Flag : constant array (Node_Kind) of Boolean := (N_Abstract_Subprogram_Declaration => True, N_Component_Declaration => True, + N_Discriminant_Specification => True, N_Entry_Body => True, N_Entry_Declaration => True, N_Exception_Declaration => True, @@ -471,8 +472,8 @@ package body Aspects is N_Package_Body_Stub => True, N_Package_Declaration => True, N_Package_Instantiation => True, - N_Package_Specification => True, N_Package_Renaming_Declaration => True, + N_Package_Specification => True, N_Parameter_Specification => True, N_Private_Extension_Declaration => True, N_Private_Type_Declaration => True, diff --git a/gcc/ada/gen_il-gen-gen_nodes.adb b/gcc/ada/gen_il-gen-gen_nodes.adb index d7cc39bc048..fb00993a95e 100644 --- a/gcc/ada/gen_il-gen-gen_nodes.adb +++ b/gcc/ada/gen_il-gen-gen_nodes.adb @@ -1375,6 +1375,7 @@ begin -- Gen_IL.Gen.Gen_Nodes Sy (Null_Exclusion_Present, Flag, Default_False), Sy (Discriminant_Type, Node_Id), Sy (Expression, Node_Id, Default_Empty), + Sy (Aspect_Specifications, List_Id, Default_No_List), Sm (More_Ids, Flag), Sm (Prev_Ids, Flag))); diff --git a/gcc/ada/par-ch12.adb b/gcc/ada/par-ch12.adb index 8eb06b682bf..56ab07c0cb3 100644 --- a/gcc/ada/par-ch12.adb +++ b/gcc/ada/par-ch12.adb @@ -223,7 +223,7 @@ package body Ch12 is Error_Msg_SP ("child unit allowed only at library level"); end if; - P_Aspect_Specifications (Gen_Decl); + P_Aspect_Specifications (Gen_Decl, Semicolon => True); end if; Set_Generic_Formal_Declarations (Gen_Decl, Decls); @@ -482,7 +482,7 @@ package body Ch12 is No_Constraint; Set_Default_Expression (Decl_Node, Init_Expr_Opt); - P_Aspect_Specifications (Decl_Node); + P_Aspect_Specifications (Decl_Node, Semicolon => True); if Ident > 1 then Set_Prev_Ids (Decl_Node, True); @@ -570,7 +570,7 @@ package body Ch12 is end if; end if; - P_Aspect_Specifications (Decl_Node); + P_Aspect_Specifications (Decl_Node, Semicolon => True); else Decl_Node := Error; @@ -578,7 +578,7 @@ package body Ch12 is -- If we have aspect specifications, skip them if Aspect_Specifications_Present then - P_Aspect_Specifications (Error); + P_Aspect_Specifications (Error, Semicolon => True); -- If we have semicolon, skip it to avoid cascaded errors @@ -1250,7 +1250,7 @@ package body Ch12 is Set_Specification (Def_Node, Spec_Node); end if; - P_Aspect_Specifications (Def_Node); + P_Aspect_Specifications (Def_Node, Semicolon => True); return Def_Node; end P_Formal_Subprogram_Declaration; @@ -1317,7 +1317,7 @@ package body Ch12 is end if; end if; - P_Aspect_Specifications (Def_Node); + P_Aspect_Specifications (Def_Node, Semicolon => True); return Def_Node; end P_Formal_Package_Declaration; diff --git a/gcc/ada/par-ch13.adb b/gcc/ada/par-ch13.adb index 9232dc6b51a..f8488fd13c8 100644 --- a/gcc/ada/par-ch13.adb +++ b/gcc/ada/par-ch13.adb @@ -194,20 +194,16 @@ package body Ch13 is -- Get_Aspect_Specifications -- ------------------------------- - function Get_Aspect_Specifications - (Semicolon : Boolean := True) return List_Id - is + function Get_Aspect_Specifications (Semicolon : Boolean) return List_Id is A_Id : Aspect_Id; Aspect : Node_Id; - Aspects : List_Id; + Aspects : List_Id := Empty_List; OK : Boolean; Opt : Boolean; -- True if current aspect takes an optional argument begin - Aspects := Empty_List; - -- Check if aspect specification present if not Aspect_Specifications_Present then @@ -909,25 +905,13 @@ package body Ch13 is procedure P_Aspect_Specifications (Decl : Node_Id; - Semicolon : Boolean := True) + Semicolon : Boolean) is - Aspects : List_Id; - Ptr : Source_Ptr; + Ptr : constant Source_Ptr := Token_Ptr; + Aspects : constant List_Id := Get_Aspect_Specifications (Semicolon); begin - -- Aspect Specification is present - - Ptr := Token_Ptr; - - -- Here we have an aspect specification to scan, note that we don't - -- set the flag till later, because it may turn out that we have no - -- valid aspects in the list. - - Aspects := Get_Aspect_Specifications (Semicolon); - - -- Here if aspects present - - if Is_Non_Empty_List (Aspects) then + if Is_Non_Empty_List (Aspects) then -- Aspects present? -- If Decl is Empty, we just ignore the aspects (the caller in this -- case has always issued an appropriate error message). @@ -935,7 +919,7 @@ package body Ch13 is if Decl = Empty then null; - -- If Decl is Error, we ignore the aspects, and issue a message + -- Cases where we issue an error elsif Decl = Error or else not Permits_Aspect_Specifications (Decl) diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb index 7c222a27ab1..01dd45c4f23 100644 --- a/gcc/ada/par-ch3.adb +++ b/gcc/ada/par-ch3.adb @@ -881,7 +881,7 @@ package body Ch3 is Set_Defining_Identifier (Decl_Node, Ident_Node); Set_Discriminant_Specifications (Decl_Node, Discr_List); - P_Aspect_Specifications (Decl_Node); + P_Aspect_Specifications (Decl_Node, Semicolon => True); return Decl_Node; end P_Type_Declaration; @@ -930,7 +930,7 @@ package body Ch3 is Set_Subtype_Indication (Decl_Node, P_Subtype_Indication (Not_Null_Present)); - P_Aspect_Specifications (Decl_Node); + P_Aspect_Specifications (Decl_Node, Semicolon => True); return Decl_Node; end P_Subtype_Declaration; @@ -3270,7 +3270,8 @@ package body Ch3 is (Specification_Node, Init_Expr_Opt (True)); if Token = Tok_With then - P_Aspect_Specifications (Specification_Node, False); + P_Aspect_Specifications + (Specification_Node, Semicolon => False); end if; if Ident > 1 then @@ -3873,8 +3874,9 @@ package body Ch3 is Set_More_Ids (Decl_Node, True); end if; - Append (Decl_Node, Decls); + P_Aspect_Specifications (Decl_Node, Semicolon => True); + Append (Decl_Node, Decls); exception when Error_Resync => if Token /= Tok_End then @@ -3887,8 +3889,6 @@ package body Ch3 is Restore_Scan_State (Scan_State); T_Colon; end loop Ident_Loop; - - P_Aspect_Specifications (Decl_Node); end P_Component_Items; -------------------------------- diff --git a/gcc/ada/par-ch6.adb b/gcc/ada/par-ch6.adb index 2ce23e1eb05..830e6bec83e 100644 --- a/gcc/ada/par-ch6.adb +++ b/gcc/ada/par-ch6.adb @@ -371,7 +371,7 @@ package body Ch6 is Set_Defining_Unit_Name (Inst_Node, Name_Node); Set_Generic_Associations (Inst_Node, P_Generic_Actual_Part_Opt); - P_Aspect_Specifications (Inst_Node); + P_Aspect_Specifications (Inst_Node, Semicolon => True); Pop_Scope_Stack; -- Don't need scope stack entry in this case if Is_Overriding then @@ -565,7 +565,7 @@ package body Ch6 is Scan; -- past RENAMES Set_Name (Rename_Node, P_Name); Set_Specification (Rename_Node, Specification_Node); - P_Aspect_Specifications (Rename_Node); + P_Aspect_Specifications (Rename_Node, Semicolon => True); TF_Semicolon; Pop_Scope_Stack; return Rename_Node; @@ -595,7 +595,7 @@ package body Ch6 is Set_Specification (Absdec_Node, Specification_Node); Pop_Scope_Stack; -- discard unneeded entry Scan; -- past ABSTRACT - P_Aspect_Specifications (Absdec_Node); + P_Aspect_Specifications (Absdec_Node, Semicolon => True); return Absdec_Node; -- Ada 2005 (AI-248): Parse a null procedure declaration @@ -895,7 +895,7 @@ package body Ch6 is -- Expression functions can carry pre/postconditions - P_Aspect_Specifications (Body_Node); + P_Aspect_Specifications (Body_Node, Semicolon => True); Pop_Scope_Stack; -- Subprogram body case @@ -1624,7 +1624,7 @@ package body Ch6 is Error_Msg_Ada_2022_Feature ("aspect on formal parameter", Token_Ptr); - P_Aspect_Specifications (Specification_Node, False); + P_Aspect_Specifications (Specification_Node, Semicolon => False); -- Set the aspect specifications for previous Ids @@ -1956,7 +1956,7 @@ package body Ch6 is Set_Return_Object_Declarations (Ret_Node, New_List (Decl)); if Token = Tok_With then - P_Aspect_Specifications (Decl, False); + P_Aspect_Specifications (Decl, Semicolon => False); end if; if Token = Tok_Do then diff --git a/gcc/ada/par-ch7.adb b/gcc/ada/par-ch7.adb index 6b64cfb21a9..cd535e56bc2 100644 --- a/gcc/ada/par-ch7.adb +++ b/gcc/ada/par-ch7.adb @@ -237,7 +237,7 @@ package body Ch7 is Move_Aspects (From => Dummy_Node, To => Package_Node); end if; - P_Aspect_Specifications (Package_Node); + P_Aspect_Specifications (Package_Node, Semicolon => True); Pop_Scope_Stack; -- Case of package declaration or package specification diff --git a/gcc/ada/par-ch9.adb b/gcc/ada/par-ch9.adb index 3fb1a76f469..4d07a3a1f1f 100644 --- a/gcc/ada/par-ch9.adb +++ b/gcc/ada/par-ch9.adb @@ -1029,7 +1029,7 @@ package body Ch9 is Discard_Junk_Node (P_Expression_No_Right_Paren); end if; - P_Aspect_Specifications (Decl_Node); + P_Aspect_Specifications (Decl_Node, Semicolon => True); return Decl_Node; exception @@ -1318,7 +1318,7 @@ package body Ch9 is (Iterator_Node, P_Discrete_Subtype_Definition); if Token = Tok_With then - P_Aspect_Specifications (Iterator_Node, False); + P_Aspect_Specifications (Iterator_Node, Semicolon => False); end if; return Iterator_Node; diff --git a/gcc/ada/par-endh.adb b/gcc/ada/par-endh.adb index 2949d6f43b6..0563051894d 100644 --- a/gcc/ada/par-endh.adb +++ b/gcc/ada/par-endh.adb @@ -413,18 +413,18 @@ package body Endh is ("misplaced aspects for package declaration"); Error_Msg ("info: aspect specifications belong here??", Is_Loc); - P_Aspect_Specifications (Empty); + P_Aspect_Specifications (Empty, Semicolon => True); -- Other cases where aspect specifications are not allowed else - P_Aspect_Specifications (Error); + P_Aspect_Specifications (Error, Semicolon => True); end if; -- Aspect specifications allowed else - P_Aspect_Specifications (Decl); + P_Aspect_Specifications (Decl, Semicolon => True); end if; -- If no aspect specifications, must have a semicolon diff --git a/gcc/ada/par.adb b/gcc/ada/par.adb index d9b52c561ce..9d502b23bc6 100644 --- a/gcc/ada/par.adb +++ b/gcc/ada/par.adb @@ -1031,11 +1031,11 @@ function Par (Configuration_Pragmas : Boolean) return List_Id is procedure P_Aspect_Specifications (Decl : Node_Id; - Semicolon : Boolean := True); + Semicolon : Boolean); -- This procedure scans out a series of aspect specifications. If - -- argument Semicolon is True, a terminating semicolon is also scanned. - -- If this argument is False, the scan pointer is left pointing past the - -- aspects and the caller must check for a proper terminator. + -- argument Semicolon is True, a terminating semicolon is also scanned; + -- if False, the scan pointer is left pointing past the aspects and the + -- caller must check for a proper terminator. -- -- P_Aspect_Specifications is called with the current token pointing -- to either a WITH keyword starting an aspect specification, or an @@ -1049,14 +1049,14 @@ function Par (Configuration_Pragmas : Boolean) return List_Id is -- semicolon (with the exception that it detects WHEN used in place of -- WITH). - -- If Decl is Error on entry, any scanned aspect specifications are - -- ignored and a message is output saying aspect specifications not - -- permitted here. If Decl is Empty, then scanned aspect specifications - -- are also ignored, but no error message is given (this is used when - -- the caller has already taken care of the error message). + -- If Decl is Error or a node that does not allow aspect specifications, + -- then any scanned aspect specifications are ignored and a message is + -- output saying aspect specifications not permitted here. If Decl is + -- Empty, then scanned aspect specifications are also ignored, but no + -- error message is given (this is used when the caller has already + -- taken care of the error message). - function Get_Aspect_Specifications - (Semicolon : Boolean := True) return List_Id; + function Get_Aspect_Specifications (Semicolon : Boolean) return List_Id; -- Parse a list of aspects but do not attach them to a declaration node. -- Subsidiary to P_Aspect_Specifications procedure. Used when parsing -- a subprogram specification that may be a declaration or a body.