aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2023-04-12 00:19:23 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-05-30 09:12:16 +0200
commit3fd3d3d0fa094c5d79c2e4e3c44cdd22b42d6ca4 (patch)
tree9af65cfc0b36b77e31131bf9c7bcab5b0e9f0ade
parent35875281d9f3f783864f96baf71a279fc657238d (diff)
downloadgcc-3fd3d3d0fa094c5d79c2e4e3c44cdd22b42d6ca4.zip
gcc-3fd3d3d0fa094c5d79c2e4e3c44cdd22b42d6ca4.tar.gz
gcc-3fd3d3d0fa094c5d79c2e4e3c44cdd22b42d6ca4.tar.bz2
ada: Only build access-to-subprogram wrappers when expander is active
For access-to-subprogram types with Pre/Post aspects we create a wrapper routine that evaluates these aspects. Spec of this wrapper was created always, while its body was only created when expansion was enabled. Now we only create these wrappers when expansion is enabled. In particular, we don't create them in GNATprove mode; instead, GNATprove picks the Pre/Post expressions directly from the aspects. gcc/ada/ * exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Build wrapper body if requested by routine that builds wrapper spec. * sem_ch3.adb (Analyze_Full_Type_Declaration): Only build wrapper when expander is active. (Build_Access_Subprogram_Wrapper): Remove special-case for GNATprove.
-rw-r--r--gcc/ada/exp_ch3.adb4
-rw-r--r--gcc/ada/sem_ch3.adb12
2 files changed, 2 insertions, 14 deletions
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index 5f651ba..f8c9947 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -583,10 +583,6 @@ package body Exp_Ch3 is
Ptr : Entity_Id;
begin
- if not Expander_Active then
- return;
- end if;
-
-- Create List of actuals for indirect call. The last parameter of the
-- subprogram declaration is the access value for the indirect call.
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index f360be8..29733e9 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -3224,6 +3224,7 @@ package body Sem_Ch3 is
if Ada_Version >= Ada_2022
and then Present (Aspect_Specifications (N))
+ and then Expander_Active
then
Build_Access_Subprogram_Wrapper (N);
end if;
@@ -6915,16 +6916,7 @@ package body Sem_Ch3 is
-- may be handled as a dispatching operation and erroneously registered
-- in a dispatch table.
- if not GNATprove_Mode then
- Append_Freeze_Action (Id, New_Decl);
-
- -- Under GNATprove mode there is no such problem but we do not declare
- -- it in the freezing actions since they are not analyzed under this
- -- mode.
-
- else
- Insert_After (Decl, New_Decl);
- end if;
+ Append_Freeze_Action (Id, New_Decl);
Set_Access_Subprogram_Wrapper (Designated_Type (Id), Subp);
Build_Access_Subprogram_Wrapper_Body (Decl, New_Decl);