public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-1634] [Ada] Reuse Package_Specification in Is_Incomplete_Or_Private_Type
@ 2021-06-18 8:39 Pierre-Marie de Rodat
0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2021-06-18 8:39 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:f86c2f9c8e5d7d02cc6b79fc80a647a9a27e23f2
commit r12-1634-gf86c2f9c8e5d7d02cc6b79fc80a647a9a27e23f2
Author: Piotr Trojanek <trojanek@adacore.com>
Date: Mon Mar 22 15:38:34 2021 +0100
[Ada] Reuse Package_Specification in Is_Incomplete_Or_Private_Type
gcc/ada/
* sem_aux.adb (Package_Specification): Add assertions to confirm
the kind of the of parameter and returned node.
* sem_ch12.adb (Remove_Parent): Reorder conditions; this change
appears to be semantically neutral, but is enough to avoid the
problematic call to Package_Specification.
* sem_util.adb (Is_Incomplete_Or_Private_Type): Replace loop
with a call to Package_Specification.
Diff:
---
gcc/ada/sem_aux.adb | 4 ++++
gcc/ada/sem_ch12.adb | 5 +++--
gcc/ada/sem_util.adb | 18 ++++++------------
3 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/gcc/ada/sem_aux.adb b/gcc/ada/sem_aux.adb
index 9f3ca2f332d..ea3b59c0a1c 100644
--- a/gcc/ada/sem_aux.adb
+++ b/gcc/ada/sem_aux.adb
@@ -1421,12 +1421,16 @@ package body Sem_Aux is
N : Node_Id;
begin
+ pragma Assert (Is_Package_Or_Generic_Package (E));
+
N := Parent (E);
if Nkind (N) = N_Defining_Program_Unit_Name then
N := Parent (N);
end if;
+ pragma Assert (Nkind (N) = N_Package_Specification);
+
return N;
end Package_Specification;
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 06947e22878..efdc44941dc 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -15222,14 +15222,15 @@ package body Sem_Ch12 is
-- subunit of a generic contains an instance of a child unit of
-- its generic parent unit.
- elsif S = Current_Scope and then Is_Generic_Instance (S) then
+ elsif S = Current_Scope and then Is_Generic_Instance (S)
+ and then (In_Package_Body (S) or else In_Private_Part (S))
+ then
declare
Par : constant Entity_Id :=
Generic_Parent (Package_Specification (S));
begin
if Present (Par)
and then P = Scope (Par)
- and then (In_Package_Body (S) or else In_Private_Part (S))
then
Set_In_Private_Part (P);
Install_Private_Declarations (P);
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index cfbbae0e2d5..eb2caa76407 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -14751,17 +14751,11 @@ package body Sem_Util is
-- Private or Taft amendment type case
- declare
- Pkg_Decl : Node_Id;
-
- begin
- if Present (S) and then Is_Package_Or_Generic_Package (S) then
- Pkg_Decl := S;
-
- while Nkind (Pkg_Decl) /= N_Package_Specification loop
- Pkg_Decl := Parent (Pkg_Decl);
- end loop;
+ if Present (S) and then Is_Package_Or_Generic_Package (S) then
+ declare
+ Pkg_Decl : constant Node_Id := Package_Specification (S);
+ begin
-- It is knows that Typ has a private view, look for it in the
-- visible declarations of the enclosing scope. A special case
-- of this is when the two views have been exchanged - the full
@@ -14785,8 +14779,8 @@ package body Sem_Util is
elsif In_Package_Body (S) then
return Inspect_Decls (Private_Declarations (Pkg_Decl), True);
end if;
- end if;
- end;
+ end;
+ end if;
-- The type has no incomplete or private view
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-06-18 8:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-18 8:39 [gcc r12-1634] [Ada] Reuse Package_Specification in Is_Incomplete_Or_Private_Type Pierre-Marie de Rodat
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).