Message ID | 20200526144724.13636-2-derodat@adacore.com |
---|---|
State | New |
Headers | show |
Series | [1/2] gcc-changelog: remove file descriptor leaks | expand |
On 5/26/20 4:47 PM, Pierre-Marie de Rodat wrote: > This extends the ChangeLog entries parsing machinery to handle entries > that cover multiple files spanning over multiple lines. For instance: > > * first_file_patched.c, second_file_patched.c, third_file_patched.c, > fourth_file_patched.c: Do things. Hi. That was simpler than I expected ;) I compared results for all 2000 patches since we switched to git and there are no changes! > > contrib/ > > * gcc-changelog/git_commit.py (ChangeLogEntry): Handle entries > with multi-line file lists. > * test_email.py: New testcase. > * test_patches.txt: Likewise. > --- > contrib/gcc-changelog/git_commit.py | 18 ++ > contrib/gcc-changelog/test_email.py | 9 + > contrib/gcc-changelog/test_patches.txt | 290 +++++++++++++++++++++++++ > 3 files changed, 317 insertions(+) > > diff --git a/contrib/gcc-changelog/git_commit.py b/contrib/gcc-changelog/git_commit.py > index 6f99d917b3b..a24a251d8f3 100755 > --- a/contrib/gcc-changelog/git_commit.py > +++ b/contrib/gcc-changelog/git_commit.py > @@ -185,14 +185,32 @@ class ChangeLogEntry: > @property > def files(self): > files = [] > + > + # Whether the content currently processed is between a star prefix the > + # end of the file list: a colon or an open paren. > + in_location = False > + > for line in self.lines: > + # If this line matches the star prefix, start the location > + # processing on the information that follows the star. > m = star_prefix_regex.match(line) > if m: > + in_location = True > line = m.group('content') > + > + if in_location: > + # Strip everything that is not a filename in "line": entities > + # "(NAME)", entry text (the colon, if present, and anything > + # that follows it). > if '(' in line: > line = line[:line.index('(')] > + in_location = False > if ':' in line: > line = line[:line.index(':')] > + in_location = False > + > + # At this point, all that 's left is a list of filenames > + # separated by commas and whitespaces. > for file in line.split(','): > file = file.strip() > if file: > diff --git a/contrib/gcc-changelog/test_email.py b/contrib/gcc-changelog/test_email.py > index 1379502e755..3d2c8ff2412 100755 > --- a/contrib/gcc-changelog/test_email.py > +++ b/contrib/gcc-changelog/test_email.py > @@ -286,3 +286,12 @@ class TestGccChangelog(unittest.TestCase): > email = self.from_patch_glob('0001-Update-merge.sh-to-reflect.patch') > assert (email.changelog_entries[0].lines[0] > == '\t* LOCAL_PATCHES: Use git hash instead of SVN id.') > + > + def test_multiline_file_list(self): > + email = self.from_patch_glob( > + '0001-Ada-Reuse-Is_Package_Or_Generic_Package-where-possib.patch') > + assert (email.changelog_entries[0].files > + == ['contracts.adb', 'einfo.adb', 'exp_ch9.adb', > + 'sem_ch12.adb', 'sem_ch4.adb', 'sem_ch7.adb', > + 'sem_ch8.adb', 'sem_elab.adb', 'sem_type.adb', > + 'sem_util.adb']) > diff --git a/contrib/gcc-changelog/test_patches.txt b/contrib/gcc-changelog/test_patches.txt > index 84d4b81d818..3492fb4dcb8 100644 > --- a/contrib/gcc-changelog/test_patches.txt > +++ b/contrib/gcc-changelog/test_patches.txt > @@ -2650,4 +2650,294 @@ index dfa7bf3d196..3f4f1629a22 100755 > > -- > 2.26.2 > +=== 0001-Ada-Reuse-Is_Package_Or_Generic_Package-where-possib.patch === > +From 557b268fffffdeb0980a17411f458eee333f55c6 Mon Sep 17 00:00:00 2001 > +From: Piotr Trojanek <trojanek@adacore.com> > +Date: Thu, 12 Dec 2019 11:45:24 +0100 > +Subject: [PATCH] [Ada] Reuse Is_Package_Or_Generic_Package where possible > + > +2020-05-26 Piotr Trojanek <trojanek@adacore.com> > + > +gcc/ada/ > + > + * contracts.adb, einfo.adb, exp_ch9.adb, sem_ch12.adb, > + sem_ch4.adb, sem_ch7.adb, sem_ch8.adb, sem_elab.adb, > + sem_type.adb, sem_util.adb: Reuse Is_Package_Or_Generic_Package > + where possible (similarly, reuse Is_Concurrent_Type if it was > + possible in the same expressions). > +--- > + gcc/ada/contracts.adb | 2 +- > + gcc/ada/einfo.adb | 22 +++++++++++----------- > + gcc/ada/exp_ch9.adb | 2 +- > + gcc/ada/sem_ch12.adb | 2 +- > + gcc/ada/sem_ch4.adb | 2 +- > + gcc/ada/sem_ch7.adb | 6 +++--- > + gcc/ada/sem_ch8.adb | 6 +++--- > + gcc/ada/sem_elab.adb | 2 +- > + gcc/ada/sem_type.adb | 2 +- > + gcc/ada/sem_util.adb | 6 +++--- > + 10 files changed, 26 insertions(+), 26 deletions(-) > + > +diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb > +index 981bb91..d58f136 100644 > +--- a/gcc/ada/contracts.adb > ++++ b/gcc/ada/contracts.adb > +@@ -213,7 +213,7 @@ package body Contracts is > + -- Initializes > + -- Part_Of (instantiation only) > + > +- elsif Ekind_In (Id, E_Generic_Package, E_Package) then > ++ elsif Is_Package_Or_Generic_Package (Id) then > + if Nam_In (Prag_Nam, Name_Abstract_State, > + Name_Initial_Condition, > + Name_Initializes) The only nit: please replace it with: @@ -1 +1,2 @@ + in order to shrink the file. Please install it with the change. Martin > +diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb > +index 98b508f..1df8ed0 100644 > +--- a/gcc/ada/einfo.adb > ++++ b/gcc/ada/einfo.adb > +@@ -713,7 +713,7 @@ package body Einfo is > + > + function Abstract_States (Id : E) return L is > + begin > +- pragma Assert (Ekind_In (Id, E_Generic_Package, E_Package)); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); > + return Elist25 (Id); > + end Abstract_States; > + > +@@ -837,7 +837,7 @@ package body Einfo is > + > + function Body_Entity (Id : E) return E is > + begin > +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package)); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); > + return Node19 (Id); > + end Body_Entity; > + > +@@ -1424,8 +1424,8 @@ package body Einfo is > + > + function First_Private_Entity (Id : E) return E is > + begin > +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package) > +- or else Ekind (Id) in Concurrent_Kind); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id) > ++ or else Is_Concurrent_Type (Id)); > + return Node16 (Id); > + end First_Private_Entity; > + > +@@ -3044,7 +3044,7 @@ package body Einfo is > + > + function Package_Instantiation (Id : E) return N is > + begin > +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package)); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); > + return Node26 (Id); > + end Package_Instantiation; > + > +@@ -3883,7 +3883,7 @@ package body Einfo is > + > + procedure Set_Abstract_States (Id : E; V : L) is > + begin > +- pragma Assert (Ekind_In (Id, E_Generic_Package, E_Package)); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); > + Set_Elist25 (Id, V); > + end Set_Abstract_States; > + > +@@ -4006,7 +4006,7 @@ package body Einfo is > + > + procedure Set_Body_Entity (Id : E; V : E) is > + begin > +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package)); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); > + Set_Node19 (Id, V); > + end Set_Body_Entity; > + > +@@ -4593,8 +4593,8 @@ package body Einfo is > + > + procedure Set_First_Private_Entity (Id : E; V : E) is > + begin > +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package) > +- or else Ekind (Id) in Concurrent_Kind); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id) > ++ or else Is_Concurrent_Type (Id)); > + Set_Node16 (Id, V); > + end Set_First_Private_Entity; > + > +@@ -7827,7 +7827,7 @@ package body Einfo is > + > + function Has_Non_Null_Abstract_State (Id : E) return B is > + begin > +- pragma Assert (Ekind_In (Id, E_Generic_Package, E_Package)); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); > + > + return > + Present (Abstract_States (Id)) > +@@ -7863,7 +7863,7 @@ package body Einfo is > + ----------------------------- > + > + function Has_Null_Abstract_State (Id : E) return B is > +- pragma Assert (Ekind_In (Id, E_Generic_Package, E_Package)); > ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); > + > + States : constant Elist_Id := Abstract_States (Id); > + > +diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb > +index 64ac353..392a221 100644 > +--- a/gcc/ada/exp_ch9.adb > ++++ b/gcc/ada/exp_ch9.adb > +@@ -6167,7 +6167,7 @@ package body Exp_Ch9 is > + -- this safe. This is a common (if dubious) idiom. > + > + elsif S = Scope (Prot) > +- and then Ekind_In (S, E_Package, E_Generic_Package) > ++ and then Is_Package_Or_Generic_Package (S) > + and then Nkind (Parent (E)) = N_Object_Declaration > + and then Nkind (Parent (Parent (E))) = N_Package_Body > + then > +diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb > +index dc3a3c2..209e060 100644 > +--- a/gcc/ada/sem_ch12.adb > ++++ b/gcc/ada/sem_ch12.adb > +@@ -10364,7 +10364,7 @@ package body Sem_Ch12 is > + -- such as a parent generic within the body of a generic child. > + > + if not Is_Entity_Name (Actual) > +- or else not Ekind_In (Entity (Actual), E_Generic_Package, E_Package) > ++ or else not Is_Package_Or_Generic_Package (Entity (Actual)) > + then > + Error_Msg_N > + ("expect package instance to instantiate formal", Actual); > +diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb > +index 5910112..702f265 100644 > +--- a/gcc/ada/sem_ch4.adb > ++++ b/gcc/ada/sem_ch4.adb > +@@ -9480,7 +9480,7 @@ package body Sem_Ch4 is > + Type_Scope : constant Entity_Id := Scope (T); > + Op_List : Elist_Id := Primitive_Operations (T); > + begin > +- if Ekind_In (Type_Scope, E_Package, E_Generic_Package) > ++ if Is_Package_Or_Generic_Package (Type_Scope) > + and then ((In_Package_Body (Type_Scope) > + and then In_Open_Scopes (Type_Scope)) or else In_Instance_Body) > + then > +diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb > +index 6d9a1db..f217dfd 100644 > +--- a/gcc/ada/sem_ch7.adb > ++++ b/gcc/ada/sem_ch7.adb > +@@ -2428,7 +2428,7 @@ package body Sem_Ch7 is > + -- defined in the associated package, subject to at least one Part_Of > + -- constituent. > + > +- if Ekind_In (P, E_Generic_Package, E_Package) then > ++ if Is_Package_Or_Generic_Package (P) then > + declare > + States : constant Elist_Id := Abstract_States (P); > + State_Elmt : Elmt_Id; > +@@ -3322,7 +3322,7 @@ package body Sem_Ch7 is > + -- performed if the caller requests this behavior. > + > + if Do_Abstract_States > +- and then Ekind_In (Pack_Id, E_Generic_Package, E_Package) > ++ and then Is_Package_Or_Generic_Package (Pack_Id) > + and then Has_Non_Null_Abstract_State (Pack_Id) > + and then Requires_Body > + then > +@@ -3380,7 +3380,7 @@ package body Sem_Ch7 is > + -- provided). If Ignore_Abstract_State is True, we don't do this check > + -- (so we can use Unit_Requires_Body to check for some other reason). > + > +- elsif Ekind_In (Pack_Id, E_Generic_Package, E_Package) > ++ elsif Is_Package_Or_Generic_Package (Pack_Id) > + and then Present (Abstract_States (Pack_Id)) > + and then not Is_Null_State > + (Node (First_Elmt (Abstract_States (Pack_Id)))) > +diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb > +index f083f7c..7f50b40 100644 > +--- a/gcc/ada/sem_ch8.adb > ++++ b/gcc/ada/sem_ch8.adb > +@@ -5950,7 +5950,7 @@ package body Sem_Ch8 is > + > + -- Package or generic package is always a simple reference > + > +- if Ekind_In (E, E_Package, E_Generic_Package) then > ++ if Is_Package_Or_Generic_Package (E) then > + Generate_Reference (E, N, 'r'); > + > + -- Else see if we have a left hand side > +@@ -8779,7 +8779,7 @@ package body Sem_Ch8 is > + > + -- Set Default_Storage_Pool field of the library unit if necessary > + > +- if Ekind_In (S, E_Package, E_Generic_Package) > ++ if Is_Package_Or_Generic_Package (S) > + and then > + Nkind (Parent (Unit_Declaration_Node (S))) = N_Compilation_Unit > + then > +@@ -8949,7 +8949,7 @@ package body Sem_Ch8 is > + > + if Is_Child_Unit (S) > + and then Present (E) > +- and then Ekind_In (E, E_Package, E_Generic_Package) > ++ and then Is_Package_Or_Generic_Package (E) > + and then > + Nkind (Parent (Unit_Declaration_Node (E))) = N_Compilation_Unit > + then > +diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb > +index f3cac46..dbf3fac 100644 > +--- a/gcc/ada/sem_elab.adb > ++++ b/gcc/ada/sem_elab.adb > +@@ -13826,7 +13826,7 @@ package body Sem_Elab is > + -- be on another machine. > + > + if Ekind (Body_Id) = E_Package_Body > +- and then Ekind_In (Spec_Id, E_Generic_Package, E_Package) > ++ and then Is_Package_Or_Generic_Package (Spec_Id) > + and then (Is_Remote_Call_Interface (Spec_Id) > + or else Is_Remote_Types (Spec_Id)) > + then > +diff --git a/gcc/ada/sem_type.adb b/gcc/ada/sem_type.adb > +index e5d01dd..1868568 100644 > +--- a/gcc/ada/sem_type.adb > ++++ b/gcc/ada/sem_type.adb > +@@ -1383,7 +1383,7 @@ package body Sem_Type is > + begin > + return In_Same_List (Parent (Typ), Op_Decl) > + or else > +- (Ekind_In (Scop, E_Package, E_Generic_Package) > ++ (Is_Package_Or_Generic_Package (Scop) > + and then List_Containing (Op_Decl) = > + Visible_Declarations (Parent (Scop)) > + and then List_Containing (Parent (Typ)) = > +diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb > +index b980b4c..c1b1d9e 100644 > +--- a/gcc/ada/sem_util.adb > ++++ b/gcc/ada/sem_util.adb > +@@ -3407,7 +3407,7 @@ package body Sem_Util is > + -- Stop the traversal when a package subject to a null abstract state > + -- has been found. > + > +- if Ekind_In (Context, E_Generic_Package, E_Package) > ++ if Is_Package_Or_Generic_Package (Context) > + and then Has_Null_Abstract_State (Context) > + then > + exit; > +@@ -12978,7 +12978,7 @@ package body Sem_Util is > + > + begin > + if Present (Pkg) > +- and then Ekind_In (Pkg, E_Generic_Package, E_Package) > ++ and then Is_Package_Or_Generic_Package (Pkg) > + then > + while Nkind (Pkg_Decl) /= N_Package_Specification loop > + Pkg_Decl := Parent (Pkg_Decl); > +@@ -25283,7 +25283,7 @@ package body Sem_Util is > + or else > + (Present (Scope (Val)) > + and then Is_Implementation_Defined (Scope (Val)))) > +- and then not (Ekind_In (Val, E_Package, E_Generic_Package) > ++ and then not (Is_Package_Or_Generic_Package (Val) > + and then Is_Library_Level_Entity (Val)) > + then > + Check_Restriction (No_Implementation_Identifiers, Post_Node); > +-- > +2.1.4 > >
On 26/05/2020 17:06, Martin Liška wrote: > That was simpler than I expected ;) I compared results for all 2000 > patches since > we switched to git and there are no changes! Ah, nice! Thank you for double-checking: I only ran the unit tests on my side. >> +diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb >> +index 981bb91..d58f136 100644 >> +--- a/gcc/ada/contracts.adb >> ++++ b/gcc/ada/contracts.adb >> +@@ -213,7 +213,7 @@ package body Contracts is >> + -- Initializes >> + -- Part_Of (instantiation only) >> + >> +- elsif Ekind_In (Id, E_Generic_Package, E_Package) then >> ++ elsif Is_Package_Or_Generic_Package (Id) then >> + if Nam_In (Prag_Nam, Name_Abstract_State, >> + Name_Initial_Condition, >> + Name_Initializes) > > The only nit: please replace it with: > @@ -1 +1,2 @@ > > + > > in order to shrink the file. > > Please install it with the change. Done and pushed. Thank you for the quick review!
diff --git a/contrib/gcc-changelog/git_commit.py b/contrib/gcc-changelog/git_commit.py index 6f99d917b3b..a24a251d8f3 100755 --- a/contrib/gcc-changelog/git_commit.py +++ b/contrib/gcc-changelog/git_commit.py @@ -185,14 +185,32 @@ class ChangeLogEntry: @property def files(self): files = [] + + # Whether the content currently processed is between a star prefix the + # end of the file list: a colon or an open paren. + in_location = False + for line in self.lines: + # If this line matches the star prefix, start the location + # processing on the information that follows the star. m = star_prefix_regex.match(line) if m: + in_location = True line = m.group('content') + + if in_location: + # Strip everything that is not a filename in "line": entities + # "(NAME)", entry text (the colon, if present, and anything + # that follows it). if '(' in line: line = line[:line.index('(')] + in_location = False if ':' in line: line = line[:line.index(':')] + in_location = False + + # At this point, all that 's left is a list of filenames + # separated by commas and whitespaces. for file in line.split(','): file = file.strip() if file: diff --git a/contrib/gcc-changelog/test_email.py b/contrib/gcc-changelog/test_email.py index 1379502e755..3d2c8ff2412 100755 --- a/contrib/gcc-changelog/test_email.py +++ b/contrib/gcc-changelog/test_email.py @@ -286,3 +286,12 @@ class TestGccChangelog(unittest.TestCase): email = self.from_patch_glob('0001-Update-merge.sh-to-reflect.patch') assert (email.changelog_entries[0].lines[0] == '\t* LOCAL_PATCHES: Use git hash instead of SVN id.') + + def test_multiline_file_list(self): + email = self.from_patch_glob( + '0001-Ada-Reuse-Is_Package_Or_Generic_Package-where-possib.patch') + assert (email.changelog_entries[0].files + == ['contracts.adb', 'einfo.adb', 'exp_ch9.adb', + 'sem_ch12.adb', 'sem_ch4.adb', 'sem_ch7.adb', + 'sem_ch8.adb', 'sem_elab.adb', 'sem_type.adb', + 'sem_util.adb']) diff --git a/contrib/gcc-changelog/test_patches.txt b/contrib/gcc-changelog/test_patches.txt index 84d4b81d818..3492fb4dcb8 100644 --- a/contrib/gcc-changelog/test_patches.txt +++ b/contrib/gcc-changelog/test_patches.txt @@ -2650,4 +2650,294 @@ index dfa7bf3d196..3f4f1629a22 100755 -- 2.26.2 +=== 0001-Ada-Reuse-Is_Package_Or_Generic_Package-where-possib.patch === +From 557b268fffffdeb0980a17411f458eee333f55c6 Mon Sep 17 00:00:00 2001 +From: Piotr Trojanek <trojanek@adacore.com> +Date: Thu, 12 Dec 2019 11:45:24 +0100 +Subject: [PATCH] [Ada] Reuse Is_Package_Or_Generic_Package where possible + +2020-05-26 Piotr Trojanek <trojanek@adacore.com> + +gcc/ada/ + + * contracts.adb, einfo.adb, exp_ch9.adb, sem_ch12.adb, + sem_ch4.adb, sem_ch7.adb, sem_ch8.adb, sem_elab.adb, + sem_type.adb, sem_util.adb: Reuse Is_Package_Or_Generic_Package + where possible (similarly, reuse Is_Concurrent_Type if it was + possible in the same expressions). +--- + gcc/ada/contracts.adb | 2 +- + gcc/ada/einfo.adb | 22 +++++++++++----------- + gcc/ada/exp_ch9.adb | 2 +- + gcc/ada/sem_ch12.adb | 2 +- + gcc/ada/sem_ch4.adb | 2 +- + gcc/ada/sem_ch7.adb | 6 +++--- + gcc/ada/sem_ch8.adb | 6 +++--- + gcc/ada/sem_elab.adb | 2 +- + gcc/ada/sem_type.adb | 2 +- + gcc/ada/sem_util.adb | 6 +++--- + 10 files changed, 26 insertions(+), 26 deletions(-) + +diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb +index 981bb91..d58f136 100644 +--- a/gcc/ada/contracts.adb ++++ b/gcc/ada/contracts.adb +@@ -213,7 +213,7 @@ package body Contracts is + -- Initializes + -- Part_Of (instantiation only) + +- elsif Ekind_In (Id, E_Generic_Package, E_Package) then ++ elsif Is_Package_Or_Generic_Package (Id) then + if Nam_In (Prag_Nam, Name_Abstract_State, + Name_Initial_Condition, + Name_Initializes) +diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb +index 98b508f..1df8ed0 100644 +--- a/gcc/ada/einfo.adb ++++ b/gcc/ada/einfo.adb +@@ -713,7 +713,7 @@ package body Einfo is + + function Abstract_States (Id : E) return L is + begin +- pragma Assert (Ekind_In (Id, E_Generic_Package, E_Package)); ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); + return Elist25 (Id); + end Abstract_States; + +@@ -837,7 +837,7 @@ package body Einfo is + + function Body_Entity (Id : E) return E is + begin +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package)); ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); + return Node19 (Id); + end Body_Entity; + +@@ -1424,8 +1424,8 @@ package body Einfo is + + function First_Private_Entity (Id : E) return E is + begin +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package) +- or else Ekind (Id) in Concurrent_Kind); ++ pragma Assert (Is_Package_Or_Generic_Package (Id) ++ or else Is_Concurrent_Type (Id)); + return Node16 (Id); + end First_Private_Entity; + +@@ -3044,7 +3044,7 @@ package body Einfo is + + function Package_Instantiation (Id : E) return N is + begin +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package)); ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); + return Node26 (Id); + end Package_Instantiation; + +@@ -3883,7 +3883,7 @@ package body Einfo is + + procedure Set_Abstract_States (Id : E; V : L) is + begin +- pragma Assert (Ekind_In (Id, E_Generic_Package, E_Package)); ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); + Set_Elist25 (Id, V); + end Set_Abstract_States; + +@@ -4006,7 +4006,7 @@ package body Einfo is + + procedure Set_Body_Entity (Id : E; V : E) is + begin +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package)); ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); + Set_Node19 (Id, V); + end Set_Body_Entity; + +@@ -4593,8 +4593,8 @@ package body Einfo is + + procedure Set_First_Private_Entity (Id : E; V : E) is + begin +- pragma Assert (Ekind_In (Id, E_Package, E_Generic_Package) +- or else Ekind (Id) in Concurrent_Kind); ++ pragma Assert (Is_Package_Or_Generic_Package (Id) ++ or else Is_Concurrent_Type (Id)); + Set_Node16 (Id, V); + end Set_First_Private_Entity; + +@@ -7827,7 +7827,7 @@ package body Einfo is + + function Has_Non_Null_Abstract_State (Id : E) return B is + begin +- pragma Assert (Ekind_In (Id, E_Generic_Package, E_Package)); ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); + + return + Present (Abstract_States (Id)) +@@ -7863,7 +7863,7 @@ package body Einfo is + ----------------------------- + + function Has_Null_Abstract_State (Id : E) return B is +- pragma Assert (Ekind_In (Id, E_Generic_Package, E_Package)); ++ pragma Assert (Is_Package_Or_Generic_Package (Id)); + + States : constant Elist_Id := Abstract_States (Id); + +diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb +index 64ac353..392a221 100644 +--- a/gcc/ada/exp_ch9.adb ++++ b/gcc/ada/exp_ch9.adb +@@ -6167,7 +6167,7 @@ package body Exp_Ch9 is + -- this safe. This is a common (if dubious) idiom. + + elsif S = Scope (Prot) +- and then Ekind_In (S, E_Package, E_Generic_Package) ++ and then Is_Package_Or_Generic_Package (S) + and then Nkind (Parent (E)) = N_Object_Declaration + and then Nkind (Parent (Parent (E))) = N_Package_Body + then +diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb +index dc3a3c2..209e060 100644 +--- a/gcc/ada/sem_ch12.adb ++++ b/gcc/ada/sem_ch12.adb +@@ -10364,7 +10364,7 @@ package body Sem_Ch12 is + -- such as a parent generic within the body of a generic child. + + if not Is_Entity_Name (Actual) +- or else not Ekind_In (Entity (Actual), E_Generic_Package, E_Package) ++ or else not Is_Package_Or_Generic_Package (Entity (Actual)) + then + Error_Msg_N + ("expect package instance to instantiate formal", Actual); +diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb +index 5910112..702f265 100644 +--- a/gcc/ada/sem_ch4.adb ++++ b/gcc/ada/sem_ch4.adb +@@ -9480,7 +9480,7 @@ package body Sem_Ch4 is + Type_Scope : constant Entity_Id := Scope (T); + Op_List : Elist_Id := Primitive_Operations (T); + begin +- if Ekind_In (Type_Scope, E_Package, E_Generic_Package) ++ if Is_Package_Or_Generic_Package (Type_Scope) + and then ((In_Package_Body (Type_Scope) + and then In_Open_Scopes (Type_Scope)) or else In_Instance_Body) + then +diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb +index 6d9a1db..f217dfd 100644 +--- a/gcc/ada/sem_ch7.adb ++++ b/gcc/ada/sem_ch7.adb +@@ -2428,7 +2428,7 @@ package body Sem_Ch7 is + -- defined in the associated package, subject to at least one Part_Of + -- constituent. + +- if Ekind_In (P, E_Generic_Package, E_Package) then ++ if Is_Package_Or_Generic_Package (P) then + declare + States : constant Elist_Id := Abstract_States (P); + State_Elmt : Elmt_Id; +@@ -3322,7 +3322,7 @@ package body Sem_Ch7 is + -- performed if the caller requests this behavior. + + if Do_Abstract_States +- and then Ekind_In (Pack_Id, E_Generic_Package, E_Package) ++ and then Is_Package_Or_Generic_Package (Pack_Id) + and then Has_Non_Null_Abstract_State (Pack_Id) + and then Requires_Body + then +@@ -3380,7 +3380,7 @@ package body Sem_Ch7 is + -- provided). If Ignore_Abstract_State is True, we don't do this check + -- (so we can use Unit_Requires_Body to check for some other reason). + +- elsif Ekind_In (Pack_Id, E_Generic_Package, E_Package) ++ elsif Is_Package_Or_Generic_Package (Pack_Id) + and then Present (Abstract_States (Pack_Id)) + and then not Is_Null_State + (Node (First_Elmt (Abstract_States (Pack_Id)))) +diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb +index f083f7c..7f50b40 100644 +--- a/gcc/ada/sem_ch8.adb ++++ b/gcc/ada/sem_ch8.adb +@@ -5950,7 +5950,7 @@ package body Sem_Ch8 is + + -- Package or generic package is always a simple reference + +- if Ekind_In (E, E_Package, E_Generic_Package) then ++ if Is_Package_Or_Generic_Package (E) then + Generate_Reference (E, N, 'r'); + + -- Else see if we have a left hand side +@@ -8779,7 +8779,7 @@ package body Sem_Ch8 is + + -- Set Default_Storage_Pool field of the library unit if necessary + +- if Ekind_In (S, E_Package, E_Generic_Package) ++ if Is_Package_Or_Generic_Package (S) + and then + Nkind (Parent (Unit_Declaration_Node (S))) = N_Compilation_Unit + then +@@ -8949,7 +8949,7 @@ package body Sem_Ch8 is + + if Is_Child_Unit (S) + and then Present (E) +- and then Ekind_In (E, E_Package, E_Generic_Package) ++ and then Is_Package_Or_Generic_Package (E) + and then + Nkind (Parent (Unit_Declaration_Node (E))) = N_Compilation_Unit + then +diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb +index f3cac46..dbf3fac 100644 +--- a/gcc/ada/sem_elab.adb ++++ b/gcc/ada/sem_elab.adb +@@ -13826,7 +13826,7 @@ package body Sem_Elab is + -- be on another machine. + + if Ekind (Body_Id) = E_Package_Body +- and then Ekind_In (Spec_Id, E_Generic_Package, E_Package) ++ and then Is_Package_Or_Generic_Package (Spec_Id) + and then (Is_Remote_Call_Interface (Spec_Id) + or else Is_Remote_Types (Spec_Id)) + then +diff --git a/gcc/ada/sem_type.adb b/gcc/ada/sem_type.adb +index e5d01dd..1868568 100644 +--- a/gcc/ada/sem_type.adb ++++ b/gcc/ada/sem_type.adb +@@ -1383,7 +1383,7 @@ package body Sem_Type is + begin + return In_Same_List (Parent (Typ), Op_Decl) + or else +- (Ekind_In (Scop, E_Package, E_Generic_Package) ++ (Is_Package_Or_Generic_Package (Scop) + and then List_Containing (Op_Decl) = + Visible_Declarations (Parent (Scop)) + and then List_Containing (Parent (Typ)) = +diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb +index b980b4c..c1b1d9e 100644 +--- a/gcc/ada/sem_util.adb ++++ b/gcc/ada/sem_util.adb +@@ -3407,7 +3407,7 @@ package body Sem_Util is + -- Stop the traversal when a package subject to a null abstract state + -- has been found. + +- if Ekind_In (Context, E_Generic_Package, E_Package) ++ if Is_Package_Or_Generic_Package (Context) + and then Has_Null_Abstract_State (Context) + then + exit; +@@ -12978,7 +12978,7 @@ package body Sem_Util is + + begin + if Present (Pkg) +- and then Ekind_In (Pkg, E_Generic_Package, E_Package) ++ and then Is_Package_Or_Generic_Package (Pkg) + then + while Nkind (Pkg_Decl) /= N_Package_Specification loop + Pkg_Decl := Parent (Pkg_Decl); +@@ -25283,7 +25283,7 @@ package body Sem_Util is + or else + (Present (Scope (Val)) + and then Is_Implementation_Defined (Scope (Val)))) +- and then not (Ekind_In (Val, E_Package, E_Generic_Package) ++ and then not (Is_Package_Or_Generic_Package (Val) + and then Is_Library_Level_Entity (Val)) + then + Check_Restriction (No_Implementation_Identifiers, Post_Node); +-- +2.1.4