From 812f574fdafe3d4a09ac60964b8eeb36cb430837 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 8 Apr 2009 15:29:19 +0200 Subject: [PATCH] [multiple changes] 2009-04-08 Tristan Gingold * sem_prag.adb: Restrict pragma Thread_Local_Storage to library level variables. Set Has_Gigi_Rep_Item flag to TLS variables (to ease gigi work). 2009-04-08 Vincent Celier * prj-nmsc.adb: (Add_Source): Add the mapping of the unit name to source file name in the Unit_Sources_HT hash table, if the unit name is not null. * prj.adb (Reset): Reset hash table Tree.Unit_Sources_HT * prj.ads (Unit_Sources_Htable): New hash table instantiation (Project_Tree_Data): New component Unit_Sources_HT From-SVN: r145728 --- gcc/ada/ChangeLog | 17 ++++++++++++ gcc/ada/prj-nmsc.adb | 63 ++++++++++++++++++++++++-------------------- gcc/ada/prj.adb | 1 + gcc/ada/prj.ads | 11 +++++++- gcc/ada/sem_prag.adb | 3 ++- 5 files changed, 64 insertions(+), 31 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 3d661230c6b..940337e2e5e 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,20 @@ +2009-04-08 Tristan Gingold + + * sem_prag.adb: Restrict pragma Thread_Local_Storage to library level + variables. + Set Has_Gigi_Rep_Item flag to TLS variables (to ease gigi work). + +2009-04-08 Vincent Celier + + * prj-nmsc.adb: + (Add_Source): Add the mapping of the unit name to source file name in + the Unit_Sources_HT hash table, if the unit name is not null. + + * prj.adb (Reset): Reset hash table Tree.Unit_Sources_HT + + * prj.ads (Unit_Sources_Htable): New hash table instantiation + (Project_Tree_Data): New component Unit_Sources_HT + 2009-04-08 Thomas Quinot * sem_ch8.adb: Minor reformatting. diff --git a/gcc/ada/prj-nmsc.adb b/gcc/ada/prj-nmsc.adb index c00a69ae7c9..3c2d5d8a20e 100644 --- a/gcc/ada/prj-nmsc.adb +++ b/gcc/ada/prj-nmsc.adb @@ -656,6 +656,13 @@ package body Prj.Nmsc is Source_Paths_Htable.Set (In_Tree.Source_Paths_HT, Path, Id); end if; + -- Add the source id to the Unit_Sources_HT hash table, if the unit name + -- is not null. + + if Unit /= No_Name then + Unit_Sources_Htable.Set (In_Tree.Unit_Sources_HT, Unit, Id); + end if; + -- Add the source to the global list Src_Data.Next_In_Sources := In_Tree.First_Source; @@ -806,8 +813,9 @@ package body Prj.Nmsc is Source := Data.First_Source; Source_Loop : while Source /= No_Source loop declare - Src_Data : Source_Data renames - In_Tree.Sources.Table (Source); + Src_Data : Source_Data renames + In_Tree.Sources.Table (Source); + begin exit Source_Loop when Src_Data.Language = Language; @@ -2513,7 +2521,7 @@ package body Prj.Nmsc is while Source /= No_Source loop declare Src_Data : Source_Data renames - In_Tree.Sources.Table (Source); + In_Tree.Sources.Table (Source); begin Src_Data.In_Interfaces := False; Source := Src_Data.Next_In_Project; @@ -2542,7 +2550,8 @@ package body Prj.Nmsc is while Source /= No_Source loop declare Src_Data : Source_Data renames - In_Tree.Sources.Table (Source); + In_Tree.Sources.Table (Source); + begin if Src_Data.File = Name then if not Src_Data.Locally_Removed then @@ -2604,7 +2613,8 @@ package body Prj.Nmsc is while Source /= No_Source loop declare Src_Data : Source_Data renames - In_Tree.Sources.Table (Source); + In_Tree.Sources.Table (Source); + begin if not Src_Data.Declared_In_Interfaces then Src_Data.In_Interfaces := False; @@ -2634,8 +2644,10 @@ package body Prj.Nmsc is -- Check that a list of unit names contains only valid names procedure Get_Exceptions (Kind : Source_Kind); + -- Comment required ??? procedure Get_Unit_Exceptions (Kind : Source_Kind); + -- Comment required ??? ---------------------- -- Check_Unit_Names -- @@ -3553,12 +3565,10 @@ package body Prj.Nmsc is Src_Id := Proj_Data.First_Source; while Src_Id /= No_Source loop declare - Src : Source_Data renames - In_Tree.Sources.Table (Src_Id); + Src : Source_Data renames In_Tree.Sources.Table (Src_Id); begin exit when Src.Lang_Kind /= File_Based or else Src.Kind /= Spec; - Src_Id := Src.Next_In_Project; end; end loop; @@ -7394,16 +7404,16 @@ package body Prj.Nmsc is -- For other language, the source is simply removed. declare - Source : Source_Id; + Source : Source_Id; begin Source := Data.First_Source; while Source /= No_Source loop declare Src_Data : Source_Data renames - In_Tree.Sources.Table (Source); - begin + In_Tree.Sources.Table (Source); + begin if Src_Data.Naming_Exception and then Src_Data.Path = No_Path_Information then @@ -8145,15 +8155,15 @@ package body Prj.Nmsc is while Source /= No_Source loop declare Src_Data : Source_Data renames - In_Tree.Sources.Table (Source); + In_Tree.Sources.Table (Source); begin if Unit /= No_Name and then Src_Data.Unit = Unit and then ((Src_Data.Kind = Spec and then Kind = Impl) - or else - (Src_Data.Kind = Impl and then Kind = Spec)) + or else + (Src_Data.Kind = Impl and then Kind = Spec)) then Other_Part := Source; @@ -8481,12 +8491,10 @@ package body Prj.Nmsc is Source := Data.First_Source; while Source /= No_Source loop declare - Src_Data : Source_Data renames - In_Tree.Sources.Table (Source); + Src_Data : Source_Data renames In_Tree.Sources.Table (Source); begin - -- A file that is excluded cannot also be an exception file - -- name + -- An excluded file cannot also be an exception file name if Excluded_Sources_Htable.Get (Src_Data.File) /= No_File_Found @@ -8514,13 +8522,12 @@ package body Prj.Nmsc is Source_Names.Set (K => Src_Data.File, E => Name_Loc); - -- If this is an Ada exception, record it in table - -- Unit_Exceptions + -- If this is an Ada exception, record in table Unit_Exceptions if Src_Data.Unit /= No_Name then declare Unit_Except : Unit_Exception := - Unit_Exceptions.Get (Src_Data.Unit); + Unit_Exceptions.Get (Src_Data.Unit); begin Unit_Except.Name := Src_Data.Unit; @@ -8548,11 +8555,10 @@ package body Prj.Nmsc is while FF /= No_File_Found loop OK := False; Source := In_Tree.First_Source; - while Source /= No_Source loop declare Src_Data : Source_Data renames - In_Tree.Sources.Table (Source); + In_Tree.Sources.Table (Source); begin if Src_Data.File = FF.File then @@ -8625,12 +8631,12 @@ package body Prj.Nmsc is while Src_Id /= No_Source loop declare Src_Data : Source_Data renames - In_Tree.Sources.Table (Src_Id); + In_Tree.Sources.Table (Src_Id); begin if Src_Data.Compiled and then Src_Data.Object_Exists and then Project_Extends - (Project, Src_Data.Project, In_Tree) + (Project, Src_Data.Project, In_Tree) then if Src_Data.Unit = No_Name then if Src_Data.Kind = Impl then @@ -8656,10 +8662,9 @@ package body Prj.Nmsc is declare Src_Ind : constant Source_File_Index := - Sinput.P.Load_Project_File - (Get_Name_String - (Src_Data.Path.Name)); - + Sinput.P.Load_Project_File + (Get_Name_String + (Src_Data.Path.Name)); begin if Sinput.P.Source_File_Is_Subunit (Src_Ind) diff --git a/gcc/ada/prj.adb b/gcc/ada/prj.adb index 505e2dad3d1..ca804d9b0a8 100644 --- a/gcc/ada/prj.adb +++ b/gcc/ada/prj.adb @@ -857,6 +857,7 @@ package body Prj is Units_Htable.Reset (Tree.Units_HT); Files_Htable.Reset (Tree.Files_HT); Source_Paths_Htable.Reset (Tree.Source_Paths_HT); + Unit_Sources_Htable.Reset (Tree.Unit_Sources_HT); -- Private part table diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads index 18bbd197aa0..c8ce1773d99 100644 --- a/gcc/ada/prj.ads +++ b/gcc/ada/prj.ads @@ -696,7 +696,7 @@ package Prj is Object_Exists : Boolean := True; -- True if an object file exists - Object_Linked : Boolean := True; + Object_Linked : Boolean := True; -- False if the object file is not use to link executables or included -- in libraries. @@ -804,6 +804,14 @@ package Prj is Equal => "="); -- Mapping of source paths to source ids + package Unit_Sources_Htable is new Simple_HTable + (Header_Num => Header_Num, + Element => Source_Id, + No_Element => No_Source, + Key => Name_Id, + Hash => Hash, + Equal => "="); + type Verbosity is (Default, Medium, High); -- Verbosity when parsing GNAT Project Files -- Default is default (very quiet, if no errors). @@ -1464,6 +1472,7 @@ package Prj is Units_HT : Units_Htable.Instance; Files_HT : Files_Htable.Instance; Source_Paths_HT : Source_Paths_Htable.Instance; + Unit_Sources_HT : Unit_Sources_Htable.Instance; -- Private part diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index cee2069a030..fef7407fa28 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -11253,7 +11253,7 @@ package body Sem_Prag is GNAT_Pragma; Check_Arg_Count (1); Check_Optional_Identifier (Arg1, Name_Entity); - Check_Arg_Is_Local_Name (Arg1); + Check_Arg_Is_Library_Level_Local_Name (Arg1); Id := Expression (Arg1); Analyze (Id); @@ -11273,6 +11273,7 @@ package body Sem_Prag is end if; Set_Has_Pragma_Thread_Local_Storage (E); + Set_Has_Gigi_Rep_Item (E); end Thread_Local_Storage; ---------------- -- 2.30.2