[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 26 Oct 2015 11:55:18 +0000 (12:55 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 26 Oct 2015 11:55:18 +0000 (12:55 +0100)
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

gcc/ada/ChangeLog
gcc/ada/einfo.adb
gcc/ada/einfo.ads
gcc/ada/exp_ch5.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_res.adb
gcc/ada/sem_util.ads
gcc/ada/sinfo.ads

index 8b146ae655e7e2d0ccb2bb69478b6a7663e69076..8951f1105e7dc86cee025262cbde143bd50fe089 100644 (file)
@@ -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,
index d7d19ab5117516679796046c31a44b6fa50713ae..c8e6fcfe71986232e433bb74109c616a78db4e9e 100644 (file)
@@ -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);
index 22e42dd6de103f641faa3bc2ce9e9678c6d6a5a2..21d700e20372763fa30ffa2acae0f27c3a42d4f1 100644 (file)
@@ -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)
index 5b3dd7511a74933c9647299eb3c32a25c61af2dd..dbefc051d4787c163c4b572b83ab1b853e6f793b 100644 (file)
@@ -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;
index cd0a392c7fc5db9a4ca899aba9f7b4f55f91b3ec..3972ac35d6d5cc810a9d73216aec301de6dda21c 100644 (file)
@@ -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;
index 57067f49428ec18bd2d189ddaae1d1e1c8ec189f..3ecc33b9dc7044c2c4b5f5cb48b7fa040809aa17 100644 (file)
@@ -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;
 
index 973cb7df326f794d3a4883d3bc47eb18dfa7f875..570ecf80d3540af845734ff6c9e7fb2e4343360b 100644 (file)
@@ -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;
index 8a3e51b8366ae46eaf4a981699984e5f690e7867..ab76d2c80ab31019cd1ba59afd56ffe2f4a55464 100644 (file)
@@ -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)