summaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-10 14:42:22 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-10 14:42:22 +0000
commitb94a633e0a9a5310e48bf94451a9e0aba9db77b2 (patch)
tree4e89aa071c2c8b341feee15fcf146fadb30f2631 /gcc/ada
parentdd2f3435bf50613c48a6609e385d5730bc80ba4c (diff)
downloadgcc-b94a633e0a9a5310e48bf94451a9e0aba9db77b2.tar.gz
2014-10-10 Ed Schonberg <schonberg@adacore.com>
* 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 <dismukes@adacore.com> * 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 <schonberg@adacore.com> * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216090 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog18
-rw-r--r--gcc/ada/freeze.adb12
-rw-r--r--gcc/ada/gnat1drv.adb6
-rw-r--r--gcc/ada/sem_ch13.adb3
4 files changed, 38 insertions, 1 deletions
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 <schonberg@adacore.com>
+
+ * 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 <dismukes@adacore.com>
+
+ * 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 <schonberg@adacore.com>
+
+ * 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 <dewar@adacore.com>
* 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);