[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 8 Sep 2017 10:08:25 +0000 (12:08 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 8 Sep 2017 10:08:25 +0000 (12:08 +0200)
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.

From-SVN: r251882

gcc/ada/ChangeLog
gcc/ada/exp_ch5.adb
gcc/ada/inline.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_elab.adb
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads

index 7b1b79738c4fa05d79362279141b95a5116c97c0..98e2678a13bd21d4e2e6a0d5fa941cd1011fec0a 100644 (file)
@@ -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):
index c3d00659fee5405b9390fad9cf7738c952b1aa3f..d8d22d02af961f160383402cec0e58e52e3bfbfb 100644 (file)
@@ -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;
 
    ------------------------------------------
index aa99201ec9f822f14568282776e695d4205417a2..7096f7c7431ab008e6ef3fa19f26d9e581a0c646 100644 (file)
@@ -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
 
index 9f1d824b4c5580f619b14f5ea85a487a4d042638..a1d8f8b8714d89eca5c9331c9ca232ea8f6c0285 100644 (file)
@@ -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;
index 6d920e49477a677c229b52d90ff4348aa9caab8d..7be57cfce97901d60292ddc830fbf5b85177b190 100644 (file)
@@ -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;
 
index a399be05f17f4567e6c9da66d73c13c4370b1f7a..a153e9a04dff62b21c68a527397c887643ed5135 100644 (file)
@@ -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 --
    ----------------------------
index 2d6de5cad41919217cc8370de31259023fd23886..d0c3a26e553fa3e41edbc5ac0c2f65dabd764eff 100644 (file)
@@ -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