[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 23 Jan 2017 13:24:47 +0000 (14:24 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 23 Jan 2017 13:24:47 +0000 (14:24 +0100)
2017-01-23  Gary Dismukes  <dismukes@adacore.com>

* exp_strm.ads: Minor reformatting and typo fixes.

2017-01-23  Hristian Kirtchev  <kirtchev@adacore.com>

* sem_aggr.adb, par_sco.adb, exp_util.adb, sem.adb, sem_ch4.adb,
exp_aggr.adb: Minor reformatting.
* g-diopit.adb: minor grammar/punctuation fix in comment.
* g-byorma.ads: minor fix of unbalanced parens in comment.

2017-01-23  Hristian Kirtchev  <kirtchev@adacore.com>

* par.adb: Update the documentation of component Labl.
* par-ch6.adb (P_Return_Statement): Set the expected label of
an extended return statement to Error.

2017-01-23  Tristan Gingold  <gingold@adacore.com>

* s-boustr.ads, s-boustr.adb (Is_Full): New function.

2017-01-23  Ed Schonberg  <schonberg@adacore.com>

* expander.adb: Handle N_Delta_Aggregate.

2017-01-23  Javier Miranda  <miranda@adacore.com>

* exp_ch6.adb (Expand_Call): Improve the code that
checks if some formal of the called subprogram is a class-wide
interface, to handle subtypes of class-wide interfaces.

2017-01-23  Javier Miranda  <miranda@adacore.com>

* checks.adb (Apply_Parameter_Aliasing_Checks):
Remove side effects of the actuals before generating the overlap
check.

From-SVN: r244806

20 files changed:
gcc/ada/ChangeLog
gcc/ada/checks.adb
gcc/ada/exp_aggr.adb
gcc/ada/exp_ch6.adb
gcc/ada/exp_strm.ads
gcc/ada/exp_util.adb
gcc/ada/expander.adb
gcc/ada/g-byorma.ads
gcc/ada/g-diopit.adb
gcc/ada/par-ch3.adb
gcc/ada/par-ch6.adb
gcc/ada/par.adb
gcc/ada/par_sco.adb
gcc/ada/s-boustr.adb
gcc/ada/s-boustr.ads
gcc/ada/s-osinte-linux.ads
gcc/ada/s-taprop-linux.adb
gcc/ada/sem.adb
gcc/ada/sem_aggr.adb
gcc/ada/sem_ch4.adb

index 431885486a075c8e3d9e75bb8fa292b7b72fe2a1..2ab1f234c5523dd435278f41d733b3c983218861 100644 (file)
@@ -1,3 +1,40 @@
+2017-01-23  Gary Dismukes  <dismukes@adacore.com>
+
+       * exp_strm.ads: Minor reformatting and typo fixes.
+
+2017-01-23  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * sem_aggr.adb, par_sco.adb, exp_util.adb, sem.adb, sem_ch4.adb,
+       exp_aggr.adb: Minor reformatting.
+       * g-diopit.adb: minor grammar/punctuation fix in comment.
+       * g-byorma.ads: minor fix of unbalanced parens in comment.
+
+2017-01-23  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * par.adb: Update the documentation of component Labl.
+       * par-ch6.adb (P_Return_Statement): Set the expected label of
+       an extended return statement to Error.
+
+2017-01-23  Tristan Gingold  <gingold@adacore.com>
+
+       * s-boustr.ads, s-boustr.adb (Is_Full): New function.
+
+2017-01-23  Ed Schonberg  <schonberg@adacore.com>
+
+       * expander.adb: Handle N_Delta_Aggregate.
+
+2017-01-23  Javier Miranda  <miranda@adacore.com>
+
+       * exp_ch6.adb (Expand_Call): Improve the code that
+       checks if some formal of the called subprogram is a class-wide
+       interface, to handle subtypes of class-wide interfaces.
+
+2017-01-23  Javier Miranda  <miranda@adacore.com>
+
+       * checks.adb (Apply_Parameter_Aliasing_Checks):
+       Remove side effects of the actuals before generating the overlap
+       check.
+
 2017-01-23  Justin Squirek  <squirek@adacore.com>
 
        * exp_strm.ads, exp_strm.ads
index 011878eb046d9ad5b5951154bf72c0d14a8337b8..f0ba9a8ad9e41bab0cd7f067f819e8c228377ab4 100644 (file)
@@ -2360,6 +2360,9 @@ package body Checks is
                  and then not Is_Elementary_Type (Etype (Orig_Act_2))
                  and then May_Cause_Aliasing (Formal_1, Formal_2)
                then
+                  Remove_Side_Effects (Actual_1);
+                  Remove_Side_Effects (Actual_2);
+
                   Overlap_Check
                     (Actual_1 => Actual_1,
                      Actual_2 => Actual_2,
index a41bfa08aeda8fa80dbc2f7ed10b2b66b0fbe14e..6a0b0d53244f81bd89ff9cb03ec58cdc74232a56 100644 (file)
@@ -6444,16 +6444,16 @@ package body Exp_Aggr is
    ------------------------------
 
    procedure Expand_N_Delta_Aggregate (N : Node_Id) is
-      Loc :  constant Source_Ptr := Sloc (N);
-      Temp : constant Entity_Id := Make_Temporary (Loc, 'T');
-      Typ  : constant Entity_Id := Etype (N);
+      Loc  : constant Source_Ptr := Sloc (N);
+      Typ  : constant Entity_Id  := Etype (N);
       Decl : Node_Id;
 
    begin
-      Decl := Make_Object_Declaration (Loc,
-         Defining_Identifier => Temp,
-         Object_Definition => New_Occurrence_Of (Typ, Loc),
-         Expression => New_Copy_Tree (Expression (N)));
+      Decl :=
+        Make_Object_Declaration (Loc,
+          Defining_Identifier => Make_Temporary (Loc, 'T'),
+          Object_Definition   => New_Occurrence_Of (Typ, Loc),
+          Expression          => New_Copy_Tree (Expression (N)));
 
       if Is_Array_Type (Etype (N)) then
          Expand_Delta_Array_Aggregate (N, New_List (Decl));
@@ -6467,15 +6467,19 @@ package body Exp_Aggr is
    ----------------------------------
 
    procedure Expand_Delta_Array_Aggregate (N : Node_Id; Deltas : List_Id) is
-      Loc    : constant Source_Ptr := Sloc (N);
-      Temp   : constant Entity_Id  := Defining_Identifier (First (Deltas));
-      Assoc  : Node_Id;
-      Choice : Node_Id;
+      Loc   : constant Source_Ptr := Sloc (N);
+      Temp  : constant Entity_Id  := Defining_Identifier (First (Deltas));
+      Assoc : Node_Id;
+
       function Generate_Loop (C : Node_Id) return Node_Id;
       --  Generate a loop containing individual component assignments for
       --  choices that are ranges, subtype indications, subtype names, and
       --  iterated component associations.
 
+      -------------------
+      -- Generate_Loop --
+      -------------------
+
       function Generate_Loop (C : Node_Id) return Node_Id is
          Sl : constant Source_Ptr := Sloc (C);
          Ix : Entity_Id;
@@ -6491,21 +6495,29 @@ package body Exp_Aggr is
 
          return
            Make_Loop_Statement (Loc,
-              Iteration_Scheme => Make_Iteration_Scheme (Sl,
-                Loop_Parameter_Specification =>
-                Make_Loop_Parameter_Specification (Sl,
-                  Defining_Identifier => Ix,
-                  Discrete_Subtype_Definition => New_Copy_Tree (C))),
-              End_Label => Empty,
-              Statements =>
-                New_List (
-                  Make_Assignment_Statement (Sl,
-                    Name       => Make_Indexed_Component (Sl,
+             Iteration_Scheme =>
+               Make_Iteration_Scheme (Sl,
+                 Loop_Parameter_Specification =>
+                   Make_Loop_Parameter_Specification (Sl,
+                     Defining_Identifier         => Ix,
+                     Discrete_Subtype_Definition => New_Copy_Tree (C))),
+
+              Statements      => New_List (
+                Make_Assignment_Statement (Sl,
+                  Name       =>
+                    Make_Indexed_Component (Sl,
                       Prefix      => New_Occurrence_Of (Temp, Sl),
                       Expressions => New_List (New_Occurrence_Of (Ix, Sl))),
-                    Expression => New_Copy_Tree (Expression (Assoc)))));
+                  Expression => New_Copy_Tree (Expression (Assoc)))),
+              End_Label       => Empty);
       end Generate_Loop;
 
+      --  Local variables
+
+      Choice : Node_Id;
+
+   --  Start of processing for Expand_Delta_Array_Aggregate
+
    begin
       Assoc := First (Component_Associations (N));
       while Present (Assoc) loop
@@ -6524,7 +6536,7 @@ package body Exp_Aggr is
 
                if Nkind (Choice) = N_Range
                  or else (Is_Entity_Name (Choice)
-                   and then Is_Type (Entity (Choice)))
+                           and then Is_Type (Entity (Choice)))
                then
                   Append_To (Deltas, Generate_Loop (Choice));
 
@@ -6534,11 +6546,12 @@ package body Exp_Aggr is
 
                else
                   Append_To (Deltas,
-                     Make_Assignment_Statement (Sloc (Choice),
-                       Name => Make_Indexed_Component (Sloc (Choice),
-                         Prefix => New_Occurrence_Of (Temp, Loc),
-                         Expressions => New_List (New_Copy_Tree (Choice))),
-                       Expression => New_Copy_Tree (Expression (Assoc))));
+                    Make_Assignment_Statement (Sloc (Choice),
+                      Name       =>
+                        Make_Indexed_Component (Sloc (Choice),
+                          Prefix      => New_Occurrence_Of (Temp, Loc),
+                          Expressions => New_List (New_Copy_Tree (Choice))),
+                      Expression => New_Copy_Tree (Expression (Assoc))));
                end if;
 
                Next (Choice);
@@ -6569,11 +6582,12 @@ package body Exp_Aggr is
          Choice := First (Choice_List (Assoc));
          while Present (Choice) loop
             Append_To (Deltas,
-               Make_Assignment_Statement (Sloc (Choice),
-                 Name => Make_Selected_Component (Sloc (Choice),
-                   Prefix => New_Occurrence_Of (Temp, Loc),
-                   Selector_Name => Make_Identifier (Loc, Chars (Choice))),
-                 Expression => New_Copy_Tree (Expression (Assoc))));
+              Make_Assignment_Statement (Sloc (Choice),
+                Name       =>
+                  Make_Selected_Component (Sloc (Choice),
+                    Prefix        => New_Occurrence_Of (Temp, Loc),
+                    Selector_Name => Make_Identifier (Loc, Chars (Choice))),
+                Expression => New_Copy_Tree (Expression (Assoc))));
             Next (Choice);
          end loop;
 
index a6579c28e3946d33c640c05afb19e2933aa847d9..e9f13319ed51505464a7c959f517245cc6f61194 100644 (file)
@@ -2832,10 +2832,12 @@ package body Exp_Ch6 is
          CW_Interface_Formals_Present :=
            CW_Interface_Formals_Present
              or else
-               (Ekind (Etype (Formal)) = E_Class_Wide_Type
+               (Is_Class_Wide_Type (Etype (Formal))
                  and then Is_Interface (Etype (Etype (Formal))))
              or else
                (Ekind (Etype (Formal)) = E_Anonymous_Access_Type
+                 and then Is_Class_Wide_Type (Directly_Designated_Type
+                                               (Etype (Etype (Formal))))
                  and then Is_Interface (Directly_Designated_Type
                                          (Etype (Etype (Formal)))));
 
index 397206c93fb7e39957bb3f2c8d6272551e9abffd..e3b859f1564ca2db242d454a77fed1d7f9547564 100644 (file)
@@ -111,10 +111,10 @@ package Exp_Strm is
       Fnam           : out Entity_Id;
       Use_Underlying : Boolean := True);
    --  Build function for Input attribute for record type or for an elementary
-   --  type (the latter is used only in the case where a user defined Read
-   --  routine is defined, since in other cases, Input calls the appropriate
-   --  runtime library routine directly. The flag Use_Underlying controls
-   --  weither the base type or the underlying type of the base type of Typ is
+   --  type (the latter is used only in the case where a user-defined Read
+   --  routine is defined, since, in other cases, Input calls the appropriate
+   --  runtime library routine directly). The flag Use_Underlying controls
+   --  whether the base type or the underlying type of the base type of Typ is
    --  used during construction.
 
    procedure Build_Record_Or_Elementary_Output_Procedure
index 3a1d98587c7e27cfc6d57a7d456c703125f4fccb..67a6c64a1d464ffc0c9eedd9e7c687044a4fa3b6 100644 (file)
@@ -3783,8 +3783,8 @@ package body Exp_Util is
          --  Nothing to be done if no underlying record view available
 
          --  If this is a limited type derived from a type with unknown
-         --  discriminants, do not expand either, so that subsequent
-         --  expansion of the call can add build-in-place parameters to call.
+         --  discriminants, do not expand either, so that subsequent expansion
+         --  of the call can add build-in-place parameters to call.
 
          if No (Underlying_Record_View (Unc_Type))
            or else Is_Limited_Type (Unc_Type)
index 9045b6a72b7b5525e6fe9b2d2904365944dfef51..23dd91971565c8845c73aadb0f1e38ec0e04e17b 100644 (file)
@@ -215,6 +215,9 @@ package body Expander is
                when N_Delay_Until_Statement =>
                   Expand_N_Delay_Until_Statement (N);
 
+               when N_Delta_Aggregate =>
+                  Expand_N_Delta_Aggregate (N);
+
                when N_Entry_Body =>
                   Expand_N_Entry_Body (N);
 
index 46db6e475eaf7178948bdb34ccb7740f0157c8ae..a58006e6dcc15df1e33149dbbe19a9d4e0dc43a2 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---                     Copyright (C) 2006-2013, AdaCore                     --
+--                     Copyright (C) 2006-2016, AdaCore                     --
 --                                                                          --
 -- 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- --
@@ -32,7 +32,7 @@
 --  This package provides a procedure for reading and interpreting the BOM
 --  (byte order mark) used to publish the encoding method for a string (for
 --  example, a UTF-8 encoded file in windows will start with the appropriate
---  BOM sequence to signal UTF-8 encoding.
+--  BOM sequence to signal UTF-8 encoding).
 
 --  There are two cases
 
index dabea22616f766b238a33c7dbe3de1c7c29075ef..65bd65c02295b028e7e07a182de9ca9c35ee382f 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 2001-2015, AdaCore                     --
+--                     Copyright (C) 2001-2016, AdaCore                     --
 --                                                                          --
 -- 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- --
@@ -140,9 +140,9 @@ package body GNAT.Directory_Operations.Iteration is
         (Directory      : String;
          File_Pattern   : String;
          Suffix_Pattern : String);
-      --  Read entries in Directory and call user's callback if the entry
-      --  match File_Pattern and Suffix_Pattern is empty otherwise it will go
-      --  down one more directory level by calling Next_Level routine above.
+      --  Read entries in Directory and call user's callback if the entry match
+      --  File_Pattern and Suffix_Pattern is empty; otherwise go down one more
+      --  directory level by calling Next_Level routine below.
 
       procedure Next_Level
         (Current_Path : String;
index 4dda2980c805d0202b561b814e11811043d1906a..5c846645e9d00679730775bb3b063b68d43f11a3 100644 (file)
@@ -1898,6 +1898,11 @@ package body Ch3 is
                  ("aspect specifications must come after initialization "
                   & "expression",
                   Sloc (First (Aspect_Specifications (Decl_Node))));
+
+            else
+               --  In any case, the assignment symbol doesn't belong.
+
+               Error_Msg ("misplaced assignment symbol", Scan_Ptr);
             end if;
 
             Set_Expression (Decl_Node, Init_Expr_Opt);
index 73a0066c0a120520c00a7e7be4a0ae88ca60dd7d..a1733d99bf1be49bf16708792a66d5b080345dd5 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2015, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2016, 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- --
@@ -1909,8 +1909,9 @@ package body Ch6 is
 
             if Token = Tok_Do then
                Push_Scope_Stack;
-               Scope.Table (Scope.Last).Etyp := E_Return;
                Scope.Table (Scope.Last).Ecol := Ret_Strt;
+               Scope.Table (Scope.Last).Etyp := E_Return;
+               Scope.Table (Scope.Last).Labl := Error;
                Scope.Table (Scope.Last).Sloc := Ret_Sloc;
 
                Scan; -- past DO
index 9b5c9c532a81c26a390e65c0b2f332221239fd71..d3c069a04a9577461bdcfbc07d5a4870af290e7f 100644 (file)
@@ -476,8 +476,8 @@ function Par (Configuration_Pragmas : Boolean) return List_Id is
       --  subprogram specifications and bodies the field holds the correponding
       --  program unit name. For task declarations and bodies, protected types
       --  and bodies, and accept statements the field hold the name of the type
-      --  or operation. For if-statements, case-statements, and selects, the
-      --  field is initialized to Error.
+      --  or operation. For if-statements, case-statements, return statements,
+      --  and selects, the field is initialized to Error.
 
       --  Note: this is a bit of an odd (mis)use of Error, since there is no
       --  Error, but we use this value as a place holder to indicate that it
index ceed72c8c105d823bf8a97049419b2163d3d7fea..3747605a29eed04181016b93fefae25210d21ec9 100644 (file)
@@ -1431,9 +1431,9 @@ package body Par_SCO is
       --  Record first entries used in SC/SD at this recursive level
 
       procedure Extend_Statement_Sequence (N : Node_Id; Typ : Character);
-      --  Extend the current statement sequence to encompass the node N. Typ
-      --  is the letter that identifies the type of statement/declaration that
-      --  is being added to the sequence.
+      --  Extend the current statement sequence to encompass the node N. Typ is
+      --  the letter that identifies the type of statement/declaration that is
+      --  being added to the sequence.
 
       procedure Process_Decisions_Defer (N : Node_Id; T : Character);
       pragma Inline (Process_Decisions_Defer);
@@ -1461,8 +1461,8 @@ package body Par_SCO is
       --  Helper for Traverse_One: traverse N's aspect specifications
 
       procedure Traverse_Degenerate_Subprogram (N : Node_Id);
-      --  Common code to handle null procedures and expression functions.
-      --  Emit a SCO of the given Kind and N outside of the dominance flow.
+      --  Common code to handle null procedures and expression functions. Emit
+      --  a SCO of the given Kind and N outside of the dominance flow.
 
       -------------------------------
       -- Extend_Statement_Sequence --
@@ -1745,9 +1745,9 @@ package body Par_SCO is
             --  Save last statement in current sequence as dominant
 
          begin
-            --  Output statement SCO for degenerate subprogram body
-            --  (null statement or freestanding expression) outside of
-            --  the dominance chain.
+            --  Output statement SCO for degenerate subprogram body (null
+            --  statement or freestanding expression) outside of the dominance
+            --  chain.
 
             Current_Dominant := No_Dominant;
             Extend_Statement_Sequence (N, Typ => ' ');
@@ -1758,11 +1758,12 @@ package body Par_SCO is
             if Nkind (N) in N_Subexpr then
                Process_Decisions_Defer (N, 'X');
             end if;
+
             Set_Statement_Entry;
 
-            --  Restore current dominant information designating last
-            --  statement in previous sequence (i.e. make the dominance
-            --  chain skip over the degenerate body).
+            --  Restore current dominant information designating last statement
+            --  in previous sequence (i.e. make the dominance chain skip over
+            --  the degenerate body).
 
             Current_Dominant := Saved_Dominant;
          end;
@@ -1801,9 +1802,9 @@ package body Par_SCO is
 
             --  Subprogram declaration or subprogram body stub
 
-            when N_Subprogram_Body_Stub
+            when N_Expression_Function
+               | N_Subprogram_Body_Stub
                | N_Subprogram_Declaration
-               | N_Expression_Function
             =>
                declare
                   Spec : constant Node_Id := Specification (N);
@@ -1819,9 +1820,9 @@ package body Par_SCO is
                   then
                      Traverse_Degenerate_Subprogram (N);
 
-                  --  Case of an expression function: generate a statement
-                  --  SCO for the expression (and then decision SCOs for any
-                  --  nested decisions).
+                  --  Case of an expression function: generate a statement SCO
+                  --  for the expression (and then decision SCOs for any nested
+                  --  decisions).
 
                   elsif Nkind (N) = N_Expression_Function then
                      Traverse_Degenerate_Subprogram (Expression (N));
index ca07dbb0932fe06e6994944f7371a3022dee11c2..1eb168d95a8d00e9458675ccd2ccbfca47eb018d 100644 (file)
@@ -83,6 +83,15 @@ package body System.Bounded_Strings is
       Append (X, S (P - 1 .. S'Last));
    end Append_Address;
 
+   -------------
+   -- Is_Full --
+   -------------
+
+   function Is_Full (X : Bounded_String) return Boolean is
+   begin
+      return X.Length >= X.Max_Length;
+   end Is_Full;
+
    ---------------
    -- To_String --
    ---------------
index 6e81a49506c26941c8ab08365c996c1ce7c6c17d..0cc2ccec8b4c87a3ebccfe5ad7d198fca17c0985 100644 (file)
@@ -48,6 +48,9 @@ package System.Bounded_Strings is
    procedure Append_Address (X : in out Bounded_String; A : Address);
    --  Append an address to X
 
+   function Is_Full (X : Bounded_String) return Boolean;
+   --  Return True iff X is full and any character or string will be dropped
+   --  if appended.
 private
    type Bounded_String (Max_Length : Natural) is limited record
       Length : Natural := 0;
index 2bcf56e500dde553256b6aa63ccbac0ab69481d3..ee1809e2ec13c1041624cfa940ff5b10aff54243 100644 (file)
@@ -7,7 +7,7 @@
 --                                  S p e c                                 --
 --                                                                          --
 --             Copyright (C) 1991-1994, Florida State University            --
---          Copyright (C) 1995-2015, Free Software Foundation, Inc.         --
+--          Copyright (C) 1995-2016, 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- --
@@ -270,6 +270,7 @@ package System.OS_Interface is
    pragma Import (C, getpid, "getpid");
 
    PR_SET_NAME : constant := 15;
+   PR_GET_NAME : constant := 16;
 
    function prctl
      (option                 : int;
index 85990f6dfb64702b4dd7054afce7f0a3e743ad61..ad603d8e58d68627a3c00aa5c1e53134b98c8d30 100644 (file)
@@ -755,14 +755,55 @@ package body System.Task_Primitives.Operations is
       Self_ID.Common.LL.Thread := pthread_self;
       Self_ID.Common.LL.LWP := lwp_self;
 
-      if Self_ID.Common.Task_Image_Len > 0 then
+      --  Set thread name to ease debugging. If the name of the task is
+      --  "foreign thread" (as set by Register_Foreign_Thread) retrieve
+      --  the name of the thread and update the name of the task instead.
+
+      if Self_ID.Common.Task_Image_Len = 14
+        and then Self_ID.Common.Task_Image (1 .. 14) = "foreign thread"
+      then
+         declare
+            Thread_Name : String (1 .. 16);
+            --  PR_GET_NAME returns a string of up to 16 bytes
+
+            Len    : Natural := 0;
+            --  Length of the task name contained in Task_Name
+
+            Result : int;
+            --  Result from the prctl call
+         begin
+            Result := prctl (PR_GET_NAME, unsigned_long (Thread_Name'Address));
+            pragma Assert (Result = 0);
+
+            --  Find the length of the given name
+
+            for J in Thread_Name'Range loop
+               if Thread_Name (J) /= ASCII.NUL then
+                  Len := Len + 1;
+               else
+                  exit;
+               end if;
+            end loop;
+
+            --  Cover the odd situtation if someone decides to change
+            --  Parameters.Max_Task_Image_Length to less than 16 characters
+
+            if Len > Parameters.Max_Task_Image_Length then
+               Len := Parameters.Max_Task_Image_Length;
+            end if;
+
+            --  Copy the name of the thread to the task's ATCB
+
+            Self_ID.Common.Task_Image (1 .. Len) := Thread_Name (1 .. Len);
+            Self_ID.Common.Task_Image_Len := Len;
+         end;
+
+      elsif Self_ID.Common.Task_Image_Len > 0 then
          declare
             Task_Name : String (1 .. Parameters.Max_Task_Image_Length + 1);
             Result    : int;
 
          begin
-            --  Set thread name to ease debugging
-
             Task_Name (1 .. Self_ID.Common.Task_Image_Len) :=
               Self_ID.Common.Task_Image (1 .. Self_ID.Common.Task_Image_Len);
             Task_Name (Self_ID.Common.Task_Image_Len + 1) := ASCII.NUL;
index bae89ad5ad11a5d50e7e4f14cb74867ff727aa85..9b7c4903974b5dfd0a6f153d69740b7d5639078b 100644 (file)
@@ -196,12 +196,12 @@ package body Sem is
          when N_Delay_Relative_Statement =>
             Analyze_Delay_Relative (N);
 
-         when N_Delta_Aggregate =>
-            Analyze_Aggregate (N);
-
          when N_Delay_Until_Statement =>
             Analyze_Delay_Until (N);
 
+         when N_Delta_Aggregate =>
+            Analyze_Aggregate (N);
+
          when N_Entry_Body =>
             Analyze_Entry_Body (N);
 
index 65d586da32afa785ea53ea2b4a3adb5bee49eac5..efa5d60b6aff80788a37da7e33097d94d7ff8686 100644 (file)
@@ -2740,12 +2740,8 @@ package body Sem_Aggr is
    -----------------------------
 
    procedure Resolve_Delta_Aggregate (N : Node_Id; Typ : Entity_Id) is
-      Base       : constant Node_Id   := Expression (N);
-      Deltas     : constant List_Id   := Component_Associations (N);
-      Assoc      : Node_Id;
-      Choice     : Node_Id;
-      Comp_Type  : Entity_Id;
-      Index_Type : Entity_Id;
+      Base   : constant Node_Id := Expression (N);
+      Deltas : constant List_Id := Component_Associations (N);
 
       function Get_Component_Type (Nam : Node_Id) return Entity_Id;
 
@@ -2775,12 +2771,22 @@ package body Sem_Aggr is
          return Any_Type;
       end Get_Component_Type;
 
+      --  Local variables
+
+      Assoc      : Node_Id;
+      Choice     : Node_Id;
+      Comp_Type  : Entity_Id;
+      Index_Type : Entity_Id;
+
+   --  Start of processing for Resolve_Delta_Aggregate
+
    begin
       if not Is_Composite_Type (Typ) then
          Error_Msg_N ("not a composite type", N);
       end if;
 
       Analyze_And_Resolve (Base, Typ);
+
       if Is_Array_Type (Typ) then
          Index_Type := Etype (First_Index (Typ));
          Assoc := First (Deltas);
@@ -2800,10 +2806,10 @@ package body Sem_Aggr is
                end loop;
 
                declare
-                  Id  : constant Entity_Id  := Defining_Identifier (Assoc);
-                  Ent : constant Entity_Id  :=
-                    New_Internal_Entity
-                      (E_Loop, Current_Scope, Sloc (Assoc), 'L');
+                  Id  : constant Entity_Id := Defining_Identifier (Assoc);
+                  Ent : constant Entity_Id :=
+                          New_Internal_Entity
+                            (E_Loop, Current_Scope, Sloc (Assoc), 'L');
 
                begin
                   Set_Etype  (Ent, Standard_Void_Type);
@@ -2838,8 +2844,9 @@ package body Sem_Aggr is
                         if Base_Type (Entity (Choice)) /=
                            Base_Type (Index_Type)
                         then
-                           Error_Msg_NE ("choice does mat match index type of",
-                             Choice, Typ);
+                           Error_Msg_NE
+                             ("choice does mat match index type of",
+                              Choice, Typ);
                         end if;
                      else
                         Resolve (Choice, Index_Type);
index 7a2666144b932f50bb99b8ceb308f39f68c2359c..ef4206b9b30cc05cf203b7cf1c73b10c0fe14841 100644 (file)
@@ -9287,19 +9287,20 @@ package body Sem_Ch4 is
                Typ := Corresponding_Record_Type (Typ);
             end if;
 
-            --  Simple case. Object may be a subtype of the tagged type or
-            --  may be the corresponding record of a synchronized type.
+            --  Simple case. Object may be a subtype of the tagged type or may
+            --  be the corresponding record of a synchronized type.
 
             return Obj_Type = Typ
               or else Base_Type (Obj_Type) = Typ
               or else Corr_Type = Typ
 
               --  Object may be of a derived type whose parent has unknown
-              --  discriminants, in which case the type matches the
-              --  underlying record view of its base.
+              --  discriminants, in which case the type matches the underlying
+              --  record view of its base.
 
-              or else (Has_Unknown_Discriminants (Typ)
-                and then Typ = Underlying_Record_View (Base_Type (Obj_Type)))
+              or else
+                (Has_Unknown_Discriminants (Typ)
+                  and then Typ = Underlying_Record_View (Base_Type (Obj_Type)))
 
                --  Prefix can be dereferenced
 
@@ -9307,8 +9308,8 @@ package body Sem_Ch4 is
                 (Is_Access_Type (Corr_Type)
                   and then Designated_Type (Corr_Type) = Typ)
 
-               --  Formal is an access parameter, for which the object
-               --  can provide an access.
+               --  Formal is an access parameter, for which the object can
+               --  provide an access.
 
               or else
                 (Ekind (Typ) = E_Anonymous_Access_Type