aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2015-10-26 12:55:18 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2015-10-26 12:55:18 +0100
commitaafc151a206edfc9352ea637ec2f2bdb39003135 (patch)
treea0d33e85a976740060489adfbbda95e3ced09bc7 /gcc
parent477ee35f51115282b8eb56c0077e197f282b765e (diff)
downloadgcc-aafc151a206edfc9352ea637ec2f2bdb39003135.zip
gcc-aafc151a206edfc9352ea637ec2f2bdb39003135.tar.gz
gcc-aafc151a206edfc9352ea637ec2f2bdb39003135.tar.bz2
[multiple changes]
2015-10-26 Hristian Kirtchev <kirtchev@adacore.com> * einfo.adb (First_Component): Update the assertion to allow for concurrent types. (First_Component_Or_Discriminant): Update the assertion to allow for concurrent types. * einfo.ads: Update the documentation of attributes First_Component and First_Component_Or_Discriminant along with uses in entities. 2015-10-26 Hristian Kirtchev <kirtchev@adacore.com> * sem_res.adb (Resolve_Actuals): An effectively volatile object may act as an actual when the corresponding formal is of a non-scalar effectively volatile type, not just a non-scalar volatile type. 2015-10-26 Bob Duff <duff@adacore.com> * sinfo.ads, sem_util.ads: Update comments. 2015-10-26 Hristian Kirtchev <kirtchev@adacore.com> * sem_prag.adb (Analyze_Refined_Depends_Global_Post): When dealing with protected entries or protected subprograms, use the enclosing protected type to ensure that the protected type declaration is declared in a package spec. Remove an obsolete attempt to ensure the aggregate for of pragma Refined_State as this routine is never called in that case. 2015-10-26 Ed Schonberg <schonberg@adacore.com> * exp_ch5.adb (Expand_Iterator_Loop_Over_Container): For an element iterator loop, the element is a constant if the container object is a constant, even if the container type has a Variable_Indexing aspect. From-SVN: r229345
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog36
-rw-r--r--gcc/ada/einfo.adb7
-rw-r--r--gcc/ada/einfo.ads17
-rw-r--r--gcc/ada/exp_ch5.adb6
-rw-r--r--gcc/ada/sem_prag.adb20
-rw-r--r--gcc/ada/sem_res.adb8
-rw-r--r--gcc/ada/sem_util.ads20
-rw-r--r--gcc/ada/sinfo.ads2
8 files changed, 83 insertions, 33 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 8b146ae..8951f11 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,39 @@
+2015-10-26 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * einfo.adb (First_Component): Update the assertion to allow
+ for concurrent types.
+ (First_Component_Or_Discriminant): Update the assertion to allow for
+ concurrent types.
+ * einfo.ads: Update the documentation of attributes First_Component
+ and First_Component_Or_Discriminant along with uses in entities.
+
+2015-10-26 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * sem_res.adb (Resolve_Actuals): An effectively
+ volatile object may act as an actual when the corresponding
+ formal is of a non-scalar effectively volatile type, not just
+ a non-scalar volatile type.
+
+2015-10-26 Bob Duff <duff@adacore.com>
+
+ * sinfo.ads, sem_util.ads: Update comments.
+
+2015-10-26 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * sem_prag.adb (Analyze_Refined_Depends_Global_Post): When dealing with
+ protected entries or protected subprograms, use the enclosing protected
+ type to ensure that the protected type declaration is declared
+ in a package spec. Remove an obsolete attempt to ensure the
+ aggregate for of pragma Refined_State as this routine is never
+ called in that case.
+
+2015-10-26 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_ch5.adb (Expand_Iterator_Loop_Over_Container): For
+ an element iterator loop, the element is a constant if the
+ container object is a constant, even if the container type has
+ a Variable_Indexing aspect.
+
2015-10-26 Bob Duff <duff@adacore.com>
* s-fileio.adb (Fopen_Mode): Use "r+" for Out_File/Stream_IO,
diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb
index d7d19ab..c8e6fcf 100644
--- a/gcc/ada/einfo.adb
+++ b/gcc/ada/einfo.adb
@@ -6926,7 +6926,9 @@ package body Einfo is
begin
pragma Assert
- (Is_Record_Type (Id) or else Is_Incomplete_Or_Private_Type (Id));
+ (Is_Concurrent_Type (Id)
+ or else Is_Incomplete_Or_Private_Type (Id)
+ or else Is_Record_Type (Id));
Comp_Id := First_Entity (Id);
while Present (Comp_Id) loop
@@ -6946,8 +6948,9 @@ package body Einfo is
begin
pragma Assert
- (Is_Record_Type (Id)
+ (Is_Concurrent_Type (Id)
or else Is_Incomplete_Or_Private_Type (Id)
+ or else Is_Record_Type (Id)
or else Has_Discriminants (Id));
Comp_Id := First_Entity (Id);
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index 22e42dd..21d700e 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -1286,14 +1286,15 @@ package Einfo is
-- objects.
-- First_Component (synthesized)
--- Applies to record types. Returns the first component by following the
--- chain of declared entities for the record until a component is found
--- (one with an Ekind of E_Component). The discriminants are skipped. If
--- the record is null, then Empty is returned.
+-- Applies to incomplete, private, protected, record and task types.
+-- Returns the first component by following the chain of declared
+-- entities for the type a component is found (one with an Ekind of
+-- E_Component). The discriminants are skipped. If the record is null,
+-- then Empty is returned.
-- First_Component_Or_Discriminant (synthesized)
--- Similar to First_Component, but discriminants are not skipped, so will
--- find the first discriminant if discriminants are present.
+-- Similar to First_Component, but discriminants are not skipped, so will
+-- find the first discriminant if discriminants are present.
-- First_Entity (Node17)
-- Defined in all entities which act as scopes to which a list of
@@ -6263,6 +6264,8 @@ package Einfo is
-- SPARK_Pragma_Inherited (Flag265)
-- Uses_Lock_Free (Flag188)
-- Uses_Sec_Stack (Flag95) ???
+ -- First_Component (synth)
+ -- First_Component_Or_Discriminant (synth)
-- Has_Entries (synth)
-- Has_Interrupt_Handler (synth)
-- Number_Entries (synth)
@@ -6410,6 +6413,8 @@ package Einfo is
-- SPARK_Aux_Pragma_Inherited (Flag266)
-- SPARK_Pragma_Inherited (Flag265)
-- Uses_Sec_Stack (Flag95) ???
+ -- First_Component (synth)
+ -- First_Component_Or_Discriminant (synth)
-- Has_Entries (synth)
-- Number_Entries (synth)
-- (plus type attributes)
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index 5b3dd75..dbefc05 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -3864,10 +3864,14 @@ package body Exp_Ch5 is
Set_Debug_Info_Needed (Id);
-- If the container does not have a variable indexing aspect,
- -- the element is a constant in the loop.
+ -- the element is a constant in the loop. The container itself
+ -- may be constant, in which case the element is a constant as
+ -- well. The container has been rewritten as a call to Iterate,
+ -- so examine original node.
if No (Find_Value_Of_Aspect
(Container_Typ, Aspect_Variable_Indexing))
+ or else not Is_Variable (Original_Node (Container))
then
Set_Ekind (Id, E_Constant);
end if;
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index cd0a392..3972ac3 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -3879,17 +3879,22 @@ package body Sem_Prag is
return;
end if;
- -- The pragma can only apply to the body [stub] of a subprogram
+ -- A refined pragma can only apply to the body [stub] of a subprogram
-- declared in the visible part of a package. Retrieve the context of
-- the subprogram declaration.
Spec_Decl := Unit_Declaration_Node (Spec_Id);
- -- The proper context of a entry declaration is the declaration of
- -- the enclosing synchronized type.
+ -- When dealing with protected entries or protected subprograms, use
+ -- the enclosing protected type as the proper context.
- if Nkind (Spec_Decl) = N_Entry_Declaration then
- Spec_Decl := Parent (Parent (Spec_Decl));
+ if Ekind_In (Spec_Id, E_Entry,
+ E_Entry_Family,
+ E_Function,
+ E_Procedure)
+ and then Ekind (Scope (Spec_Id)) = E_Protected_Type
+ then
+ Spec_Decl := Declaration_Node (Scope (Spec_Id));
end if;
if Nkind (Parent (Spec_Decl)) /= N_Package_Specification then
@@ -3908,10 +3913,7 @@ package body Sem_Prag is
Mark_Pragma_As_Ghost (N, Spec_Id);
- if Nam_In (Pname, Name_Refined_Depends,
- Name_Refined_Global,
- Name_Refined_State)
- then
+ if Nam_In (Pname, Name_Refined_Depends, Name_Refined_Global) then
Ensure_Aggregate_Form (Get_Argument (N, Spec_Id));
end if;
end Analyze_Refined_Depends_Global_Post;
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index 57067f4..3ecc33b 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -4465,11 +4465,11 @@ package body Sem_Res is
and then Is_Effectively_Volatile_Object (A)
then
-- An effectively volatile object may act as an actual when the
- -- corresponding formal is of a non-scalar volatile type
- -- (SPARK RM 7.1.3(12)).
+ -- corresponding formal is of a non-scalar effectively volatile
+ -- type (SPARK RM 7.1.3(12)).
- if Is_Volatile (Etype (F))
- and then not Is_Scalar_Type (Etype (F))
+ if not Is_Scalar_Type (Etype (F))
+ and then Is_Effectively_Volatile (Etype (F))
then
null;
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index 973cb7d..570ecf8 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -741,16 +741,16 @@ package Sem_Util is
-- alternatives, and the warnings that may apply to them, are removed.
function First_Actual (Node : Node_Id) return Node_Id;
- -- Node is an N_Function_Call or N_Procedure_Call_Statement node. The
- -- result returned is the first actual parameter in declaration order
- -- (not the order of parameters as they appeared in the source, which
- -- can be quite different as a result of the use of named parameters).
- -- Empty is returned for a call with no parameters. The procedure for
- -- iterating through the actuals in declaration order is to use this
- -- function to find the first actual, and then use Next_Actual to obtain
- -- the next actual in declaration order. Note that the value returned
- -- is always the expression (not the N_Parameter_Association nodes,
- -- even if named association is used).
+ -- Node is an N_Function_Call, N_Procedure_Call_Statement or
+ -- N_Entry_Call_Statement node. The result returned is the first actual
+ -- parameter in declaration order (not the order of parameters as they
+ -- appeared in the source, which can be quite different as a result of the
+ -- use of named parameters). Empty is returned for a call with no
+ -- parameters. The procedure for iterating through the actuals in
+ -- declaration order is to use this function to find the first actual, and
+ -- then use Next_Actual to obtain the next actual in declaration order.
+ -- Note that the value returned is always the expression (not the
+ -- N_Parameter_Association nodes, even if named association is used).
procedure Gather_Components
(Typ : Entity_Id;
diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads
index 8a3e51b..ab76d2c 100644
--- a/gcc/ada/sinfo.ads
+++ b/gcc/ada/sinfo.ads
@@ -3700,7 +3700,7 @@ package Sinfo is
-- node. See description of this node in the section on semantic nodes.
-- N_Selected_Component
- -- Sloc points to period
+ -- Sloc points to the period
-- Prefix (Node3)
-- Selector_Name (Node2)
-- Associated_Node (Node4-Sem)