diff mbox series

[2/2] gcc-changelog: handle entries with multi-line file lists

Message ID 20200526144724.13636-2-derodat@adacore.com
State New
Headers show
Series [1/2] gcc-changelog: remove file descriptor leaks | expand

Commit Message

Pierre-Marie de Rodat May 26, 2020, 2:47 p.m. UTC
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.

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(+)

Comments

Martin Liška May 26, 2020, 3:06 p.m. UTC | #1
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
>   
>
Pierre-Marie de Rodat May 26, 2020, 3:50 p.m. UTC | #2
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 mbox series

Patch

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