[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 31 Oct 2014 14:28:08 +0000 (15:28 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 31 Oct 2014 14:28:08 +0000 (15:28 +0100)
2014-10-31  Vincent Celier  <celier@adacore.com>

* prj-part.adb (Parse_Single_Project): Call Set_Display_Name_Of.
* prj-proc.adb (Recursive_Process): Call Display_Name_Of to
get the project Display_Name.
* prj-tree.adb (Display_Name_Of): New function
(Set_Display_Name_Of): New procedure.
(Create_Project): Call Set_Display_Name_Of.
* prj-tree.ads (Display_Name_Of): New function.
(Set_Display_Name_Of): New procedure.
(Project_Node_Record): New component Display_Name.
(Project_Name_And_Node): Remove component Display_Name.
* prj-conf.adb (Parse_Project_And_Apply_Config): Use the full
Config_File_Path as the Config_File_Name, not just its simple
name.

2014-10-31  Thomas Quinot  <quinot@adacore.com>

* get_scos.adb: Minor reformatting.

2014-10-31  Ed Schonberg  <schonberg@adacore.com>

* exp_ch5.adb (Expand_Formal_Container_Loop): Create block to
capture declaration for cursor to prevent spurious errors when
several formal iterators that use the same cursoe name appear
in the same context.

From-SVN: r216978

gcc/ada/ChangeLog
gcc/ada/exp_ch5.adb
gcc/ada/get_scos.adb
gcc/ada/prj-conf.adb
gcc/ada/prj-part.adb
gcc/ada/prj-proc.adb
gcc/ada/prj-tree.adb
gcc/ada/prj-tree.ads

index 482f230e0d96292f7c1ac6aef128b7e7b2be9e8c..d2d9914b2795ae33ba9e56ee4e16b5ce1bed6a50 100644 (file)
@@ -1,3 +1,30 @@
+2014-10-31  Vincent Celier  <celier@adacore.com>
+
+       * prj-part.adb (Parse_Single_Project): Call Set_Display_Name_Of.
+       * prj-proc.adb (Recursive_Process): Call Display_Name_Of to
+       get the project Display_Name.
+       * prj-tree.adb (Display_Name_Of): New function
+       (Set_Display_Name_Of): New procedure.
+       (Create_Project): Call Set_Display_Name_Of.
+       * prj-tree.ads (Display_Name_Of): New function.
+       (Set_Display_Name_Of): New procedure.
+       (Project_Node_Record): New component Display_Name.
+       (Project_Name_And_Node): Remove component Display_Name.
+       * prj-conf.adb (Parse_Project_And_Apply_Config): Use the full
+       Config_File_Path as the Config_File_Name, not just its simple
+       name.
+
+2014-10-31  Thomas Quinot  <quinot@adacore.com>
+
+       * get_scos.adb: Minor reformatting.
+
+2014-10-31  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_ch5.adb (Expand_Formal_Container_Loop): Create block to
+       capture declaration for cursor to prevent spurious errors when
+       several formal iterators that use the same cursoe name appear
+       in the same context.
+
 2014-10-31  Vincent Celier  <celier@adacore.com>
 
        * prj-proc.adb (Recursive_Process): Make sure that the project
index b414d54ae762be79323d478f128c0407f9b907e0..e66a58363e9a84979708f504579c20d7b5cc80aa 100644 (file)
@@ -2776,6 +2776,7 @@ package body Exp_Ch5 is
    ----------------------------------
 
    procedure Expand_Formal_Container_Loop (N : Node_Id) is
+      Loc       : constant Source_Ptr := Sloc (N);
       Isc       : constant Node_Id    := Iteration_Scheme (N);
       I_Spec    : constant Node_Id    := Iterator_Specification (Isc);
       Cursor    : constant Entity_Id  := Defining_Identifier (I_Spec);
@@ -2783,6 +2784,7 @@ package body Exp_Ch5 is
       Stats     : constant List_Id    := Statements (N);
 
       Advance  : Node_Id;
+      Blk_Nod  : Node_Id;
       Init     : Node_Id;
       New_Loop : Node_Id;
 
@@ -2801,12 +2803,19 @@ package body Exp_Ch5 is
         (N, Container, Cursor, Init, Advance, New_Loop);
 
       Set_Ekind (Cursor, E_Variable);
-      Insert_Action (N, Init);
-
       Append_To (Stats, Advance);
 
-      Rewrite (N, New_Loop);
-      Analyze (New_Loop);
+      --  Build block to capture declaration of cursor entity.
+
+      Blk_Nod :=
+        Make_Block_Statement (Loc,
+          Declarations               => New_List (Init),
+          Handled_Statement_Sequence =>
+            Make_Handled_Sequence_Of_Statements (Loc,
+              Statements => New_List (New_Loop)));
+
+      Rewrite (N, Blk_Nod);
+      Analyze (N);
    end Expand_Formal_Container_Loop;
 
    ------------------------------------------
index 4f8213915767ae00896497760ccd4629f0028ca6..48c9c4632171bde2950f874ebdce4dc16049d48a 100644 (file)
@@ -302,8 +302,8 @@ begin
                      From       => SCO_Table.Last + 1,
                      To         => 0));
 
-                     when others =>
-                        raise Program_Error;
+               when others =>
+                  raise Program_Error;
 
             end case;
 
index 8d4e3d46d918e67831187d1d8d07938df4317d54..a9fd006c7ed12c99f942ef1aaf08c5a9d9dbc79a 100644 (file)
@@ -1753,7 +1753,7 @@ package body Prj.Conf is
          Update_Ignore_Missing_With (Env.Flags, False);
 
          if Config_File_Path /= null then
-            Conf_File_Name := new String'(Simple_Name (Config_File_Path.all));
+            Conf_File_Name := new String'(Config_File_Path.all);
          end if;
 
          --  For the second time the project files are parsed, the warning for
index 34b13bc1e80b5581b37c28ab7f5a863cb71cf331..234ccdc172f5540c5bdfcdb0bce12598a7ba8f61 100644 (file)
@@ -1298,7 +1298,6 @@ package body Prj.Part is
       Name_From_Path  : constant Name_Id :=
         Project_Name_From (Path_Name, Is_Config_File => Is_Config_File);
       Name_Of_Project : Name_Id := No_Name;
-      Display_Name_Of_Project : Name_Id := No_Name;
 
       Duplicated : Boolean := False;
 
@@ -1634,11 +1633,11 @@ package body Prj.Part is
             end if;
          end;
 
-         --  Read the original casing of the project name
+         --  Read the original casing of the project name and put it in the
+         --  project node.
 
          declare
             Loc : Source_Ptr;
-
          begin
             Loc := Location_Of (Project, In_Tree);
             for J in 1 .. Name_Len loop
@@ -1646,7 +1645,7 @@ package body Prj.Part is
                Loc := Loc + 1;
             end loop;
 
-            Display_Name_Of_Project := Name_Find;
+            Set_Display_Name_Of (Project, In_Tree, Name_Find);
          end;
 
          declare
@@ -2018,7 +2017,6 @@ package body Prj.Part is
            (T => In_Tree.Projects_HT,
             K => Name_Of_Project,
             E => (Name           => Name_Of_Project,
-                  Display_Name   => Display_Name_Of_Project,
                   Node           => Project,
                   Resolved_Path  => Resolved_Path_Name,
                   Extended       => Extended,
index 7fffc3210f55f4132538a0f1a1c4ea604a300818..71ac4213b0ff19ecdf9288a703072180adff0614 100644 (file)
@@ -2765,6 +2765,10 @@ package body Prj.Proc is
             Success := not Prj.Tree.No (Loaded_Project);
 
             if Success then
+               if Node_Tree.Incomplete_With then
+                  From_Project_Node_Tree.Incomplete_With := True;
+               end if;
+
                List.Tree := new Project_Tree_Data (Is_Root_Tree => False);
                Prj.Initialize (List.Tree);
                List.Tree.Shared := In_Tree.Shared;
@@ -2928,9 +2932,9 @@ package body Prj.Proc is
             Name : constant Name_Id :=
                      Name_Of (From_Project_Node, From_Project_Node_Tree);
 
-            Name_Node : constant Tree_Private_Part.Project_Name_And_Node :=
-                          Tree_Private_Part.Projects_Htable.Get
-                            (From_Project_Node_Tree.Projects_HT, Name);
+            Display_Name : constant Name_Id :=
+                             Display_Name_Of
+                               (From_Project_Node, From_Project_Node_Tree);
 
          begin
             Project := Processed_Projects.Get (Name);
@@ -2994,14 +2998,7 @@ package body Prj.Proc is
             Processed_Projects.Set (Name, Project);
 
             Project.Name := Name;
-
-            --  Make sure that the project display name is never No_Name
-
-            if Name_Node.Display_Name = No_Name then
-               Project.Display_Name := Name;
-            else
-               Project.Display_Name := Name_Node.Display_Name;
-            end if;
+            Project.Display_Name := Display_Name;
 
             Get_Name_String (Name);
 
index 023947c4e97872bb06243062675577ba57b69fc7..52ba0437e9e9a8ef01eb4026dde78d5c494f6a5f 100644 (file)
@@ -110,26 +110,27 @@ package body Prj.Tree is
          Project_Node_Table.Increment_Last (In_Tree.Project_Nodes);
          In_Tree.Project_Nodes.Table
            (Project_Node_Table.Last (In_Tree.Project_Nodes)) :=
-           (Kind      => N_Comment_Zones,
-            Qualifier => Unspecified,
-            Expr_Kind => Undefined,
-            Location  => No_Location,
-            Directory => No_Path,
-            Variables => Empty_Node,
-            Packages  => Empty_Node,
-            Pkg_Id    => Empty_Package,
-            Name      => No_Name,
-            Src_Index => 0,
-            Path_Name => No_Path,
-            Value     => No_Name,
-            Default   => Empty_Value,
-            Field1    => Empty_Node,
-            Field2    => Empty_Node,
-            Field3    => Empty_Node,
-            Field4    => Empty_Node,
-            Flag1     => False,
-            Flag2     => False,
-            Comments  => Empty_Node);
+           (Kind         => N_Comment_Zones,
+            Qualifier    => Unspecified,
+            Expr_Kind    => Undefined,
+            Location     => No_Location,
+            Directory    => No_Path,
+            Variables    => Empty_Node,
+            Packages     => Empty_Node,
+            Pkg_Id       => Empty_Package,
+            Name         => No_Name,
+            Display_Name => No_Name,
+            Src_Index    => 0,
+            Path_Name    => No_Path,
+            Value        => No_Name,
+            Default      => Empty_Value,
+            Field1       => Empty_Node,
+            Field2       => Empty_Node,
+            Field3       => Empty_Node,
+            Field4       => Empty_Node,
+            Flag1        => False,
+            Flag2        => False,
+            Comments     => Empty_Node);
 
          Zone := Project_Node_Table.Last (In_Tree.Project_Nodes);
          In_Tree.Project_Nodes.Table (To).Comments := Zone;
@@ -170,6 +171,7 @@ package body Prj.Tree is
                Packages         => Empty_Node,
                Pkg_Id           => Empty_Package,
                Name             => No_Name,
+               Display_Name     => No_Name,
                Src_Index        => 0,
                Path_Name        => No_Path,
                Value            => Comments.Table (J).Value,
@@ -339,6 +341,7 @@ package body Prj.Tree is
          Packages         => Empty_Node,
          Pkg_Id           => Empty_Package,
          Name             => No_Name,
+         Display_Name     => No_Name,
          Src_Index        => 0,
          Path_Name        => No_Path,
          Value            => No_Name,
@@ -432,6 +435,7 @@ package body Prj.Tree is
          Packages         => Empty_Node,
          Pkg_Id           => Empty_Package,
          Name             => No_Name,
+         Display_Name     => No_Name,
          Src_Index        => 0,
          Path_Name        => No_Path,
          Value            => No_Name,
@@ -469,6 +473,7 @@ package body Prj.Tree is
                Packages         => Empty_Node,
                Pkg_Id           => Empty_Package,
                Name             => No_Name,
+               Display_Name     => No_Name,
                Src_Index        => 0,
                Path_Name        => No_Path,
                Value            => No_Name,
@@ -504,6 +509,7 @@ package body Prj.Tree is
                   Packages         => Empty_Node,
                   Pkg_Id           => Empty_Package,
                   Name             => No_Name,
+                  Display_Name     => No_Name,
                   Src_Index        => 0,
                   Path_Name        => No_Path,
                   Value            => Comments.Table (J).Value,
@@ -1225,6 +1231,22 @@ package body Prj.Tree is
       return In_Tree.Project_Nodes.Table (Node).Name;
    end Name_Of;
 
+   ---------------------
+   -- Display_Name_Of --
+   ---------------------
+
+   function Display_Name_Of
+     (Node    : Project_Node_Id;
+      In_Tree : Project_Node_Tree_Ref) return Name_Id
+   is
+   begin
+      pragma Assert
+        (Present (Node)
+         and then
+         In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
+      return In_Tree.Project_Nodes.Table (Node).Display_Name;
+   end Display_Name_Of;
+
    --------------------
    -- Next_Case_Item --
    --------------------
@@ -2424,6 +2446,23 @@ package body Prj.Tree is
       In_Tree.Project_Nodes.Table (Node).Name := To;
    end Set_Name_Of;
 
+   -------------------------
+   -- Set_Display_Name_Of --
+   -------------------------
+
+   procedure Set_Display_Name_Of
+     (Node    : Project_Node_Id;
+      In_Tree : Project_Node_Tree_Ref;
+      To      : Name_Id)
+   is
+   begin
+      pragma Assert
+        (Present (Node)
+         and then
+         In_Tree.Project_Nodes.Table (Node).Kind = N_Project);
+      In_Tree.Project_Nodes.Table (Node).Display_Name := To;
+   end Set_Display_Name_Of;
+
    -------------------------------
    -- Set_Next_Declarative_Item --
    -------------------------------
@@ -2949,6 +2988,7 @@ package body Prj.Tree is
    begin
       Project := Default_Project_Node (In_Tree, N_Project);
       Set_Name_Of (Project, In_Tree, Name);
+      Set_Display_Name_Of (Project, In_Tree, Name);
       Set_Directory_Of
         (Project, In_Tree,
          Path_Name_Type (Get_Directory (File_Name_Type (Full_Path))));
@@ -2968,7 +3008,6 @@ package body Prj.Tree is
             Name,
             Prj.Tree.Tree_Private_Part.Project_Name_And_Node'
               (Name           => Name,
-               Display_Name   => Name,
                Resolved_Path  => No_Path,
                Node           => Project,
                Extended       => False,
index e798d6b670041b44e7b5df7a369ce21cc8cbd9bd..e012d3736dc81bf27e16a8d0098da829f29ee4a2 100644 (file)
@@ -269,6 +269,12 @@ package Prj.Tree is
    --  Valid for all non empty nodes. May return No_Name for nodes that have
    --  no names.
 
+   function Display_Name_Of
+     (Node    : Project_Node_Id;
+      In_Tree : Project_Node_Tree_Ref) return Name_Id;
+   pragma Inline (Display_Name_Of);
+   --  Valid only for N_Project node. Returns the display name of the project.
+
    function Kind_Of
      (Node    : Project_Node_Id;
       In_Tree : Project_Node_Tree_Ref) return Project_Node_Kind;
@@ -738,7 +744,14 @@ package Prj.Tree is
       In_Tree : Project_Node_Tree_Ref;
       To      : Name_Id);
    pragma Inline (Set_Name_Of);
-   --  Valid for all non empty nodes.
+   --  Valid for all non empty nodes
+
+   procedure Set_Display_Name_Of
+     (Node    : Project_Node_Id;
+      In_Tree : Project_Node_Tree_Ref;
+      To      : Name_Id);
+   pragma Inline (Set_Display_Name_Of);
+   --  Valid only for N_Project nodes
 
    procedure Set_Kind_Of
      (Node    : Project_Node_Id;
@@ -1159,6 +1172,9 @@ package Prj.Tree is
          Directory : Path_Name_Type := No_Path;
          --  Only for N_Project
 
+         Display_Name : Name_Id := No_Name;
+         --  Only for N_Project
+
          Expr_Kind : Variable_Kind := Undefined;
          --  See below for what Project_Node_Kind it is used
 
@@ -1479,9 +1495,6 @@ package Prj.Tree is
          Name : Name_Id;
          --  Name of the project
 
-         Display_Name : Name_Id;
-         --  The name of the project as it appears in the .gpr file
-
          Node : Project_Node_Id;
          --  Node of the project in table Project_Nodes
 
@@ -1502,7 +1515,6 @@ package Prj.Tree is
 
       No_Project_Name_And_Node : constant Project_Name_And_Node :=
         (Name           => No_Name,
-         Display_Name   => No_Name,
          Node           => Empty_Node,
          Resolved_Path  => No_Path,
          Extended       => True,