aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2014-10-10 16:42:22 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2014-10-10 16:42:22 +0200
commitc9f95e4c252a3e5528c4da53b183c78b66258566 (patch)
tree4e89aa071c2c8b341feee15fcf146fadb30f2631 /gcc
parent32a21096039a8a589a9dea3c977f9d18a37a39be (diff)
downloadgcc-c9f95e4c252a3e5528c4da53b183c78b66258566.zip
gcc-c9f95e4c252a3e5528c4da53b183c78b66258566.tar.gz
gcc-c9f95e4c252a3e5528c4da53b183c78b66258566.tar.bz2
[multiple changes]
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. From-SVN: r216090
Diffstat (limited to 'gcc')
-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 6de6c99..50e654c 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 7fdd2ab..bdc2ea1 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 50f4bef..545d143 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 709dabe..ca11c72 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);