diff options
Diffstat (limited to 'dev-ada')
| -rw-r--r-- | dev-ada/gnatmem/gnatmem-2021-r6.ebuild (renamed from dev-ada/gnatmem/gnatmem-2021-r5.ebuild) | 12 | ||||
| -rw-r--r-- | dev-ada/gpr/files/gpr-25.0.0-gcc16.patch | 374 | ||||
| -rw-r--r-- | dev-ada/gpr/gpr-25.0.0-r3.ebuild | 4 |
3 files changed, 385 insertions, 5 deletions
diff --git a/dev-ada/gnatmem/gnatmem-2021-r5.ebuild b/dev-ada/gnatmem/gnatmem-2021-r6.ebuild index eba8859a738e..e6b98054ed64 100644 --- a/dev-ada/gnatmem/gnatmem-2021-r5.ebuild +++ b/dev-ada/gnatmem/gnatmem-2021-r6.ebuild @@ -3,7 +3,7 @@ EAPI=8 -ADA_COMPAT=( gcc_{12..15} ) +ADA_COMPAT=( gcc_{12..16} ) inherit ada multiprocessing autotools MYP=${P}-${PV}0518-19F7B-src @@ -20,10 +20,14 @@ LICENSE="GPL-3" SLOT="0" KEYWORDS="amd64 ~arm64 x86" -RDEPEND="${ADA_DEPS}" -DEPEND="${RDEPEND} +RDEPEND=" + ${ADA_DEPS} + sys-libs/binutils-libs:= +" +DEPEND=" + ${RDEPEND} dev-ada/gprbuild[${ADA_USEDEP}] - sys-libs/binutils-libs:=" +" REQUIRED_USE="${ADA_REQUIRED_USE}" diff --git a/dev-ada/gpr/files/gpr-25.0.0-gcc16.patch b/dev-ada/gpr/files/gpr-25.0.0-gcc16.patch new file mode 100644 index 000000000000..4a2089677bbc --- /dev/null +++ b/dev-ada/gpr/files/gpr-25.0.0-gcc16.patch @@ -0,0 +1,374 @@ +From 43bb629645c3f558bbba5e3cf4b5902dddae3a6a Mon Sep 17 00:00:00 2001 +From: Gary Dismukes <dismukes@adacore.com> +Date: Tue, 21 Oct 2025 00:28:41 +0000 +Subject: [PATCH] Updates to gpr2 sources to accommodate limited predefined + reference types + +Various reference types declared in gpr2 sources must be changed to be +limited types due to their full types having components of reference types +coming from the predefined container packages, which are now declared as +limited types (as required by AI22-0082). Also, the associated reference +functions's bodies are revised to avoid copying limited references within +return statements. + +Note that these changes are being made in advance of merging the changes +to the reference types in the predefined container generics in the GNAT +library, but are believed to be compatible with the nonlimited reference +types in the current library. + +Issue: eng/toolchain/gnat#1098 +--- + src/build/gpr2-build-tree_db.adb | 24 ++++++++++++++++++++---- + src/build/gpr2-build-tree_db.ads | 20 +++++++++++--------- + src/build/gpr2-build-unit_info-list.adb | 5 +++-- + src/build/gpr2-build-unit_info-list.ads | 5 +++-- + src/lib/gpr2-log.adb | 4 ++-- + src/lib/gpr2-log.ads | 9 +++++---- + src/lib/gpr2-project-attribute-set.adb | 6 ++++-- + src/lib/gpr2-project-attribute-set.ads | 12 +++++++----- + src/lib/gpr2-project-import-set.adb | 3 ++- + src/lib/gpr2-project-import-set.ads | 6 ++++-- + 10 files changed, 61 insertions(+), 33 deletions(-) + +diff --git a/src/build/gpr2-build-tree_db.adb b/src/build/gpr2-build-tree_db.adb +index 2cb71c052..dca5fa4b7 100644 +--- a/src/build/gpr2-build-tree_db.adb ++++ b/src/build/gpr2-build-tree_db.adb +@@ -101,7 +101,8 @@ package body GPR2.Build.Tree_Db is + is + Ref : constant Action_Maps.Reference_Type := Self.Actions.Reference (Id); + begin +- return (Element => Ref.Element.all'Unchecked_Access, Ref => Ref); ++ return (Element => Ref.Element.all'Unchecked_Access, ++ Ref => Self.Actions.Reference (Id)); + end Action_Id_To_Reference; + + ---------------------- +@@ -115,7 +116,8 @@ package body GPR2.Build.Tree_Db is + Ref : constant Action_Maps.Reference_Type := + Iterator.Db.Actions.Reference (Pos.Pos); + begin +- return (Element => Ref.Element.all'Unchecked_Access, Ref => Ref); ++ return (Element => Ref.Element.all'Unchecked_Access, ++ Ref => Iterator.Db.Actions.Reference (Pos.Pos)); + end Action_Reference; + + ---------------- +@@ -354,7 +356,8 @@ package body GPR2.Build.Tree_Db is + Ref : constant Action_Maps.Constant_Reference_Type := + Iterator.Db.Actions.Constant_Reference (Pos.Pos); + begin +- return (Element => Ref.Element.all'Unchecked_Access, Ref => Ref); ++ return (Element => Ref.Element.all'Unchecked_Access, ++ Ref => Iterator.Db.Actions.Constant_Reference (Pos.Pos)); + end Constant_Action_Reference; + + --------------------------------- +@@ -379,7 +382,20 @@ package body GPR2.Build.Tree_Db is + when others => + raise Internal_Error with "Wrong kind of cursor"); + begin +- return (Element => Ref.Element.all'Unchecked_Access, Ref => Ref); ++ return (Element => Ref.Element.all'Unchecked_Access, ++ Ref => ++ (case Pos.Current is ++ when Implicit_Inputs => ++ Iterator.Db.Implicit_Inputs.Constant_Reference ++ (Pos.Map_Pos).Constant_Reference (Pos.Pos), ++ when Explicit_Inputs => ++ Iterator.Db.Inputs.Constant_Reference ++ (Pos.Map_Pos).Constant_Reference (Pos.Pos), ++ when Outputs => ++ Iterator.Db.Outputs.Constant_Reference ++ (Pos.Map_Pos).Constant_Reference (Pos.Pos), ++ when others => ++ raise Program_Error with "Wrong kind of cursor")); + end Constant_Artifact_Reference; + + ------------ +diff --git a/src/build/gpr2-build-tree_db.ads b/src/build/gpr2-build-tree_db.ads +index 00a5da22a..3e9fe6dcb 100644 +--- a/src/build/gpr2-build-tree_db.ads ++++ b/src/build/gpr2-build-tree_db.ads +@@ -171,8 +171,9 @@ package GPR2.Build.Tree_Db is + (List : Artifacts_List) return Artifact_Iterators.Forward_Iterator'Class; + + type Constant_Artifact_Reference_Type +- (Element : not null access constant Artifacts.Object'Class) is private +- with Implicit_Dereference => Element; ++ (Element : not null access constant Artifacts.Object'Class) is ++ limited private ++ with Implicit_Dereference => Element; + + function Constant_Artifact_Reference + (Iterator : aliased Artifacts_List; +@@ -204,8 +205,8 @@ package GPR2.Build.Tree_Db is + (List : Actions_List) return Action_Iterators.Forward_Iterator'Class; + + type Action_Reference_Type +- (Element : not null access Actions.Object'Class) is private +- with Implicit_Dereference => Element; ++ (Element : not null access Actions.Object'Class) is limited private ++ with Implicit_Dereference => Element; + + function Action_Id_To_Reference + (Self : in out Object; +@@ -217,8 +218,9 @@ package GPR2.Build.Tree_Db is + Pos : Action_Cursor) return Action_Reference_Type; + + type Constant_Action_Reference_Type +- (Element : not null access constant Actions.Object'Class) is private +- with Implicit_Dereference => Element; ++ (Element : not null access constant Actions.Object'Class) is ++ limited private ++ with Implicit_Dereference => Element; + + function Constant_Action_Reference + (Iterator : aliased Actions_List; +@@ -452,7 +454,7 @@ private + + type Constant_Artifact_Reference_Type + (Element : not null access constant Artifacts.Object'Class) +- is record ++ is limited record + Ref : Artifact_Sets.Constant_Reference_Type (Element); + end record; + +@@ -477,13 +479,13 @@ private + + type Action_Reference_Type + (Element : not null access Actions.Object'Class) +- is record ++ is limited record + Ref : Action_Maps.Reference_Type (Element); + end record; + + type Constant_Action_Reference_Type + (Element : not null access constant Actions.Object'Class) +- is record ++ is limited record + Ref : Action_Maps.Constant_Reference_Type (Element); + end record; + +diff --git a/src/build/gpr2-build-unit_info-list.adb b/src/build/gpr2-build-unit_info-list.adb +index 69213b9bb..549523efa 100644 +--- a/src/build/gpr2-build-unit_info-list.adb ++++ b/src/build/gpr2-build-unit_info-list.adb +@@ -29,7 +29,8 @@ package body GPR2.Build.Unit_Info.List is + Self.Units.Constant_Reference (Unit_Map.Cursor (Position)); + begin + return (Element => Ref.Element.all'Unchecked_Access, +- Ref => Ref); ++ Ref => Self.Units.Constant_Reference ++ (Unit_Map.Cursor (Position))); + end Constant_Reference; + + function Constant_Reference +@@ -140,7 +141,7 @@ package body GPR2.Build.Unit_Info.List is + Self.Units.Reference (Unit_Map.Cursor (Position)); + begin + return (Element => Ref.Element.all'Unchecked_Access, +- Ref => Ref); ++ Ref => Self.Units.Reference (Unit_Map.Cursor (Position))); + end Reference; + + end GPR2.Build.Unit_Info.List; +diff --git a/src/build/gpr2-build-unit_info-list.ads b/src/build/gpr2-build-unit_info-list.ads +index 210ad9dc5..8d0bc027a 100644 +--- a/src/build/gpr2-build-unit_info-list.ads ++++ b/src/build/gpr2-build-unit_info-list.ads +@@ -56,7 +56,8 @@ package GPR2.Build.Unit_Info.List is + Index : Unit_Index) return Unit_Info.Object; + -- Get a single unit + +- type Reference_Type (Element : not null access Unit_Info.Object) is private ++ type Reference_Type ++ (Element : not null access Unit_Info.Object) is limited private + with Implicit_Dereference => Element; + + function Reference +@@ -64,7 +65,7 @@ package GPR2.Build.Unit_Info.List is + Position : Cursor) return Reference_Type; + + type Constant_Reference_Type +- (Element : not null access constant Unit_Info.Object) is private ++ (Element : not null access constant Unit_Info.Object) is limited private + with Implicit_Dereference => Element; + + function Constant_Reference +diff --git a/src/lib/gpr2-log.adb b/src/lib/gpr2-log.adb +index 9711f6048..e66eafef6 100644 +--- a/src/lib/gpr2-log.adb ++++ b/src/lib/gpr2-log.adb +@@ -93,7 +93,7 @@ package body GPR2.Log is + begin + return Constant_Reference_Type' + (Message => Ref.Element.all'Unrestricted_Access, +- Ref => Ref); ++ Ref => Message_Set.Constant_Reference (Self.Store, Position.P)); + end Constant_Reference; + + ----------- +@@ -256,7 +256,7 @@ package body GPR2.Log is + begin + return Reference_Type' + (Message => Ref.Element.all'Unrestricted_Access, +- Ref => Ref); ++ Ref => Message_Set.Reference (Self.Store, Position.P)); + end Reference; + + -------------- +diff --git a/src/lib/gpr2-log.ads b/src/lib/gpr2-log.ads +index e4616aa55..63bed5c54 100644 +--- a/src/lib/gpr2-log.ads ++++ b/src/lib/gpr2-log.ads +@@ -82,7 +82,8 @@ package GPR2.Log is + package Log_Iterator is new Ada.Iterator_Interfaces (Cursor, Has_Element); + + type Constant_Reference_Type +- (Message : not null access constant GPR2.Message.Object) is private ++ (Message : not null access constant GPR2.Message.Object) ++ is limited private + with Implicit_Dereference => Message; + + function Constant_Reference +@@ -90,7 +91,7 @@ package GPR2.Log is + Position : Cursor) return Constant_Reference_Type; + + type Reference_Type +- (Message : not null access GPR2.Message.Object) is private ++ (Message : not null access GPR2.Message.Object) is limited private + with Implicit_Dereference => Message; + + function Reference +@@ -130,7 +131,7 @@ private + end record; + + type Constant_Reference_Type +- (Message : not null access constant GPR2.Message.Object) is record ++ (Message : not null access constant GPR2.Message.Object) is limited record + -- We need to keep the underlying reference so that it is not cleared + -- upon return of the getter, and so that the container has the proper + -- busy state +@@ -138,7 +139,7 @@ private + end record; + + type Reference_Type +- (Message : not null access GPR2.Message.Object) is record ++ (Message : not null access GPR2.Message.Object) is limited record + -- We need to keep the underlying reference so that it is not cleared + -- upon return of the getter, and so that the container has the proper + -- busy state +diff --git a/src/lib/gpr2-project-attribute-set.adb b/src/lib/gpr2-project-attribute-set.adb +index ca316eb4c..26b4b16bf 100644 +--- a/src/lib/gpr2-project-attribute-set.adb ++++ b/src/lib/gpr2-project-attribute-set.adb +@@ -49,7 +49,8 @@ package body GPR2.Project.Attribute.Set is + begin + return Constant_Reference_Type' + (Attribute => Ref.Element.all'Unrestricted_Access, +- Ref => Ref); ++ Ref => Self.Attributes.Constant_Reference ++ (Position.CM).Constant_Reference (Position.CA)); + end Constant_Reference; + + -------------- +@@ -419,7 +420,8 @@ package body GPR2.Project.Attribute.Set is + begin + return Reference_Type' + (Attribute => Ref.Element.all'Unrestricted_Access, +- Ref => Ref); ++ Ref => Self.Attributes.Reference (Position.CM).Reference ++ (Position.CA)); + end Reference; + + end GPR2.Project.Attribute.Set; +diff --git a/src/lib/gpr2-project-attribute-set.ads b/src/lib/gpr2-project-attribute-set.ads +index bc22704db..28c5186df 100644 +--- a/src/lib/gpr2-project-attribute-set.ads ++++ b/src/lib/gpr2-project-attribute-set.ads +@@ -92,12 +92,14 @@ package GPR2.Project.Attribute.Set is + new Ada.Iterator_Interfaces (Cursor, Has_Element); + + type Constant_Reference_Type +- (Attribute : not null access constant Project.Attribute.Object) is private ++ (Attribute : not null access constant Project.Attribute.Object) ++ is limited private + with Implicit_Dereference => Attribute; + + type Reference_Type +- (Attribute : not null access Project.Attribute.Object) is private +- with Implicit_Dereference => Attribute; ++ (Attribute : not null access Project.Attribute.Object) ++ is limited private ++ with Implicit_Dereference => Attribute; + + function Constant_Reference + (Self : aliased Object; +@@ -160,7 +162,7 @@ private + + type Constant_Reference_Type + (Attribute : not null access constant Project.Attribute.Object) +- is record ++ is limited record + -- We need to keep the underlying reference so that it is not cleared + -- upon return of the getter, and so that the container has the proper + -- busy state +@@ -169,7 +171,7 @@ private + + type Reference_Type + (Attribute : not null access Project.Attribute.Object) +- is record ++ is limited record + -- We need to keep the underlying reference so that it is not cleared + -- upon return of the getter, and so that the container has the proper + -- busy state +diff --git a/src/lib/gpr2-project-import-set.adb b/src/lib/gpr2-project-import-set.adb +index 55748c2b3..dc76b24c7 100644 +--- a/src/lib/gpr2-project-import-set.adb ++++ b/src/lib/gpr2-project-import-set.adb +@@ -38,7 +38,8 @@ package body GPR2.Project.Import.Set is + begin + return Constant_Reference_Type' + (Import => Ref.Element.all'Unrestricted_Access, +- Ref => Ref); ++ Ref => Base_Name_Set.Constant_Reference ++ (Self.Set, Position.Current)); + end Constant_Reference; + + -------------- +diff --git a/src/lib/gpr2-project-import-set.ads b/src/lib/gpr2-project-import-set.ads +index 67dae8e03..978f74686 100644 +--- a/src/lib/gpr2-project-import-set.ads ++++ b/src/lib/gpr2-project-import-set.ads +@@ -66,7 +66,8 @@ package GPR2.Project.Import.Set is + new Ada.Iterator_Interfaces (Cursor, Has_Element); + + type Constant_Reference_Type +- (Import : not null access constant Project.Import.Object) is private ++ (Import : not null access constant Project.Import.Object) ++ is limited private + with Implicit_Dereference => Import; + + function Constant_Reference +@@ -93,7 +94,8 @@ private + Cursor'(Current => Base_Name_Set.No_Element); + + type Constant_Reference_Type +- (Import : not null access constant Project.Import.Object) is record ++ (Import : not null access constant Project.Import.Object) ++ is limited record + -- We need to keep the underlying reference so that it is not cleared + -- upon return of the getter, and so that the container has the proper + -- busy state +--- a/src/build/gpr2-build-signature.adb 2025-12-06 22:06:07.534198947 +0100 ++++ b/src/build/gpr2-build-signature.adb 2025-12-06 22:06:22.392020509 +0100 +@@ -75,8 +75,6 @@ + end loop; + end; + +- JSON_Result.Value.Finalize; +- + return Signature; + + exception diff --git a/dev-ada/gpr/gpr-25.0.0-r3.ebuild b/dev-ada/gpr/gpr-25.0.0-r3.ebuild index 642cc59f4b5e..2adbf723fc5b 100644 --- a/dev-ada/gpr/gpr-25.0.0-r3.ebuild +++ b/dev-ada/gpr/gpr-25.0.0-r3.ebuild @@ -3,7 +3,7 @@ EAPI=8 -ADA_COMPAT=( gcc_{14..15} ) +ADA_COMPAT=( gcc_{14..16} ) PYTHON_COMPAT=( python3_{10..13} ) inherit ada python-any-r1 multiprocessing @@ -38,6 +38,8 @@ BDEPEND="test? ( dev-ada/gnatmem )" +PATCHES=( "${FILESDIR}"/${P}-gcc16.patch ) + python_check_deps() { use test || return 0 python_has_version "dev-ada/e3-testsuite[${PYTHON_USEDEP}]" |
