[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 6 Sep 2017 12:27:15 +0000 (14:27 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 6 Sep 2017 12:27:15 +0000 (14:27 +0200)
2017-09-06  Ed Schonberg  <schonberg@adacore.com>

* sem_prag.adb (Check_Postcondition_Use_In_Inlined_Subprogram):
Do not warn on conditions that are not obeyed for Inline_Always
subprograms, when assertions are not enabled.

2017-09-06  Arnaud Charlet  <charlet@adacore.com>

* sem_util.adb (Unique_Entity): For abstract states return their
non-limited view.

2017-09-06  Bob Duff  <duff@adacore.com>

* sem_ch12.adb (Copy_Generic_Node): When we copy a node
that is a proper body corresponding to a stub, we defer the
adjustment of the sloc until after the correct adjustment has
been computed. Otherwise, Adjust_Instantiation_Sloc will ignore
the adjustment, because it will be outside the range in (the old,
incorrect) S_Adjustment.
* inline.adb: Use named notation for readability and uniformity.
* sinput-l.adb: Minor improvements to debugging output printed
for Debug_Flag_L.
* sinput-l.ads (Create_Instantiation_Source): Minor comment
correction.

2017-09-06  Vincent Celier  <celier@adacore.com>

* make.adb: Do not invoke gprbuild for -bargs -P.

2017-09-06  Sylvain Dailler  <dailler@adacore.com>

* sem_eval.adb (Compile_Time_Known_Value_Or_Aggr): Adding a
case when Op is of kind N_Qualified_Expression. In this case,
the function is called recursively on the subexpression like in
other cases.
* make.adb: Minor reformatting

2017-09-06  Justin Squirek  <squirek@adacore.com>

* einfo.adb (Set_Linker_Section_Pragma): Modify
Set_Linker_Section_Pragma to be consistant with the "getter"
Linker_Section_Pragma.
* exp_ch5.adb (Expand_Formal_Container_Loop): Add proper error
checking for container loops so that the index cursor is not
directly changable by the user with the use of E_Loop_Parameter.
* sem_ch5.adb (Analyze_Block_Statement): Revert previous change.
* sem_warn.adb (Check_References): Revert previous change.

From-SVN: r251789

17 files changed:
gcc/ada/ChangeLog
gcc/ada/clean.adb
gcc/ada/einfo.adb
gcc/ada/einfo.ads
gcc/ada/exp_ch5.adb
gcc/ada/freeze.adb
gcc/ada/inline.adb
gcc/ada/make.adb
gcc/ada/sem_ch12.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch5.adb
gcc/ada/sem_eval.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_util.adb
gcc/ada/sem_warn.adb
gcc/ada/sinput-l.adb
gcc/ada/sinput-l.ads

index 385c663d6013aee171e9b9baf5bd4b85ab11060e..86f78c64cf8eed08ce8e867dd672dff4e96e150f 100644 (file)
@@ -1,3 +1,51 @@
+2017-09-06  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_prag.adb (Check_Postcondition_Use_In_Inlined_Subprogram):
+       Do not warn on conditions that are not obeyed for Inline_Always
+       subprograms, when assertions are not enabled.
+
+2017-09-06  Arnaud Charlet  <charlet@adacore.com>
+
+       * sem_util.adb (Unique_Entity): For abstract states return their
+       non-limited view.
+
+2017-09-06  Bob Duff  <duff@adacore.com>
+
+       * sem_ch12.adb (Copy_Generic_Node): When we copy a node
+       that is a proper body corresponding to a stub, we defer the
+       adjustment of the sloc until after the correct adjustment has
+       been computed. Otherwise, Adjust_Instantiation_Sloc will ignore
+       the adjustment, because it will be outside the range in (the old,
+       incorrect) S_Adjustment.
+       * inline.adb: Use named notation for readability and uniformity.
+       * sinput-l.adb: Minor improvements to debugging output printed
+       for Debug_Flag_L.
+       * sinput-l.ads (Create_Instantiation_Source): Minor comment
+       correction.
+
+2017-09-06  Vincent Celier  <celier@adacore.com>
+
+       * make.adb: Do not invoke gprbuild for -bargs -P.
+
+2017-09-06  Sylvain Dailler  <dailler@adacore.com>
+
+       * sem_eval.adb (Compile_Time_Known_Value_Or_Aggr): Adding a
+       case when Op is of kind N_Qualified_Expression. In this case,
+       the function is called recursively on the subexpression like in
+       other cases.
+       * make.adb: Minor reformatting
+
+2017-09-06  Justin Squirek  <squirek@adacore.com>
+
+       * einfo.adb (Set_Linker_Section_Pragma): Modify
+       Set_Linker_Section_Pragma to be consistant with the "getter"
+       Linker_Section_Pragma.
+       * exp_ch5.adb (Expand_Formal_Container_Loop): Add proper error
+       checking for container loops so that the index cursor is not
+       directly changable by the user with the use of E_Loop_Parameter.
+       * sem_ch5.adb (Analyze_Block_Statement): Revert previous change.
+       * sem_warn.adb (Check_References): Revert previous change.
+
 2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>
 
         * gcc-interface/trans.c (gnat_to_gnu) <N_Selected_Component>: Try
index 51793b07596eabcd9ee121b4a67ecd114ba249a0..2f473e2d387fea629704ecaf34514b2510b01c57 100644 (file)
@@ -30,7 +30,6 @@ with Namet;     use Namet;
 with Opt;       use Opt;
 with Osint;     use Osint;
 with Osint.M;   use Osint.M;
---  with Sdefault;
 with Snames;
 with Stringt;
 with Switch;   use Switch;
@@ -48,8 +47,8 @@ with GNAT.OS_Lib;               use GNAT.OS_Lib;
 package body Clean is
 
    Initialized : Boolean := False;
-   --  Set to True by the first call to Initialize to avoid reinitialization
-   --  of some packages.
+   --  Set to True by the first call to Initialize to avoid reinitialization of
+   --  some packages.
 
    --  Suffixes of various files
 
index b7782a9ab9a3dfdae4f0751fa062434403bd7f56..4ad9466404fd81c0f384a050f6f212fba898fc65 100644 (file)
@@ -2756,7 +2756,7 @@ package body Einfo is
    function Linker_Section_Pragma (Id : E) return N is
    begin
       pragma Assert
-        (Is_Type (Id) or else Is_Object (Id) or else Is_Subprogram (Id));
+        (Is_Object (Id) or else Is_Subprogram (Id) or else Is_Type (Id));
       return Node33 (Id);
    end Linker_Section_Pragma;
 
@@ -5918,9 +5918,8 @@ package body Einfo is
 
    procedure Set_Linker_Section_Pragma (Id : E; V : N) is
    begin
-      pragma Assert (Is_Type (Id)
-        or else Ekind_In (Id, E_Constant, E_Variable)
-        or else Is_Subprogram (Id));
+      pragma Assert
+        (Is_Object (Id) or else Is_Subprogram (Id) or else Is_Type (Id));
       Set_Node33 (Id, V);
    end Set_Linker_Section_Pragma;
 
@@ -7368,6 +7367,39 @@ package body Einfo is
       return Empty;
    end Get_Attribute_Definition_Clause;
 
+   ---------------------------
+   -- Get_Class_Wide_Pragma --
+   ---------------------------
+
+   function Get_Class_Wide_Pragma
+     (E  : Entity_Id;
+      Id : Pragma_Id) return Node_Id
+    is
+      Item  : Node_Id;
+      Items : Node_Id;
+
+   begin
+      Items := Contract (E);
+
+      if No (Items) then
+         return Empty;
+      end if;
+
+      Item := Pre_Post_Conditions (Items);
+      while Present (Item) loop
+         if Nkind (Item) = N_Pragma
+           and then Get_Pragma_Id (Pragma_Name_Unmapped (Item)) = Id
+           and then Class_Present (Item)
+         then
+            return Item;
+         end if;
+
+         Item := Next_Pragma (Item);
+      end loop;
+
+      return Empty;
+   end Get_Class_Wide_Pragma;
+
    -------------------
    -- Get_Full_View --
    -------------------
@@ -7481,39 +7513,6 @@ package body Einfo is
       return Empty;
    end Get_Pragma;
 
-   --------------------------
-   -- Get_Classwide_Pragma --
-   --------------------------
-
-   function Get_Classwide_Pragma
-     (E  : Entity_Id;
-      Id : Pragma_Id) return Node_Id
-    is
-      Item  : Node_Id;
-      Items : Node_Id;
-
-   begin
-      Items := Contract (E);
-      if No (Items) then
-         return Empty;
-      end if;
-
-      Item := Pre_Post_Conditions (Items);
-
-      while Present (Item) loop
-         if Nkind (Item) = N_Pragma
-           and then Get_Pragma_Id (Pragma_Name_Unmapped (Item)) = Id
-           and then Class_Present (Item)
-         then
-            return Item;
-         else
-            Item := Next_Pragma (Item);
-         end if;
-      end loop;
-
-      return Empty;
-   end Get_Classwide_Pragma;
-
    --------------------------------------
    -- Get_Record_Representation_Clause --
    --------------------------------------
index f14b22f826b55fddf88d1d873087fb92e86ec665..2fcdac70e304159e5b8c4977d39efdd827080fd6 100644 (file)
@@ -8295,11 +8295,11 @@ package Einfo is
    --    Test_Case
    --    Volatile_Function
 
-   function Get_Classwide_Pragma
+   function Get_Class_Wide_Pragma
      (E  : Entity_Id;
       Id : Pragma_Id) return Node_Id;
-   --  Examine Rep_Item chain to locate a classwide pre- or postcondition
-   --  of a primitive operation. Returns Empty if not present.
+   --  Examine Rep_Item chain to locate a classwide pre- or postcondition of a
+   --  primitive operation. Returns Empty if not present.
 
    function Get_Record_Representation_Clause (E : Entity_Id) return Node_Id;
    --  Searches the Rep_Item chain for a given entity E, for a record
index 981137d43096c2251648bb6c1da08af5c464f3bc..14249f0d278534ef4d5ced33b417e1d624456dc7 100644 (file)
@@ -211,7 +211,8 @@ package body Exp_Ch5 is
             Make_Iteration_Scheme (Loc,
               Condition =>
                 Make_Function_Call (Loc,
-                  Name => New_Occurrence_Of (Has_Element_Op, Loc),
+                  Name                   =>
+                    New_Occurrence_Of (Has_Element_Op, Loc),
                   Parameter_Associations => New_List (
                     New_Occurrence_Of (Container, Loc),
                     New_Occurrence_Of (Cursor, Loc)))),
@@ -3081,15 +3082,15 @@ package body Exp_Ch5 is
       Container : constant Node_Id    := Entity (Name (I_Spec));
       Stats     : constant List_Id    := Statements (N);
 
-      Advance  : Node_Id;
-      Blk_Nod  : Node_Id;
-      Init     : Node_Id;
-      New_Loop : Node_Id;
+      Advance   : Node_Id;
+      Init_Decl : Node_Id;
+      New_Loop  : Node_Id;
 
    begin
-      --  The expansion resembles the one for Ada containers, but the
-      --  primitives mention the domain of iteration explicitly, and
-      --  function First applied to the container yields a cursor directly.
+      --  The expansion of a formal container loop resembles the one for Ada
+      --  containers. The only difference is that the primitives mention the
+      --  domain of iteration explicitly, and function First applied to the
+      --  container yields a cursor directly.
 
       --    Cursor : Cursor_type := First (Container);
       --    while Has_Element (Cursor, Container) loop
@@ -3098,21 +3099,34 @@ package body Exp_Ch5 is
       --    end loop;
 
       Build_Formal_Container_Iteration
-        (N, Container, Cursor, Init, Advance, New_Loop);
+        (N, Container, Cursor, Init_Decl, Advance, New_Loop);
 
-      Set_Ekind (Cursor, E_Variable);
       Append_To (Stats, Advance);
 
-      --  Build block to capture declaration of cursor entity.
+      --  Build a block to capture declaration of the cursor
 
-      Blk_Nod :=
+      Rewrite (N,
         Make_Block_Statement (Loc,
-          Declarations               => New_List (Init),
+          Declarations               => New_List (Init_Decl),
           Handled_Statement_Sequence =>
             Make_Handled_Sequence_Of_Statements (Loc,
-              Statements => New_List (New_Loop)));
+              Statements => New_List (New_Loop))));
+
+      --  The loop parameter is declared by an object declaration, but within
+      --  the loop we must prevent user assignments to it, so we analyze the
+      --  declaration and reset the entity kind, before analyzing the rest of
+      --  the loop.
+
+      Analyze (Init_Decl);
+      Set_Ekind (Defining_Identifier (Init_Decl), E_Loop_Parameter);
+
+      --  The cursor was marked as a loop parameter to prevent user assignments
+      --  to it, however this renders the advancement step illegal as it is not
+      --  possible to change the value of a constant. Flag the advancement step
+      --  as a legal form of assignment to remedy this side effect.
+
+      Set_Assignment_OK (Name (Advance));
 
-      Rewrite (N, Blk_Nod);
       Analyze (N);
    end Expand_Formal_Container_Loop;
 
@@ -3236,7 +3250,7 @@ package body Exp_Ch5 is
       --  The loop parameter is declared by an object declaration, but within
       --  the loop we must prevent user assignments to it, so we analyze the
       --  declaration and reset the entity kind, before analyzing the rest of
-      --  the loop;
+      --  the loop.
 
       Analyze (Elmt_Decl);
       Set_Ekind (Defining_Identifier (Elmt_Decl), E_Loop_Parameter);
index bf76970c0d9403f28f97e83e97109a37d77f872b..619c921b76c8b9b09599fbd88c06c1d1e02671ed 100644 (file)
@@ -1418,7 +1418,8 @@ package body Freeze is
          New_Prag : Node_Id;
 
       begin
-         A_Pre := Get_Classwide_Pragma (Par_Prim, Pragma_Precondition);
+         A_Pre := Get_Class_Wide_Pragma (Par_Prim, Pragma_Precondition);
+
          if Present (A_Pre) then
             New_Prag := New_Copy_Tree (A_Pre);
             Build_Class_Wide_Expression
@@ -1436,7 +1437,7 @@ package body Freeze is
             end if;
          end if;
 
-         A_Post := Get_Classwide_Pragma (Par_Prim, Pragma_Postcondition);
+         A_Post := Get_Class_Wide_Pragma (Par_Prim, Pragma_Postcondition);
 
          if Present (A_Post) then
             New_Prag := New_Copy_Tree (A_Post);
index 70d1f84866a4f968cfb97328b9bacdba35fdb4c8..bc0428e3551eb5184f40091a5626717827c1b0ec 100644 (file)
@@ -1058,7 +1058,7 @@ package body Inline is
 
       if In_Instance and then Scope (Current_Scope) /= Standard_Standard then
          Save_Env (Scope (Current_Scope), Scope (Current_Scope));
-         Original_Body := Copy_Generic_Node (N, Empty, True);
+         Original_Body := Copy_Generic_Node (N, Empty, Instantiating => True);
       else
          Original_Body := Copy_Separate_Tree (N);
       end if;
@@ -1081,7 +1081,8 @@ package body Inline is
 
       Remove_Aspects_And_Pragmas (Original_Body);
 
-      Body_To_Analyze := Copy_Generic_Node (Original_Body, Empty, False);
+      Body_To_Analyze :=
+        Copy_Generic_Node (Original_Body, Empty, Instantiating => False);
 
       --  Set return type of function, which is also global and does not need
       --  to be resolved.
@@ -1635,7 +1636,8 @@ package body Inline is
             if In_Instance
               and then Scope (Current_Scope) /= Standard_Standard
             then
-               Body_To_Inline := Copy_Generic_Node (N, Empty, True);
+               Body_To_Inline :=
+                 Copy_Generic_Node (N, Empty, Instantiating => True);
             else
                Body_To_Inline := Copy_Separate_Tree (N);
             end if;
@@ -1688,7 +1690,8 @@ package body Inline is
          --  parameterless subprogram, declared within the real one.
 
          Generate_Subprogram_Body (N, Original_Body);
-         Body_To_Analyze := Copy_Generic_Node (Original_Body, Empty, False);
+         Body_To_Analyze :=
+           Copy_Generic_Node (Original_Body, Empty, Instantiating => False);
 
          --  Set return type of function, which is also global and does not
          --  need to be resolved.
index ae17868f57e671e4c170b1cc4cc3bd49006a3c55..cbd110dc8f0e2df09546b4c74a07057ac59df762 100644 (file)
@@ -3746,6 +3746,10 @@ package body Make is
          Success       : Boolean;
          Target        : String_Access := null;
 
+         In_Gnatmake_Switches : Boolean := True;
+         --  Set to False after -cargs, -bargs, or -largs, to avoid detecting
+         --  -P switches that are not for gnatmake.
+
       begin
          Find_Program_Name;
 
@@ -3761,7 +3765,14 @@ package body Make is
                declare
                   Arg : constant String := Argument (J);
                begin
-                  if Arg'Length >= 2
+                  if Arg = "-cargs" or Arg = "-bargs" or Arg = "-largs" then
+                     In_Gnatmake_Switches := False;
+
+                  elsif Arg = "-margs" then
+                     In_Gnatmake_Switches := True;
+
+                  elsif In_Gnatmake_Switches
+                    and then Arg'Length >= 2
                     and then Arg (Arg'First .. Arg'First + 1) = "-P"
                   then
                      Call_Gprbuild := True;
index f0f102e419be8c232ad77d40e00871d3a1a53215..3635319884b8def8eb69eb94f90ae7bcb9bb4a18 100644 (file)
@@ -1895,25 +1895,28 @@ package body Sem_Ch12 is
                          (Formal, Match, Analyzed_Formal),
                         Assoc_List);
 
-                     --  Determine whether the actual package needs an
-                     --  explicit freeze node. This is only the case if
-                     --  the actual is declared in the same unit and has
-                     --  a body. Normally packages do not have explicit
-                     --  freeze nodes, and gigi only uses them to elaborate
-                     --  entities in a package body.
+                     --  Determine whether the actual package needs an explicit
+                     --  freeze node. This is only the case if the actual is
+                     --  declared in the same unit and has a body. Normally
+                     --  packages do not have explicit freeze nodes, and gigi
+                     --  only uses them to elaborate entities in a package
+                     --  body.
 
                      declare
                         Actual : constant Entity_Id := Entity (Match);
+
                         Needs_Freezing : Boolean;
-                        S : Entity_Id;
+                        S              : Entity_Id;
 
                      begin
                         if not Expander_Active
                           or else not Has_Completion (Actual)
                           or else not In_Same_Source_Unit (I_Node, Actual)
-                          or else (Present (Renamed_Entity (Actual))
-                           and then not In_Same_Source_Unit (I_Node,
-                             (Renamed_Entity (Actual))))
+                          or else
+                            (Present (Renamed_Entity (Actual))
+                              and then not
+                                In_Same_Source_Unit
+                                  (I_Node, (Renamed_Entity (Actual))))
                         then
                            null;
 
@@ -1921,17 +1924,21 @@ package body Sem_Ch12 is
                            --  Finally we want to exclude such freeze nodes
                            --  from statement sequences, which freeze
                            --  everything before them.
-                           --  Is this strictly necesssary ???
+                           --  Is this strictly necessary ???
 
                            Needs_Freezing := True;
+
                            S := Current_Scope;
                            while Present (S) loop
-                              if Ekind_In
-                                (S, E_Loop, E_Block, E_Procedure, E_Function)
+                              if Ekind_In (S, E_Block,
+                                              E_Function,
+                                              E_Loop,
+                                              E_Procedure)
                               then
                                  Needs_Freezing := False;
                                  exit;
                               end if;
+
                               S := Scope (S);
                            end loop;
 
@@ -2648,7 +2655,9 @@ package body Sem_Ch12 is
                    (Generic_Formal_Declarations (Original_Node (Gen_Decl)));
                while Present (Formal_Decl) loop
                   Append_To
-                    (Decls, Copy_Generic_Node (Formal_Decl, Empty, True));
+                    (Decls,
+                     Copy_Generic_Node
+                       (Formal_Decl, Empty, Instantiating => True));
                   Next (Formal_Decl);
                end loop;
             end;
@@ -5586,7 +5595,7 @@ package body Sem_Ch12 is
             Assoc := Associated_Node (Assoc);
          end loop;
 
-         --  Follow and additional link in case the final node was rewritten.
+         --  Follow an additional link in case the final node was rewritten.
          --  This can only happen with nested generic units.
 
          if (Nkind (Assoc) = N_Identifier or else Nkind (Assoc) in N_Op)
@@ -5603,7 +5612,7 @@ package body Sem_Ch12 is
          --  An additional special case: an unconstrained type in an object
          --  declaration may have been rewritten as a local subtype constrained
          --  by the expression in the declaration. We need to recover the
-         --  original entity which may be global.
+         --  original entity, which may be global.
 
          if Present (Original_Node (Assoc))
            and then Nkind (Parent (N)) = N_Object_Declaration
@@ -7450,7 +7459,16 @@ package body Sem_Ch12 is
            (New_N, Copy_Generic_List (Aspect_Specifications (N), Parent_Id));
       end if;
 
-      if Instantiating then
+      --  If we are instantiating, we want to adjust the sloc based on the
+      --  current S_Adjustment. However, if this is the root node of a subunit,
+      --  we need to defer that adjustment to below (see "elsif Instantiating
+      --  and Was_Stub"), so it comes after Create_Instantiation_Source has
+      --  computed the adjustment.
+
+      if Instantiating
+        and then not (Nkind (N) in N_Proper_Body
+                       and then Was_Originally_Stub (N))
+      then
          Adjust_Instantiation_Sloc (New_N, S_Adjustment);
       end if;
 
@@ -7594,18 +7612,16 @@ package body Sem_Ch12 is
             Set_Selector_Name (New_N,
               Copy_Generic_Node (Selector_Name (N), New_N, Instantiating));
 
-         --  For operators, we must copy the right operand
+         --  For operators, copy the operands
 
          elsif Nkind (N) in N_Op then
-            Set_Right_Opnd (New_N,
-              Copy_Generic_Node (Right_Opnd (N), New_N, Instantiating));
-
-            --  And for binary operators, the left operand as well
-
             if Nkind (N) in N_Binary_Op then
                Set_Left_Opnd (New_N,
                  Copy_Generic_Node (Left_Opnd (N), New_N, Instantiating));
             end if;
+
+            Set_Right_Opnd (New_N,
+              Copy_Generic_Node (Right_Opnd (N), New_N, Instantiating));
          end if;
 
       --  Establish a link between an entity from the generic template and the
@@ -7751,14 +7767,16 @@ package body Sem_Ch12 is
            Copy_Generic_List (Context_Items (N), New_N));
 
          Set_Unit (New_N,
-           Copy_Generic_Node (Unit (N), New_N, False));
+           Copy_Generic_Node (Unit (N), New_N, Instantiating => False));
 
          Set_First_Inlined_Subprogram (New_N,
            Copy_Generic_Node
-             (First_Inlined_Subprogram (N), New_N, False));
+             (First_Inlined_Subprogram (N), New_N, Instantiating => False));
 
-         Set_Aux_Decls_Node (New_N,
-           Copy_Generic_Node (Aux_Decls_Node (N), New_N, False));
+         Set_Aux_Decls_Node
+           (New_N,
+            Copy_Generic_Node
+              (Aux_Decls_Node (N), New_N, Instantiating => False));
 
       --  For an assignment node, the assignment is known to be semantically
       --  legal if we are instantiating the template. This avoids incorrect
@@ -7873,13 +7891,14 @@ package body Sem_Ch12 is
       elsif Nkind (N) in N_Proper_Body then
          declare
             Save_Adjustment : constant Sloc_Adjustment := S_Adjustment;
-
          begin
             if Instantiating and then Was_Originally_Stub (N) then
                Create_Instantiation_Source
                  (Instantiation_Node,
                   Defining_Entity (N),
                   S_Adjustment);
+
+               Adjust_Instantiation_Sloc (New_N, S_Adjustment);
             end if;
 
             --  Now copy the fields of the proper body, using the new
@@ -7887,7 +7906,7 @@ package body Sem_Ch12 is
 
             Copy_Descendants;
 
-            --  Restore the original adjustment factor in case changed
+            --  Restore the original adjustment factor
 
             S_Adjustment := Save_Adjustment;
          end;
index 0ec2e84638694cbf59233d4e72caa05b917e960a..bda8fae37c60264eca053eb62484b1aa89560122 100644 (file)
@@ -5718,7 +5718,7 @@ package body Sem_Ch3 is
       then
          declare
             Partial : constant Entity_Id :=
-              Incomplete_Or_Partial_View (First_Subtype (Id));
+                        Incomplete_Or_Partial_View (First_Subtype (Id));
          begin
             if Present (Partial)
               and then Ekind (Partial) = E_Incomplete_Type
index 35f5e7c9fe0a0dc649832cee3aa31715b6caae7e..12ca7a0c2917e726ba128118d8b82d14225cbcf7 100644 (file)
@@ -1111,10 +1111,7 @@ package body Sem_Ch5 is
             end loop;
          end if;
 
-         if Comes_From_Source (Ent) then
-            Check_References (Ent);
-         end if;
-
+         Check_References (Ent);
          End_Scope;
 
          if Unblocked_Exit_Count = 0 then
@@ -1905,8 +1902,8 @@ package body Sem_Ch5 is
 
       Preanalyze_Range (Iter_Name);
 
-      --  Set the kind of the loop variable, which is not visible within
-      --  the iterator name.
+      --  Set the kind of the loop variable, which is not visible within the
+      --  iterator name.
 
       Set_Ekind (Def_Id, E_Variable);
 
index 5a40ed97630b6eaa5b39f11d4a82545427ff7e8f..41713307cd659137434f217c34cd2ab020c3e1e9 100644 (file)
@@ -1828,6 +1828,9 @@ package body Sem_Eval is
 
             return True;
 
+         elsif Nkind (Op) = N_Qualified_Expression then
+            return Compile_Time_Known_Value_Or_Aggr (Expression (Op));
+
          --  All other types of values are not known at compile time
 
          else
index f696655d65167aba54311ae77d7aed168f0f9026..91bcf944a0e0254e2d45f55878b529b1523162b9 100644 (file)
@@ -197,8 +197,9 @@ package body Sem_Prag is
      (Prag    : Node_Id;
       Spec_Id : Entity_Id);
    --  Subsidiary to the analysis of pragmas Contract_Cases, Postcondition,
-   --  Precondition, Refined_Post and Test_Case. Emit a warning when pragma
-   --  Prag is associated with subprogram Spec_Id subject to Inline_Always.
+   --  Precondition, Refined_Post, and Test_Case. Emit a warning when pragma
+   --  Prag is associated with subprogram Spec_Id subject to Inline_Always,
+   --  and assertions are enabled.
 
    procedure Check_State_And_Constituent_Use
      (States   : Elist_Id;
@@ -27996,6 +27997,7 @@ package body Sem_Prag is
    begin
       if Warn_On_Redundant_Constructs
         and then Has_Pragma_Inline_Always (Spec_Id)
+        and then Assertions_Enabled
       then
          Error_Msg_Name_1 := Original_Aspect_Pragma_Name (Prag);
 
index d20cafbe63b799878a50589f70818583139ad300..237d410be828f9723a89f866923f16e6f7f3a920 100644 (file)
@@ -22116,7 +22116,7 @@ package body Sem_Util is
                      Prot_Type := Scope (E);
 
                   --  Bodies of entry families are nested within an extra scope
-                  --  that contains an entry index declaration
+                  --  that contains an entry index declaration.
 
                   else
                      Prot_Type := Scope (Scope (E));
index cfc3f1312c94a179867602e4b65f2cb43242f410..c8136b0d7fc6b07dd032fb03d69569bf4f4e28d5 100644 (file)
@@ -1670,17 +1670,17 @@ package body Sem_Warn is
             end if;
          end if;
 
-         --  Recurse into a nested package or non-internal block, but do not
-         --  recurse into a formal package because the corresponding body is
-         --  not analyzed.
+         --  Recurse into nested package or block. Do not recurse into a formal
+         --  package, because the corresponding body is not analyzed.
 
          <<Continue>>
             if (Is_Package_Or_Generic_Package (E1)
                  and then Nkind (Parent (E1)) = N_Package_Specification
                  and then
                    Nkind (Original_Node (Unit_Declaration_Node (E1))) /=
-                                          N_Formal_Package_Declaration)
-              or else (Ekind (E1) = E_Block and then not Is_Internal (E1))
+                                                N_Formal_Package_Declaration)
+
+              or else Ekind (E1) = E_Block
             then
                Check_References (E1);
             end if;
index a64283ec42ecbfa4293e8a5af2e9de4efbbb04e0..d7e337b35a27940c1b190b99f0030456c8f8915c 100644 (file)
@@ -103,7 +103,7 @@ package body Sinput.L is
       --  case, but in practice there seem to be some nodes that get copied
       --  twice, and this is a defence against that happening.
 
-      if Factor.Lo <= Loc and then Loc <= Factor.Hi then
+      if Loc in Factor.Lo .. Factor.Hi then
          Set_Sloc (N, Loc + Factor.Adjust);
       end if;
    end Adjust_Instantiation_Sloc;
@@ -143,7 +143,8 @@ package body Sinput.L is
       Xnew := Source_File.Last;
 
       if Debug_Flag_L then
-         Write_Str ("Create_Instantiation_Source: created source ");
+         Write_Eol;
+         Write_Str ("*** Create_Instantiation_Source: created source ");
          Write_Int (Int (Xnew));
          Write_Line ("");
       end if;
@@ -250,8 +251,7 @@ package body Sinput.L is
          end;
 
          if Debug_Flag_L then
-            Write_Eol;
-            Write_Str ("*** Create instantiation source for ");
+            Write_Str ("  for ");
 
             if Nkind (Dnod) in N_Proper_Body
               and then Was_Originally_Stub (Dnod)
@@ -291,10 +291,6 @@ package body Sinput.L is
             Write_Name (Chars (Template_Id));
             Write_Eol;
 
-            Write_Str ("  new source index = ");
-            Write_Int (Int (Xnew));
-            Write_Eol;
-
             Write_Str ("  copying from file name = ");
             Write_Name (File_Name (Xold));
             Write_Eol;
@@ -401,11 +397,11 @@ package body Sinput.L is
       X := Source_File.Last;
 
       if Debug_Flag_L then
+         Write_Eol;
          Write_Str ("Sinput.L.Load_File: created source ");
          Write_Int (Int (X));
          Write_Str (" for ");
          Write_Str (Get_Name_String (N));
-         Write_Line ("");
       end if;
 
       --  Compute starting index, respecting alignment requirement
index f3af4c90b50dd34dfd9a0400ea21632c0888caa3..f4a3ccfaadf59e42f447e460bc06982548da4648 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2016, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2017, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -100,13 +100,16 @@ package Sinput.L is
    --  Inst_Node is the instantiation node, and Template_Id is the defining
    --  identifier of the generic declaration or body unit as appropriate.
    --  Factor is set to an adjustment factor to be used in subsequent calls to
-   --  Adjust_Instantiation_Sloc. The instantiation mechanism is also used for
-   --  inlined function and procedure calls. The parameter Inlined_Body is set
-   --  to True in such cases. This is used for generating error messages that
-   --  distinguish these two cases, otherwise the two cases are handled
-   --  identically. Similarly, the instantiation mechanism is also used for
-   --  inherited class-wide pre- and postconditions. Parameter Inherited_Pragma
-   --  is set to True in such cases.
+   --  Adjust_Instantiation_Sloc. Template_Id can also be a subunit body that
+   --  replaces a stub in a generic unit.
+   --
+   --  The instantiation mechanism is also used for inlined function and
+   --  procedure calls. The parameter Inlined_Body is set to True in such
+   --  cases. This is used for generating error messages that distinguish these
+   --  two cases, otherwise the two cases are handled identically. Similarly,
+   --  the instantiation mechanism is also used for inherited class-wide pre-
+   --  and postconditions. Parameter Inherited_Pragma is set to True in such
+   --  cases.
 
 private