From c9f95e4c252a3e5528c4da53b183c78b66258566 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Fri, 10 Oct 2014 16:42:22 +0200 Subject: [PATCH] [multiple changes] 2014-10-10 Ed Schonberg * sem_ch13.adb (Analyze_Aspect_Specifications, Library_Unit_Aspects): Aspect specification is legal on a local instantiation of a library-level generic unit. 2014-10-10 Gary Dismukes * gnat1drv.adb (Adjust_Global_Switches): Set Front_End_Inlining if inlining has been enabled via -gnatn and the target is not GCC. 2014-10-10 Ed Schonberg * freeze.adb (Freeze_Entity): Freezing a subprogram does not always freeze its profile. In particular, an attribute reference that takes the access type does not freeze the types of the formals. From-SVN: r216090 --- gcc/ada/ChangeLog | 18 ++++++++++++++++++ gcc/ada/freeze.adb | 12 +++++++++++- gcc/ada/gnat1drv.adb | 6 ++++++ gcc/ada/sem_ch13.adb | 3 +++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 6de6c99a669..50e654ca3d9 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,21 @@ +2014-10-10 Ed Schonberg + + * sem_ch13.adb (Analyze_Aspect_Specifications, Library_Unit_Aspects): + Aspect specification is legal on a local instantiation of a + library-level generic unit. + +2014-10-10 Gary Dismukes + + * gnat1drv.adb (Adjust_Global_Switches): Set Front_End_Inlining + if inlining has been enabled via -gnatn and the target is not GCC. + +2014-10-10 Ed Schonberg + + * freeze.adb (Freeze_Entity): Freezing a subprogram does + not always freeze its profile. In particular, an attribute + reference that takes the access type does not freeze the types + of the formals. + 2014-10-10 Robert Dewar * errout.adb (Adjust_Name_Case): New procedure. diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 7fdd2ab5289..bdc2ea15e7c 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -4004,7 +4004,17 @@ package body Freeze is -- any extra formal parameters are created since we now know -- whether the subprogram will use a foreign convention. - if not Is_Internal (E) then + -- In Ada 2012, freezing a subprogram does not always freeze + -- the corresponding profile (see AI05-019). An attribute + -- reference is not a freezing point of the profile. + -- Other constructs that should not freeze ??? + + if Ada_Version > Ada_2005 + and then Nkind (N) = N_Attribute_Reference + then + null; + + elsif not Is_Internal (E) then declare F_Type : Entity_Id; R_Type : Entity_Id; diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb index 50f4befcc10..545d1436b3b 100644 --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -583,6 +583,12 @@ procedure Gnat1drv is end if; end if; + -- Treat -gnatn as equivalent to -gnatN for non-GCC targets + + if Inline_Active and then not Front_End_Inlining then + Front_End_Inlining := VM_Target /= No_VM or else AAMP_On_Target; + end if; + -- Set back end inlining indication Back_End_Inlining := diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 709dabe29db..ca11c72e37b 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -3018,12 +3018,15 @@ package body Sem_Ch13 is -- of a package declaration, the pragma needs to be inserted -- in the list of declarations for the associated package. -- There is no issue of visibility delay for these aspects. + -- Aspect is legal on a local instantiation of a library- + -- level generic unit. if A_Id in Library_Unit_Aspects and then Nkind_In (N, N_Package_Declaration, N_Generic_Package_Declaration) and then Nkind (Parent (N)) /= N_Compilation_Unit + and then not Is_Generic_Instance (Defining_Entity (N)) then Error_Msg_N ("incorrect context for library unit aspect&", Id); -- 2.30.2