diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-02-06 11:11:07 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-02-06 11:11:07 +0100 |
commit | a0367a97c5b4c714b43066ea44c66333f0526056 (patch) | |
tree | fa134c2379a030767243524185079b49ece51c23 /gcc/ada | |
parent | ce3904da34e70f926123e730107380dede9353d3 (diff) | |
download | gcc-a0367a97c5b4c714b43066ea44c66333f0526056.zip gcc-a0367a97c5b4c714b43066ea44c66333f0526056.tar.gz gcc-a0367a97c5b4c714b43066ea44c66333f0526056.tar.bz2 |
[multiple changes]
2014-02-06 Pascal Obry <obry@adacore.com>
* prj-util.adb (For_Interface_Sources): Fix handling of required
bodies for aggregate libs.
2014-02-06 Robert Dewar <dewar@adacore.com>
* nlists.ads: Minor comment clarifications.
2014-02-06 Robert Dewar <dewar@adacore.com>
* gnat1drv.adb (Adjust_Global_Switches): Set Modify_Tree_For_C
if gnatd.V set.
* opt.ads (Modify_Tree_For_C): New flag.
* output.ads, output.adb (Last_Char): New function.
2014-02-06 Pascal Obry <obry@adacore.com>
* projects.texi, prj-env.adb (Initialize_Default_Project_Path): Add
share/gpr for cross-builds.
From-SVN: r207542
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 21 | ||||
-rw-r--r-- | gcc/ada/gnat1drv.adb | 6 | ||||
-rw-r--r-- | gcc/ada/nlists.ads | 4 | ||||
-rw-r--r-- | gcc/ada/opt.ads | 7 | ||||
-rw-r--r-- | gcc/ada/output.adb | 13 | ||||
-rw-r--r-- | gcc/ada/output.ads | 4 | ||||
-rw-r--r-- | gcc/ada/prj-env.adb | 50 | ||||
-rw-r--r-- | gcc/ada/prj-util.adb | 6 | ||||
-rw-r--r-- | gcc/ada/projects.texi | 3 |
9 files changed, 95 insertions, 19 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index ddd91dc..87a36e6 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,24 @@ +2014-02-06 Pascal Obry <obry@adacore.com> + + * prj-util.adb (For_Interface_Sources): Fix handling of required + bodies for aggregate libs. + +2014-02-06 Robert Dewar <dewar@adacore.com> + + * nlists.ads: Minor comment clarifications. + +2014-02-06 Robert Dewar <dewar@adacore.com> + + * gnat1drv.adb (Adjust_Global_Switches): Set Modify_Tree_For_C + if gnatd.V set. + * opt.ads (Modify_Tree_For_C): New flag. + * output.ads, output.adb (Last_Char): New function. + +2014-02-06 Pascal Obry <obry@adacore.com> + + * projects.texi, prj-env.adb (Initialize_Default_Project_Path): Add + share/gpr for cross-builds. + 2014-02-06 Robert Dewar <dewar@adacore.com> * exp_util.ads, checks.adb, sem_prag.adb, prj-util.adb, sem_ch13.adb: diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb index f5c312a..cfa89b1 100644 --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -117,6 +117,12 @@ procedure Gnat1drv is Relaxed_RM_Semantics := True; end if; + -- -gnatd.V enables special C expansion mode + + if Debug_Flag_Dot_VV then + Modify_Tree_For_C := True; + end if; + -- -gnatd.E sets Error_To_Warning mode, causing selected error messages -- to be treated as warnings instead of errors. diff --git a/gcc/ada/nlists.ads b/gcc/ada/nlists.ads index 5fd66de..42c280e 100644 --- a/gcc/ada/nlists.ads +++ b/gcc/ada/nlists.ads @@ -346,7 +346,9 @@ package Nlists is function No (List : List_Id) return Boolean; pragma Inline (No); -- Tests given Id for equality with No_List. This allows notations like - -- "if No (Statements)" as opposed to "if Statements = No_List". + -- "if No (Statements)" as opposed to "if Statements = No_List". Note that + -- an empty list gives False for this test, as opposed to Is_Empty_List + -- which gives True either for No_List or for an empty list. function Present (List : List_Id) return Boolean; pragma Inline (Present); diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index 1b192a0..c52435b 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -996,6 +996,13 @@ package Opt is -- GNATMAKE -- Set to True if minimal recompilation mode requested + Modify_Tree_For_C : Boolean := False; + -- GNAT + -- If this switch is set True (currently it is set only by -gnatd.V), then + -- certain meaning-preserving transformations are applied to the tree to + -- make it easier to interface with back ends that implement C semantics. + -- There is a section in Sinfo which describes the transformations made. + Multiple_Unit_Index : Int := 0; -- GNAT -- This is set non-zero if the current unit is being compiled in multiple diff --git a/gcc/ada/output.adb b/gcc/ada/output.adb index da3c25d..901c922 100644 --- a/gcc/ada/output.adb +++ b/gcc/ada/output.adb @@ -181,6 +181,19 @@ package body Output is (Cur_Indentation + Indentation_Amount) mod Indentation_Limit; end Indent; + --------------- + -- Last_Char -- + --------------- + + function Last_Char return Character is + begin + if Next_Col /= 1 then + return Buffer (Next_Col - 1); + else + return ASCII.NUL; + end if; + end Last_Char; + ------------- -- Outdent -- ------------- diff --git a/gcc/ada/output.ads b/gcc/ada/output.ads index bcbca57..715a26a 100644 --- a/gcc/ada/output.ads +++ b/gcc/ada/output.ads @@ -137,6 +137,10 @@ package Output is procedure Write_Line (S : String); -- Equivalent to Write_Str (S) followed by Write_Eol; + function Last_Char return Character; + -- Returns last character written on the current line, or null if the + -- current line is (so far) empty. + function Column return Pos; pragma Inline (Column); -- Returns the number of the column about to be written (e.g. a value of 1 diff --git a/gcc/ada/prj-env.adb b/gcc/ada/prj-env.adb index b50481e..43bc578 100644 --- a/gcc/ada/prj-env.adb +++ b/gcc/ada/prj-env.adb @@ -148,7 +148,7 @@ package body Prj.Env is if Recursive then -- If it is the first time we call this function for this project, - -- compute the source path + -- compute the source path. if Project.Ada_Include_Path = null then Buffer := new String (1 .. Buffer_Initial); @@ -292,7 +292,6 @@ package body Prj.Env is for Index in Object_Path_Table.First .. Object_Path_Table.Last (Object_Paths) loop - -- If it is, remove it, and add it as the last one if Object_Paths.Table (Index) = Object_Dir then @@ -323,9 +322,10 @@ package body Prj.Env is Buffer : in out String_Access; Buffer_Last : in out Natural) is - Current : String_List_Id := Source_Dirs; + Current : String_List_Id; Source_Dir : String_Element; begin + Current := Source_Dirs; while Current /= Nil_String loop Source_Dir := Shared.String_Elements.Table (Current); Add_To_Path (Get_Name_String (Source_Dir.Display_Value), @@ -359,11 +359,10 @@ package body Prj.Env is -- Note: the order of the conditions below is important, since -- it ensures a minimal number of string comparisons. - if (J = Path'First - or else Path (J - 1) = Path_Separator) + if (J = Path'First or else Path (J - 1) = Path_Separator) and then (J + Dir'Length > Path'Last - or else Path (J + Dir'Length) = Path_Separator) + or else Path (J + Dir'Length) = Path_Separator) and then Dir = Path (J .. J + Dir'Length - 1) then return True; @@ -426,13 +425,14 @@ package body Prj.Env is Shared : Shared_Project_Tree_Data_Access; Source_Paths : in out Source_Path_Table.Instance) is - Current : String_List_Id := Source_Dirs; + Current : String_List_Id; Source_Dir : String_Element; Add_It : Boolean; begin -- Add each source directory + Current := Source_Dirs; while Current /= Nil_String loop Source_Dir := Shared.String_Elements.Table (Current); Add_It := True; @@ -1088,15 +1088,17 @@ package body Prj.Env is Unit := Units_Htable.Get_First (In_Tree.Units_HT); while Unit /= null loop + -- Check for body if not Main_Project_Only or else (Unit.File_Names (Impl) /= null - and then Unit.File_Names (Impl).Project = The_Project) + and then Unit.File_Names (Impl).Project = The_Project) then declare Current_Name : File_Name_Type; + begin -- Case of a body present @@ -1365,8 +1367,8 @@ package body Prj.Env is (Namet.Get_Name_String (Unit.File_Names (Spec).File) = Original_Name or else (Unit.File_Names (Spec).Path /= No_Path_Information - and then - Namet.Get_Name_String + and then + Namet.Get_Name_String (Unit.File_Names (Spec).Path.Name) = Original_Name)) then @@ -1481,7 +1483,6 @@ package body Prj.Env is Write_Line ("List of Sources:"); Unit := Units_Htable.Get_First (In_Tree.Units_HT); - while Unit /= No_Unit_Index loop Write_Str (" "); Write_Line (Namet.Get_Name_String (Unit.Name)); @@ -2121,6 +2122,21 @@ package body Prj.Env is Add_Str_To_Name_Buffer ("lib" & Directory_Separator & "gnat"); + + -- $prefix/$target/share/gpr + + Add_Str_To_Name_Buffer + (Path_Separator & Prefix.all & Target_Name); + + -- Note: Target_Name has a trailing / when it comes from + -- Sdefault. + + if Name_Buffer (Name_Len) /= '/' then + Add_Char_To_Name_Buffer (Directory_Separator); + end if; + + Add_Str_To_Name_Buffer + ("share" & Directory_Separator & "gpr"); end if; -- $prefix/share/gpr @@ -2172,8 +2188,8 @@ package body Prj.Env is (Self : Project_Search_Path; Path : String) return String_Access is - First : Natural; - Last : Natural; + First : Natural; + Last : Natural; begin if Current_Verbosity = High then @@ -2328,15 +2344,15 @@ package body Prj.Env is Result := Try_Path_Name (Self, - Directory & Directory_Separator & - File & Project_File_Extension); + Directory & Directory_Separator + & File & Project_File_Extension); end if; -- Then we try <directory>/<file_name> if Result = null then - Result := Try_Path_Name - (Self, Directory & Directory_Separator & File); + Result := + Try_Path_Name (Self, Directory & Directory_Separator & File); end if; end if; diff --git a/gcc/ada/prj-util.adb b/gcc/ada/prj-util.adb index 625bae1..d369ae2 100644 --- a/gcc/ada/prj-util.adb +++ b/gcc/ada/prj-util.adb @@ -530,7 +530,11 @@ package body Prj.Util is -- Now handle the bodies and separates if needed if Deps.Length /= 0 then - Iter := For_Each_Source (Tree, Project); + if Project.Qualifier = Aggregate_Library then + Iter := For_Each_Source (Tree); + else + Iter := For_Each_Source (Tree, Project); + end if; loop Sid := Element (Iter); diff --git a/gcc/ada/projects.texi b/gcc/ada/projects.texi index 1040a6d..dcc108d 100644 --- a/gcc/ada/projects.texi +++ b/gcc/ada/projects.texi @@ -1254,6 +1254,9 @@ the search stops: @item @file{<prefix>/<target>/lib/gnat} (for @command{gnatmake} in all cases, and for @command{gprbuild} if option @option{--target} is specified) + @item @file{<prefix>/<target>/share/gpr} + (for @command{gnatmake} in all cases, and for @command{gprbuild} if option + @option{--target} is specified) @item @file{<prefix>/share/gpr/} (for @command{gnatmake} and @command{gprbuild}) @item @file{<prefix>/lib/gnat/} |