diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-12-23 10:36:49 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-12-23 10:36:49 +0100 |
commit | a17e8c059369ccc8a65fef8bdc33af01fb3da864 (patch) | |
tree | ac173532856e499f071301288be35fa355582b5c /gcc | |
parent | 7471389a77a42e571105fc0b03738a1c3e4ca50d (diff) | |
download | gcc-a17e8c059369ccc8a65fef8bdc33af01fb3da864.zip gcc-a17e8c059369ccc8a65fef8bdc33af01fb3da864.tar.gz gcc-a17e8c059369ccc8a65fef8bdc33af01fb3da864.tar.bz2 |
[multiple changes]
2011-12-23 Pascal Obry <obry@adacore.com>
* prj.ads (For_Every_Project_Imported): Add In_Aggregate_Lib
parameter to generic formal procedure.
* prj.adb (For_Every_Project_Imported): Update accordingly.
(Recursive_Check): Likewise. Do not parse imported project for
aggregate library. This is needed as the imported projects are
there just to handle dependencies.
(Look_For_Sources): Likewise.
(Recursive_Add): Likewise.
* prj-env.adb, prj-conf.adb, makeutl.adb, gnatcmd.adb:
Add In_Aggregate_Lib parameter to routines used with
For_Every_Project_Imported generic procedure.
* prj-nmsc.adb (Tree_Processing_Data): Add In_Aggregate_Lib field.
(Check): Move where it is used. Fix implementation
to not check libraries that are inside aggregate libraries.
(Recursive_Check): Add In_Aggregate_Lib parameter.
2011-12-23 Ed Schonberg <schonberg@adacore.com>
* sem_ch7.adb (Analyze_Package_Body, Has_Referencer): A generic
package is a referencer regardless of whether there is a
subsequent subprogram with an Inline pragma.
2011-12-23 Geert Bosch <bosch@adacore.com>
* sem_ch3.adb (Can_Derive_From): Check matching Float_Rep on VMS.
From-SVN: r182656
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 28 | ||||
-rw-r--r-- | gcc/ada/gnatcmd.adb | 4 | ||||
-rw-r--r-- | gcc/ada/makeutl.adb | 33 | ||||
-rw-r--r-- | gcc/ada/prj-conf.adb | 30 | ||||
-rw-r--r-- | gcc/ada/prj-env.adb | 112 | ||||
-rw-r--r-- | gcc/ada/prj-nmsc.adb | 311 | ||||
-rw-r--r-- | gcc/ada/prj.adb | 94 | ||||
-rw-r--r-- | gcc/ada/prj.ads | 11 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.adb | 13 | ||||
-rw-r--r-- | gcc/ada/sem_ch7.adb | 10 |
10 files changed, 383 insertions, 263 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index c8e27d2..37f011b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,33 @@ 2011-12-23 Pascal Obry <obry@adacore.com> + * prj.ads (For_Every_Project_Imported): Add In_Aggregate_Lib + parameter to generic formal procedure. + * prj.adb (For_Every_Project_Imported): Update accordingly. + (Recursive_Check): Likewise. Do not parse imported project for + aggregate library. This is needed as the imported projects are + there just to handle dependencies. + (Look_For_Sources): Likewise. + (Recursive_Add): Likewise. + * prj-env.adb, prj-conf.adb, makeutl.adb, gnatcmd.adb: + Add In_Aggregate_Lib parameter to routines used with + For_Every_Project_Imported generic procedure. + * prj-nmsc.adb (Tree_Processing_Data): Add In_Aggregate_Lib field. + (Check): Move where it is used. Fix implementation + to not check libraries that are inside aggregate libraries. + (Recursive_Check): Add In_Aggregate_Lib parameter. + +2011-12-23 Ed Schonberg <schonberg@adacore.com> + + * sem_ch7.adb (Analyze_Package_Body, Has_Referencer): A generic + package is a referencer regardless of whether there is a + subsequent subprogram with an Inline pragma. + +2011-12-23 Geert Bosch <bosch@adacore.com> + + * sem_ch3.adb (Can_Derive_From): Check matching Float_Rep on VMS. + +2011-12-23 Pascal Obry <obry@adacore.com> + * gnatcmd.adb, prj.adb, prj-nmsc.adb: Minor reformatting. 2011-12-22 Hristian Kirtchev <kirtchev@adacore.com> diff --git a/gcc/ada/gnatcmd.adb b/gcc/ada/gnatcmd.adb index b0a9fd1..361840c 100644 --- a/gcc/ada/gnatcmd.adb +++ b/gcc/ada/gnatcmd.adb @@ -264,6 +264,7 @@ procedure GNATCmd is procedure Set_Library_For (Project : Project_Id; Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; Libraries_Present : in out Boolean); -- If Project is a library project, add the correct -L and -l switches to -- the linker invocation. @@ -1264,9 +1265,10 @@ procedure GNATCmd is procedure Set_Library_For (Project : Project_Id; Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; Libraries_Present : in out Boolean) is - pragma Unreferenced (Tree); + pragma Unreferenced (Tree, In_Aggregate_Lib); Path_Option : constant String_Access := MLib.Linker_Library_Path_Option; diff --git a/gcc/ada/makeutl.adb b/gcc/ada/makeutl.adb index 119bcbd..df4bd2c 100644 --- a/gcc/ada/makeutl.adb +++ b/gcc/ada/makeutl.adb @@ -692,9 +692,10 @@ package body Makeutl is is procedure Recursive_Add - (Project : Project_Id; - Tree : Project_Tree_Ref; - Extended : in out Boolean); + (Project : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Extended : in out Boolean); -- Add all the source directories of a project to the path only if -- this project has not been visited. Calls itself recursively for -- projects being extended, and imported projects. @@ -731,14 +732,18 @@ package body Makeutl is ------------------- procedure Recursive_Add - (Project : Project_Id; - Tree : Project_Tree_Ref; - Extended : in out Boolean) + (Project : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Extended : in out Boolean) is + pragma Unreferenced (In_Aggregate_Lib); + Current : String_List_Id; Dir : String_Element; OK : Boolean := False; Lang_Proc : Language_Ptr := Project.Languages; + begin -- Add to path all directories of this project @@ -1229,9 +1234,10 @@ package body Makeutl is In_Tree : Project_Tree_Ref) return String_List is procedure Recursive_Add - (Proj : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Boolean); + (Proj : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean); -- The recursive routine used to add linker options ------------------- @@ -1239,11 +1245,12 @@ package body Makeutl is ------------------- procedure Recursive_Add - (Proj : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Boolean) + (Proj : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean) is - pragma Unreferenced (Dummy); + pragma Unreferenced (Dummy, In_Aggregate_Lib); Linker_Package : Package_Id; Options : Variable_Value; diff --git a/gcc/ada/prj-conf.adb b/gcc/ada/prj-conf.adb index 4283dfc..1018781 100644 --- a/gcc/ada/prj-conf.adb +++ b/gcc/ada/prj-conf.adb @@ -728,9 +728,10 @@ package body Prj.Conf is Value_Of (Name_Ide, Project.Decl.Packages, Shared); procedure Add_Config_Switches_For_Project - (Project : Project_Id; - Tree : Project_Tree_Ref; - With_State : in out Integer); + (Project : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + With_State : in out Integer); -- Add all --config switches for this project. This is also called -- for aggregate projects. @@ -739,11 +740,13 @@ package body Prj.Conf is ------------------------------------- procedure Add_Config_Switches_For_Project - (Project : Project_Id; - Tree : Project_Tree_Ref; - With_State : in out Integer) + (Project : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + With_State : in out Integer) is - pragma Unreferenced (With_State); + pragma Unreferenced (With_State, In_Aggregate_Lib); + Shared : constant Shared_Project_Tree_Data_Access := Tree.Shared; Variable : Variable_Value; @@ -757,9 +760,8 @@ package body Prj.Conf is Variable := Value_Of (Name_Languages, Project.Decl.Attributes, Shared); - if Variable = Nil_Variable_Value - or else Variable.Default - then + if Variable = Nil_Variable_Value or else Variable.Default then + -- Languages is not declared. If it is not an extending -- project, or if it extends a project with no Languages, -- check for Default_Language. @@ -792,17 +794,17 @@ package body Prj.Conf is Lang := Name_Find; Language_Htable.Set (Lang, Lang); - else - -- If no default language is declared, default to Ada + -- If no default language is declared, default to Ada + else Language_Htable.Set (Name_Ada, Name_Ada); end if; end if; elsif Variable.Values /= Nil_String then - -- Attribute Languages is declared with a non empty - -- list: put all the languages in Language_HTable. + -- Attribute Languages is declared with a non empty list: + -- put all the languages in Language_HTable. List := Variable.Values; while List /= Nil_String loop diff --git a/gcc/ada/prj-env.adb b/gcc/ada/prj-env.adb index bce59d9..1ff9a5c 100644 --- a/gcc/ada/prj-env.adb +++ b/gcc/ada/prj-env.adb @@ -115,9 +115,10 @@ package body Prj.Env is Buffer_Last : Natural := 0; procedure Add - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Boolean); + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean); -- Add source dirs of Project to the path --------- @@ -125,11 +126,12 @@ package body Prj.Env is --------- procedure Add - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Boolean) + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean) is - pragma Unreferenced (Dummy); + pragma Unreferenced (Dummy, In_Aggregate_Lib); begin Add_To_Path (Project.Source_Dirs, In_Tree.Shared, Buffer, Buffer_Last); @@ -185,9 +187,10 @@ package body Prj.Env is Buffer_Last : Natural := 0; procedure Add - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Boolean); + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean); -- Add all the object directories of a project to the path --------- @@ -195,11 +198,12 @@ package body Prj.Env is --------- procedure Add - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Boolean) + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean) is - pragma Unreferenced (Dummy, In_Tree); + pragma Unreferenced (Dummy, In_Tree, In_Aggregate_Lib); Path : constant Path_Name_Type := Get_Object_Directory @@ -472,9 +476,10 @@ package body Prj.Env is Current_Naming : Naming_Id; procedure Check - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - State : in out Integer); + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + State : in out Integer); -- Recursive procedure that put in the config pragmas file any non -- standard naming schemes, if it is not already in the file, then call -- itself for any imported project. @@ -496,11 +501,12 @@ package body Prj.Env is ----------- procedure Check - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - State : in out Integer) + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + State : in out Integer) is - pragma Unreferenced (State); + pragma Unreferenced (State, In_Aggregate_Lib); Lang : constant Language_Ptr := Get_Language_From_Name (Project, "ada"); @@ -786,9 +792,10 @@ package body Prj.Env is -- Put the line contained in the Name_Buffer in the global buffer procedure Process - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - State : in out Integer); + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + State : in out Integer); -- Generate the mapping file for Project (not recursively) --------------------- @@ -811,11 +818,12 @@ package body Prj.Env is ------------- procedure Process - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - State : in out Integer) + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + State : in out Integer) is - pragma Unreferenced (State); + pragma Unreferenced (State, In_Aggregate_Lib); Source : Source_Id; Suffix : File_Name_Type; @@ -1225,9 +1233,10 @@ package body Prj.Env is Tree : Project_Tree_Ref) is procedure For_Project - (Prj : Project_Id; - Tree : Project_Tree_Ref; - Dummy : in out Integer); + (Prj : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Integer); -- Get all object directories of Prj ----------------- @@ -1235,11 +1244,12 @@ package body Prj.Env is ----------------- procedure For_Project - (Prj : Project_Id; - Tree : Project_Tree_Ref; - Dummy : in out Integer) + (Prj : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Integer) is - pragma Unreferenced (Dummy, Tree); + pragma Unreferenced (Dummy, Tree, In_Aggregate_Lib); begin -- ??? Set_Ada_Paths has a different behavior for library project @@ -1270,9 +1280,10 @@ package body Prj.Env is In_Tree : Project_Tree_Ref) is procedure For_Project - (Prj : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Integer); + (Prj : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Integer); -- Get all object directories of Prj ----------------- @@ -1280,11 +1291,12 @@ package body Prj.Env is ----------------- procedure For_Project - (Prj : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Integer) + (Prj : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Integer) is - pragma Unreferenced (Dummy); + pragma Unreferenced (Dummy, In_Aggregate_Lib); Current : String_List_Id := Prj.Source_Dirs; The_String : String_Element; @@ -1642,9 +1654,10 @@ package body Prj.Env is Buffer_Last : Natural := 0; procedure Recursive_Add - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Boolean); + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean); -- Recursive procedure to add the source/object paths of extended/ -- imported projects. @@ -1653,11 +1666,12 @@ package body Prj.Env is ------------------- procedure Recursive_Add - (Project : Project_Id; - In_Tree : Project_Tree_Ref; - Dummy : in out Boolean) + (Project : Project_Id; + In_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean) is - pragma Unreferenced (Dummy, In_Tree); + pragma Unreferenced (Dummy, In_Tree, In_Aggregate_Lib); Path : Path_Name_Type; diff --git a/gcc/ada/prj-nmsc.adb b/gcc/ada/prj-nmsc.adb index 7c5d5f3..21dc916 100644 --- a/gcc/ada/prj-nmsc.adb +++ b/gcc/ada/prj-nmsc.adb @@ -151,9 +151,10 @@ package body Prj.Nmsc is -- be discarded as soon as we have finished processing the project type Tree_Processing_Data is record - Tree : Project_Tree_Ref; - Node_Tree : Prj.Tree.Project_Node_Tree_Ref; - Flags : Prj.Processing_Flags; + Tree : Project_Tree_Ref; + Node_Tree : Prj.Tree.Project_Node_Tree_Ref; + Flags : Prj.Processing_Flags; + In_Aggregate_Lib : Boolean; end record; -- Temporary data which is needed while parsing a project. It does not need -- to be kept in memory once a project has been fully loaded, but is @@ -185,11 +186,6 @@ package body Prj.Nmsc is procedure Free (Data : in out Tree_Processing_Data); -- Free the memory occupied by Data - procedure Check - (Project : Project_Id; - Data : in out Tree_Processing_Data); - -- Process the naming scheme for a single project - procedure Initialize (Data : in out Project_Processing_Data; Project : Project_Id); @@ -728,6 +724,7 @@ package body Prj.Nmsc is elsif Prev_Unit /= No_Unit_Index and then Prev_Unit.File_Names (Kind) /= null and then not Source.Locally_Removed + and then not Data.In_Aggregate_Lib then -- Path is set if this is a source we found on the disk, in which -- case we can provide more explicit error message. Path is unset @@ -765,6 +762,7 @@ package body Prj.Nmsc is and then not Data.Flags.Allow_Duplicate_Basenames and then Lang_Id.Config.Kind = Unit_Based and then Source.Language.Config.Kind = Unit_Based + and then not Data.In_Aggregate_Lib then Error_Msg_File_1 := File_Name; Error_Msg_File_2 := File_Name_Type (Source.Project.Name); @@ -924,9 +922,10 @@ package body Prj.Nmsc is Flags : Processing_Flags) is Data : Tree_Processing_Data := - (Tree => Tree, - Node_Tree => Node_Tree, - Flags => Flags); + (Tree => Tree, + Node_Tree => Node_Tree, + Flags => Flags, + In_Aggregate_Lib => False); Project_Files : constant Prj.Variable_Value := Prj.Util.Value_Of @@ -1012,132 +1011,6 @@ package body Prj.Nmsc is Free (Project_Path_For_Aggregate); end Process_Aggregated_Projects; - ----------- - -- Check -- - ----------- - - procedure Check - (Project : Project_Id; - Data : in out Tree_Processing_Data) - is - procedure Check_Aggregate - (Project : Project_Id; - Data : in out Tree_Processing_Data); - -- Check the aggregate project attributes, reject any not supported - -- attributes. - - --------------------- - -- Check_Aggregate -- - --------------------- - - procedure Check_Aggregate - (Project : Project_Id; - Data : in out Tree_Processing_Data) - is - procedure Check_Not_Defined (Name : Name_Id); - -- Report an error if Var is defined - - ----------------------- - -- Check_Not_Defined -- - ----------------------- - - procedure Check_Not_Defined (Name : Name_Id) is - Var : constant Prj.Variable_Value := - Prj.Util.Value_Of - (Name, - Project.Decl.Attributes, - Data.Tree.Shared); - begin - if not Var.Default then - Error_Msg_Name_1 := Name; - Error_Msg - (Data.Flags, "wrong attribute %% in aggregate library", - Var.Location, Project); - end if; - end Check_Not_Defined; - - -- Start of processing for Check_Not_Defined - - begin - Check_Not_Defined (Snames.Name_Library_Dir); - Check_Not_Defined (Snames.Name_Library_Interface); - Check_Not_Defined (Snames.Name_Library_Name); - Check_Not_Defined (Snames.Name_Library_Ali_Dir); - Check_Not_Defined (Snames.Name_Library_Src_Dir); - Check_Not_Defined (Snames.Name_Library_Options); - Check_Not_Defined (Snames.Name_Library_Standalone); - Check_Not_Defined (Snames.Name_Library_Kind); - Check_Not_Defined (Snames.Name_Leading_Library_Options); - Check_Not_Defined (Snames.Name_Library_Version); - end Check_Aggregate; - - Shared : constant Shared_Project_Tree_Data_Access := Data.Tree.Shared; - Prj_Data : Project_Processing_Data; - - begin - Debug_Increase_Indent ("check", Project.Name); - - Initialize (Prj_Data, Project); - - Check_If_Externally_Built (Project, Data); - - case Project.Qualifier is - when Aggregate => - null; - - when Aggregate_Library => - if Project.Object_Directory = No_Path_Information then - Project.Object_Directory := Project.Directory; - end if; - - when others => - Get_Directories (Project, Data); - Check_Programming_Languages (Project, Data); - - if Current_Verbosity = High then - Show_Source_Dirs (Project, Shared); - end if; - - if Project.Qualifier = Dry then - Check_Abstract_Project (Project, Data); - end if; - end case; - - -- Check configuration. This must be done even for gnatmake (even though - -- no user configuration file was provided) since the default config we - -- generate indicates whether libraries are supported for instance. - - Check_Configuration (Project, Data); - - -- For aggregate project checks that no library attributes are defined - - if Project.Qualifier = Aggregate then - Check_Aggregate (Project, Data); - - else - Check_Library_Attributes (Project, Data); - Check_Package_Naming (Project, Data); - - -- An aggregate library has no source, no need to look for them - - if Project.Qualifier /= Aggregate_Library then - Look_For_Sources (Prj_Data, Data); - end if; - - Check_Interfaces (Project, Data); - - if Project.Library then - Check_Stand_Alone_Library (Project, Data); - end if; - - Get_Mains (Project, Data); - end if; - - Free (Prj_Data); - - Debug_Decrease_Indent ("done check"); - end Check; - ---------------------------- -- Check_Abstract_Project -- ---------------------------- @@ -3219,7 +3092,7 @@ package body Prj.Nmsc is Lib_Name.Location, Project); end if; - when Library => + when Library | Aggregate_Library => if not Project.Library then if Project.Library_Name = No_Name then Error_Msg @@ -3579,7 +3452,7 @@ package body Prj.Nmsc is end loop; end if; - if Project.Library then + if Project.Library and not Data.In_Aggregate_Lib then -- Record the library name @@ -8313,20 +8186,163 @@ package body Prj.Nmsc is Node_Tree : Prj.Tree.Project_Node_Tree_Ref; Flags : Processing_Flags) is + + procedure Check + (Project : Project_Id; + In_Aggregate_Lib : Boolean; + Data : in out Tree_Processing_Data); + -- Process the naming scheme for a single project + procedure Recursive_Check - (Project : Project_Id; - Prj_Tree : Project_Tree_Ref; - Data : in out Tree_Processing_Data); + (Project : Project_Id; + Prj_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Data : in out Tree_Processing_Data); -- Check_Naming_Scheme for the project + ----------- + -- Check -- + ----------- + + procedure Check + (Project : Project_Id; + In_Aggregate_Lib : Boolean; + Data : in out Tree_Processing_Data) + is + procedure Check_Aggregate + (Project : Project_Id; + Data : in out Tree_Processing_Data); + -- Check the aggregate project attributes, reject any not supported + -- attributes. + + --------------------- + -- Check_Aggregate -- + --------------------- + + procedure Check_Aggregate + (Project : Project_Id; + Data : in out Tree_Processing_Data) + is + + procedure Check_Not_Defined (Name : Name_Id); + -- Report an error if Var is defined + + ----------------------- + -- Check_Not_Defined -- + ----------------------- + + procedure Check_Not_Defined (Name : Name_Id) is + Var : constant Prj.Variable_Value := + Prj.Util.Value_Of + (Name, + Project.Decl.Attributes, + Data.Tree.Shared); + begin + if not Var.Default then + Error_Msg_Name_1 := Name; + Error_Msg + (Data.Flags, "wrong attribute %% in aggregate library", + Var.Location, Project); + end if; + end Check_Not_Defined; + + begin + Check_Not_Defined (Snames.Name_Library_Dir); + Check_Not_Defined (Snames.Name_Library_Interface); + Check_Not_Defined (Snames.Name_Library_Name); + Check_Not_Defined (Snames.Name_Library_Ali_Dir); + Check_Not_Defined (Snames.Name_Library_Src_Dir); + Check_Not_Defined (Snames.Name_Library_Options); + Check_Not_Defined (Snames.Name_Library_Standalone); + Check_Not_Defined (Snames.Name_Library_Kind); + Check_Not_Defined (Snames.Name_Leading_Library_Options); + Check_Not_Defined (Snames.Name_Library_Version); + end Check_Aggregate; + + Shared : constant Shared_Project_Tree_Data_Access := + Data.Tree.Shared; + Prj_Data : Project_Processing_Data; + + -- Start of processing for Check + + begin + Debug_Increase_Indent ("check", Project.Name); + + Initialize (Prj_Data, Project); + + Check_If_Externally_Built (Project, Data); + + case Project.Qualifier is + when Aggregate => + null; + + when Aggregate_Library => + if Project.Object_Directory = No_Path_Information then + Project.Object_Directory := Project.Directory; + end if; + + when others => + Get_Directories (Project, Data); + Check_Programming_Languages (Project, Data); + + if Current_Verbosity = High then + Show_Source_Dirs (Project, Shared); + end if; + + if Project.Qualifier = Dry then + Check_Abstract_Project (Project, Data); + end if; + end case; + + -- Check configuration. This must be done even for gnatmake (even + -- though no user configuration file was provided) since the default + -- config we generate indicates whether libraries are supported for + -- instance. + + Check_Configuration (Project, Data); + + -- For aggregate project check no library attributes are defined + + if Project.Qualifier = Aggregate then + Check_Aggregate (Project, Data); + + else + Check_Library_Attributes (Project, Data); + Check_Package_Naming (Project, Data); + + -- An aggregate library has no source, no need to look for them + + if Project.Qualifier /= Aggregate_Library then + Look_For_Sources (Prj_Data, Data); + end if; + + Check_Interfaces (Project, Data); + + -- If this library is part of an aggregated library don't check it + -- as it has no sources by itself and so interface won't be found. + + if Project.Library and not In_Aggregate_Lib then + Check_Stand_Alone_Library (Project, Data); + end if; + + Get_Mains (Project, Data); + end if; + + Free (Prj_Data); + + Debug_Decrease_Indent ("done check"); + end Check; + --------------------- -- Recursive_Check -- --------------------- procedure Recursive_Check - (Project : Project_Id; - Prj_Tree : Project_Tree_Ref; - Data : in out Tree_Processing_Data) is + (Project : Project_Id; + Prj_Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Data : in out Tree_Processing_Data) + is begin if Current_Verbosity = High then Debug_Increase_Indent @@ -8334,7 +8350,9 @@ package body Prj.Nmsc is end if; Data.Tree := Prj_Tree; - Prj.Nmsc.Check (Project, Data); + Data.In_Aggregate_Lib := In_Aggregate_Lib; + + Check (Project, In_Aggregate_Lib, Data); if Current_Verbosity = High then Debug_Decrease_Indent ("done Processing_Naming_Scheme"); @@ -8347,6 +8365,7 @@ package body Prj.Nmsc is Data : Tree_Processing_Data; -- Start of processing for Process_Naming_Scheme + begin Lib_Data_Table.Init; Initialize (Data, Tree => Tree, Node_Tree => Node_Tree, Flags => Flags); diff --git a/gcc/ada/prj.adb b/gcc/ada/prj.adb index c480cf33..06b2d38 100644 --- a/gcc/ada/prj.adb +++ b/gcc/ada/prj.adb @@ -528,20 +528,24 @@ package body Prj is Seen : Project_Boolean_Htable.Instance := Project_Boolean_Htable.Nil; procedure Recursive_Check - (Project : Project_Id; - Tree : Project_Tree_Ref); - -- Check if a project has already been seen. If not seen, mark it as - -- Seen, Call Action, and check all its imported projects. + (Project : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean); + -- Check if a project has already been seen. If not seen, mark it + -- as Seen, Call Action, and check all its imported and aggregated + -- projects. --------------------- -- Recursive_Check -- --------------------- procedure Recursive_Check - (Project : Project_Id; - Tree : Project_Tree_Ref) + (Project : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean) is List : Project_List; + T : Project_Tree_Ref; begin if not Get (Seen, Project) then @@ -552,22 +556,28 @@ package body Prj is Set (Seen, Project, True); if not Imported_First then - Action (Project, Tree, With_State); + Action (Project, Tree, In_Aggregate_Lib, With_State); end if; -- Visit all extended projects if Project.Extends /= No_Project then - Recursive_Check (Project.Extends, Tree); + Recursive_Check (Project.Extends, Tree, In_Aggregate_Lib); end if; - -- Visit all imported projects + -- Visit all imported projects if needed. This is not needed + -- for an aggregate library as imported libraries are just + -- there for dependency support. - List := Project.Imported_Projects; - while List /= null loop - Recursive_Check (List.Project, Tree); - List := List.Next; - end loop; + if Project.Qualifier /= Aggregate_Library + or else not Include_Aggregated + then + List := Project.Imported_Projects; + while List /= null loop + Recursive_Check (List.Project, Tree, In_Aggregate_Lib); + List := List.Next; + end loop; + end if; -- Visit all aggregated projects @@ -580,14 +590,25 @@ package body Prj is Agg := Project.Aggregated_Projects; while Agg /= null loop pragma Assert (Agg.Project /= No_Project); - Recursive_Check (Agg.Project, Agg.Tree); + + -- For aggregated libraries, the tree must be the one + -- of the aggregate library. + + if Project.Qualifier = Aggregate_Library then + T := Tree; + else + T := Agg.Tree; + end if; + + Recursive_Check + (Agg.Project, T, Project.Qualifier = Aggregate_Library); Agg := Agg.Next; end loop; end; end if; if Imported_First then - Action (Project, Tree, With_State); + Action (Project, Tree, In_Aggregate_Lib, With_State); end if; end if; end Recursive_Check; @@ -595,7 +616,7 @@ package body Prj is -- Start of processing for For_Every_Project_Imported begin - Recursive_Check (Project => By, Tree => Tree); + Recursive_Check (Project => By, Tree => Tree, In_Aggregate_Lib => False); Reset (Seen); end For_Every_Project_Imported; @@ -614,9 +635,10 @@ package body Prj is Result : Source_Id := No_Source; procedure Look_For_Sources - (Proj : Project_Id; - Tree : Project_Tree_Ref; - Src : in out Source_Id); + (Proj : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate : Boolean; + Src : in out Source_Id); -- Look for Base_Name in the sources of Proj ---------------------- @@ -624,10 +646,13 @@ package body Prj is ---------------------- procedure Look_For_Sources - (Proj : Project_Id; - Tree : Project_Tree_Ref; - Src : in out Source_Id) + (Proj : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate : Boolean; + Src : in out Source_Id) is + pragma Unreferenced (In_Aggregate); + Iterator : Source_Iterator; begin @@ -662,14 +687,14 @@ package body Prj is if In_Extended_Only then Proj := Project; while Proj /= No_Project loop - Look_For_Sources (Proj, In_Tree, Result); + Look_For_Sources (Proj, In_Tree, False, Result); exit when Result /= No_Source; Proj := Proj.Extends; end loop; elsif In_Imported_Only then - Look_For_Sources (Project, In_Tree, Result); + Look_For_Sources (Project, In_Tree, False, Result); if Result = No_Source then For_Imported_Projects @@ -680,7 +705,7 @@ package body Prj is end if; else - Look_For_Sources (No_Project, In_Tree, Result); + Look_For_Sources (No_Project, In_Tree, False, Result); end if; return Result; @@ -1365,9 +1390,10 @@ package body Prj is Project : Project_Id; procedure Recursive_Add - (Prj : Project_Id; - Tree : Project_Tree_Ref; - Dummy : in out Boolean); + (Prj : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean); -- Recursively add the projects imported by project Project, but not -- those that are extended. @@ -1376,11 +1402,13 @@ package body Prj is ------------------- procedure Recursive_Add - (Prj : Project_Id; - Tree : Project_Tree_Ref; - Dummy : in out Boolean) + (Prj : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + Dummy : in out Boolean) is - pragma Unreferenced (Dummy, Tree); + pragma Unreferenced (Dummy, Tree, In_Aggregate_Lib); + List : Project_List; Prj2 : Project_Id; diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads index 877f656..2f1ca71 100644 --- a/gcc/ada/prj.ads +++ b/gcc/ada/prj.ads @@ -1562,9 +1562,10 @@ package Prj is generic type State is limited private; with procedure Action - (Project : Project_Id; - Tree : Project_Tree_Ref; - With_State : in out State); + (Project : Project_Id; + Tree : Project_Tree_Ref; + In_Aggregate_Lib : Boolean; + With_State : in out State); procedure For_Every_Project_Imported (By : Project_Id; Tree : Project_Tree_Ref; @@ -1589,7 +1590,9 @@ package Prj is -- -- If Include_Aggregated is True, then an aggregate project will recurse -- into the projects it aggregates. Otherwise, the latter are never - -- returned + -- returned. + -- + -- In_Aggregate_Lib is True if the project is in an aggregate library -- -- The Tree argument passed to the callback is required in the case of -- aggregated projects, since they might not be using the same tree as 'By' diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 662f7e1..50c9d3d 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -15333,10 +15333,23 @@ package body Sem_Ch3 is Spec : constant Entity_Id := Real_Range_Specification (Def); begin + -- Check specified "digits" constraint + if Digs_Val > Digits_Value (E) then return False; end if; + -- Avoid types not matching pragma Float_Representation, if present + + if (Opt.Float_Format = 'I' and then Float_Rep (E) /= IEEE_Binary) + or else + (Opt.Float_Format = 'V' and then Float_Rep (E) /= VAX_Native) + then + return False; + end if; + + -- Check for matching range, if specified + if Present (Spec) then if Expr_Value_R (Type_Low_Bound (E)) > Expr_Value_R (Low_Bound (Spec)) diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb index 094837b..e30bb0c 100644 --- a/gcc/ada/sem_ch7.adb +++ b/gcc/ada/sem_ch7.adb @@ -638,7 +638,6 @@ package body Sem_Ch7 is -- Processing for package bodies elsif K = N_Package_Body - and then not Has_Referencer_Except_For_Subprograms and then Present (Corresponding_Spec (D)) then E := Corresponding_Spec (D); @@ -648,7 +647,10 @@ package body Sem_Ch7 is -- exported, i.e. where the corresponding spec is the -- spec of the current package, but because of nested -- instantiations, a fully private generic body may - -- export other private body entities. + -- export other private body entities. Furthermore, + -- regardless of whether there was a previous inlined + -- subprogram, (an instantiation of) the generic package + -- may reference any entity declared before it. if Is_Generic_Unit (E) then return True; @@ -657,7 +659,9 @@ package body Sem_Ch7 is -- this is an instance, we ignore instances since they -- cannot have references that affect outer entities. - elsif not Is_Generic_Instance (E) then + elsif not Is_Generic_Instance (E) + and then not Has_Referencer_Except_For_Subprograms + then if Has_Referencer (Declarations (D), Outer => False) then |