aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog22
-rw-r--r--gcc/ada/exp_ch5.adb8
-rw-r--r--gcc/ada/inline.adb4
-rw-r--r--gcc/ada/sem_ch3.adb4
-rw-r--r--gcc/ada/sem_elab.adb11
-rw-r--r--gcc/ada/sem_util.adb14
-rw-r--r--gcc/ada/sem_util.ads6
7 files changed, 61 insertions, 8 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 7b1b797..98e2678 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,25 @@
+2017-09-08 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * sem_elab.adb (Check_A_Call): Do not consider
+ references to internal variables for SPARK semantics.
+
+2017-09-08 Arnaud Charlet <charlet@adacore.com>
+
+ * inline.adb (In_Package_Spec): refine type of
+ the parameter from Node_Id to Entity_Id.
+
+2017-09-08 Justin Squirek <squirek@adacore.com>
+
+ * exp_ch5.adb (Expand_Formal_Container_Loop):
+ Reset the scope of the loop parameter after it is reanalyzed.
+
+2017-09-08 Eric Botcazou <ebotcazou@adacore.com>
+
+ * sem_util.ads (Set_Rep_Info): New inline procedure.
+ * sem_util.adb (Set_Rep_Info): Implement it.
+ * sem_ch3.adb (Process_Subtype): If the case of a constraint present,
+ always copy the representation aspects onto the subtype.
+
2017-09-08 Georges-Alex Jaloyan <jaloyan@adacore.com>
* g-dynhta.adb, g-dynhta.ads (Get_First_Key, Get_Next_key):
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index c3d0065..d8d22d0 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -3126,8 +3126,14 @@ package body Exp_Ch5 is
-- as a legal form of assignment to remedy this side effect.
Set_Assignment_OK (Name (Advance));
-
Analyze (N);
+
+ -- Because we have to analyze the initial declaration of the loop
+ -- parameter multiple times its scope is incorrectly set at this point
+ -- to the one surrounding the block statement - so set the scope
+ -- manually to be the actual block statement.
+
+ Set_Scope (Defining_Identifier (Init_Decl), Entity (Identifier (N)));
end Expand_Formal_Container_Loop;
------------------------------------------
diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb
index aa99201..7096f7c 100644
--- a/gcc/ada/inline.adb
+++ b/gcc/ada/inline.adb
@@ -1187,7 +1187,7 @@ package body Inline is
-- Return True if subprogram Id defines a compilation unit
-- Shouldn't this be in Sem_Aux???
- function In_Package_Spec (Id : Node_Id) return Boolean;
+ function In_Package_Spec (Id : Entity_Id) return Boolean;
-- Return True if subprogram Id is defined in the package specification,
-- either its visible or private part.
@@ -1292,7 +1292,7 @@ package body Inline is
-- In_Package_Spec --
---------------------
- function In_Package_Spec (Id : Node_Id) return Boolean is
+ function In_Package_Spec (Id : Entity_Id) return Boolean is
P : constant Node_Id := Parent (Subprogram_Spec (Id));
-- Parent of the subprogram's declaration
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 9f1d824..a1d8f8b 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -21556,9 +21556,11 @@ package body Sem_Ch3 is
Error_Msg_N ("invalid subtype mark in subtype indication", S);
end case;
- -- Size and Convention are always inherited from the base type
+ -- Size, Alignment, Representation aspects and Convention are always
+ -- inherited from the base type.
Set_Size_Info (Def_Id, (Subtype_Mark_Id));
+ Set_Rep_Info (Def_Id, (Subtype_Mark_Id));
Set_Convention (Def_Id, Convention (Subtype_Mark_Id));
return Def_Id;
diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb
index 6d920e4..7be57cf 100644
--- a/gcc/ada/sem_elab.adb
+++ b/gcc/ada/sem_elab.adb
@@ -721,22 +721,25 @@ package body Sem_Elab is
and then not Is_Call_Of_Generic_Formal (N)
then
return;
- end if;
-- If this is a rewrite of a Valid_Scalars attribute, then nothing to
-- check, we don't mind in this case if the call occurs before the body
-- since this is all generated code.
- if Nkind (Original_Node (N)) = N_Attribute_Reference
+ elsif Nkind (Original_Node (N)) = N_Attribute_Reference
and then Attribute_Name (Original_Node (N)) = Name_Valid_Scalars
then
return;
- end if;
-- Intrinsics such as instances of Unchecked_Deallocation do not have
-- any body, so elaboration checking is not needed, and would be wrong.
- if Is_Intrinsic_Subprogram (E) then
+ elsif Is_Intrinsic_Subprogram (E) then
+ return;
+
+ -- Do not consider references to internal variables for SPARK semantics
+
+ elsif Variable_Case and then not Comes_From_Source (E) then
return;
end if;
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index a399be0..a153e9a 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -21659,6 +21659,20 @@ package body Sem_Util is
end if;
end Set_Referenced_Modified;
+ ------------------
+ -- Set_Rep_Info --
+ ------------------
+
+ procedure Set_Rep_Info (T1, T2 : Entity_Id) is
+ begin
+ Set_Is_Atomic (T1, Is_Atomic (T2));
+ Set_Is_Independent (T1, Is_Independent (T2));
+ Set_Is_Volatile_Full_Access (T1, Is_Volatile_Full_Access (T2));
+ if Is_Base_Type (T1) then
+ Set_Is_Volatile (T1, Is_Volatile (T2));
+ end if;
+ end Set_Rep_Info;
+
----------------------------
-- Set_Scope_Is_Transient --
----------------------------
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index 2d6de5c..d0c3a26 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -2473,6 +2473,12 @@ package Sem_Util is
-- (Referenced_As_LHS if Out_Param is False, Referenced_As_Out_Parameter
-- if Out_Param is True) is set True, and the other flag set False.
+ procedure Set_Rep_Info (T1, T2 : Entity_Id);
+ pragma Inline (Set_Rep_Info);
+ -- Copies the Is_Atomic, Is_Independent and Is_Volatile_Full_Access flags
+ -- from sub(type) entity T2 to (sub)type entity T1, as well as Is_Volatile
+ -- if T1 is a base type.
+
procedure Set_Scope_Is_Transient (V : Boolean := True);
-- Set the flag Is_Transient of the current scope