]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2009-04-29 Emmanuel Briot <briot@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 09:52:34 +0000 (09:52 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 09:52:34 +0000 (09:52 +0000)
* prj-ext.adb, prj.adb, prj.ads: Fix memory leaks.

* clean.adb (Ultimate_Extension_Of): removed, since duplicate of
 Prj.Ultimate_Extending_Project_Of

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146940 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/clean.adb
gcc/ada/prj-ext.adb
gcc/ada/prj.adb
gcc/ada/prj.ads

index 3b40ca63a4ae629381e8a0bec8f3a8fe4d34cb44..968ec55e1a6698a875f9221d60a9cf218f5dd820 100644 (file)
@@ -1,3 +1,10 @@
+2009-04-29  Emmanuel Briot  <briot@adacore.com>
+
+       * prj-ext.adb, prj.adb, prj.ads: Fix memory leaks.
+
+       * clean.adb (Ultimate_Extension_Of): removed, since duplicate of
+        Prj.Ultimate_Extending_Project_Of
+
 2009-04-29  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_ch7.adb (Build_Final_List): If the designated type is a Taft
index 54b408affe0791e1ce8fee56cb3d612b26d38eff..eac192903b374da9219c11cfcf532b96a1a357c2 100644 (file)
@@ -242,11 +242,6 @@ package body Clean is
    --  Returns True iff Prj is an extension of Of_Project or if Of_Project is
    --  an extension of Prj.
 
-   function Ultimate_Extension_Of (Project : Project_Id) return Project_Id;
-   --  Returns either Project, if it is not extended by another project, or
-   --  the project that extends Project, directly or indirectly, and that is
-   --  not itself extended. Returns No_Project if Project is No_Project.
-
    procedure Usage;
    --  Display the usage. If called several times, the usage is displayed only
    --  the first time.
@@ -582,7 +577,7 @@ package body Clean is
                      loop
                         Unit := Project_Tree.Units.Table (Index);
 
-                        if Ultimate_Extension_Of
+                        if Ultimate_Extending_Project_Of
                           (Unit.File_Names (Body_Part).Project) = Project
                           and then
                             Get_Name_String
@@ -593,7 +588,7 @@ package body Clean is
                            exit;
                         end if;
 
-                        if Ultimate_Extension_Of
+                        if Ultimate_Extending_Project_Of
                           (Unit.File_Names (Specification).Project) = Project
                           and then
                             Get_Name_String
@@ -749,7 +744,7 @@ package body Clean is
                               if Unit.File_Names (Body_Part).Project /=
                                 No_Project
                               then
-                                 if Ultimate_Extension_Of
+                                 if Ultimate_Extending_Project_Of
                                    (Unit.File_Names (Body_Part).Project) =
                                    Project
                                  then
@@ -766,7 +761,7 @@ package body Clean is
                                     end if;
                                  end if;
 
-                              elsif Ultimate_Extension_Of
+                              elsif Ultimate_Extending_Project_Of
                                 (Unit.File_Names (Specification).Project) =
                                 Project
                               then
@@ -1905,24 +1900,6 @@ package body Clean is
       return Src & Tree_Suffix;
    end Tree_File_Name;
 
-   ---------------------------
-   -- Ultimate_Extension_Of --
-   ---------------------------
-
-   function Ultimate_Extension_Of (Project : Project_Id) return Project_Id is
-      Result : Project_Id := Project;
-
-   begin
-      if Project /= No_Project then
-         loop
-            exit when Result.Extended_By = No_Project;
-            Result := Result.Extended_By;
-         end loop;
-      end if;
-
-      return Result;
-   end Ultimate_Extension_Of;
-
    -----------
    -- Usage --
    -----------
index 5a7e9b97896fde1200befbf979b89c8e4883efda..50751c22c3ecad12caac951cb94407853dbec80c 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2009, 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- --
@@ -281,6 +281,8 @@ package body Prj.Ext is
                              ".." & Directory_Separator &
                              ".." & Directory_Separator & "gnat");
             end if;
+
+            Free (Prefix);
          end;
       end if;
 
index 49d9c5711a0edb2add9ed95a282a4e96d83e4004..b5f924d3aa5936f28a9af6dab9141e61acfb5f7e 100644 (file)
@@ -143,7 +143,7 @@ package body Prj is
    --  Table to store the path name of all the created temporary files, so that
    --  they can be deleted at the end, or when the program is interrupted.
 
-   procedure Free (Project : in out Project_Id; Reset_Only : Boolean);
+   procedure Free (Project : in out Project_Id);
    --  Free memory allocated for Project
 
    procedure Free_List (Languages : in out Language_Ptr);
@@ -825,7 +825,7 @@ package body Prj is
    -- Free --
    ----------
 
-   procedure Free (Project : in out Project_Id; Reset_Only : Boolean) is
+   procedure Free (Project : in out Project_Id) is
       procedure Unchecked_Free is new Ada.Unchecked_Deallocation
         (Project_Data, Project_Id);
 
@@ -835,13 +835,9 @@ package body Prj is
          Free (Project.Ada_Include_Path);
          Free (Project.Objects_Path);
          Free (Project.Ada_Objects_Path);
-
          Free_List (Project.Imported_Projects, Free_Project => False);
          Free_List (Project.All_Imported_Projects, Free_Project => False);
-
-         if not Reset_Only then
-            Free_List (Project.Languages);
-         end if;
+         Free_List (Project.Languages);
 
          Unchecked_Free (Project);
       end if;
@@ -886,8 +882,7 @@ package body Prj is
 
    procedure Free_List
      (List         : in out Project_List;
-      Free_Project : Boolean;
-      Reset_Only   : Boolean := True)
+      Free_Project : Boolean)
    is
       procedure Unchecked_Free is new Ada.Unchecked_Deallocation
         (Project_List_Element, Project_List);
@@ -898,7 +893,7 @@ package body Prj is
          Tmp := List.Next;
 
          if Free_Project then
-            Free (List.Project, Reset_Only => Reset_Only);
+            Free (List.Project);
          end if;
 
          Unchecked_Free (List);
@@ -944,18 +939,19 @@ package body Prj is
          Source_Paths_Htable.Reset (Tree.Source_Paths_HT);
          Unit_Sources_Htable.Reset (Tree.Unit_Sources_HT);
 
-         Free_List (Tree.Projects, Free_Project => True, Reset_Only => False);
+         Free_List (Tree.Projects, Free_Project => True);
 
          --  Private part
 
-         Naming_Table.Free (Tree.Private_Part.Namings);
-         Path_File_Table.Free (Tree.Private_Part.Path_Files);
+         Naming_Table.Free      (Tree.Private_Part.Namings);
+         Path_File_Table.Free   (Tree.Private_Part.Path_Files);
          Source_Path_Table.Free (Tree.Private_Part.Source_Paths);
          Object_Path_Table.Free (Tree.Private_Part.Object_Paths);
 
          Free (Tree.Private_Part.Ada_Path_Buffer);
 
-         --  Naming data (nothing to free ?)
+         --  Naming data (nothing to free ???)
+
          null;
 
          Unchecked_Free (Tree);
@@ -981,7 +977,7 @@ package body Prj is
       Source_Paths_Htable.Reset     (Tree.Source_Paths_HT);
       Unit_Sources_Htable.Reset     (Tree.Unit_Sources_HT);
 
-      Free_List (Tree.Projects, Free_Project => True, Reset_Only => True);
+      Free_List (Tree.Projects, Free_Project => True);
 
       --  Private part table
 
index 26bf2da3b16fd481ee69f0a6f4ecda903afbb1c7..e903fbc39465d9045ea142fd63276db65594f9bb 100644 (file)
@@ -161,7 +161,7 @@ package Prj is
    No_Path_Information : constant Path_Information := (No_Path, No_Path);
 
    type Project_Data;
-   type Project_Id is access Project_Data;
+   type Project_Id is access all Project_Data;
    No_Project : constant Project_Id := null;
    --  Id of a Project File
 
@@ -604,7 +604,7 @@ package Prj is
                          Next          => No_Language_Index);
 
    type Language_List_Element;
-   type Language_List is access Language_List_Element;
+   type Language_List is access all Language_List_Element;
    type Language_List_Element is record
       Language : Language_Ptr := No_Language_Index;
       Next     : Language_List;
@@ -928,7 +928,7 @@ package Prj is
    --  not considering Specs and Bodies.
 
    type Project_List_Element;
-   type Project_List is access Project_List_Element;
+   type Project_List is access all Project_List_Element;
    type Project_List_Element is record
       Project : Project_Id   := No_Project;
       Next    : Project_List := null;
@@ -937,11 +937,8 @@ package Prj is
 
    procedure Free_List
      (List         : in out Project_List;
-      Free_Project : Boolean;
-      Reset_Only   : Boolean := True);
+      Free_Project : Boolean);
    --  Free the list of projects. If Free_Project, each project is also freed.
-   --  When Free_Project is True, Reset_Only indicates whether the specific
-   --  languages should also be freed.
 
    type Response_File_Format is
      (None,