diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-22 09:36:25 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-06-22 09:36:25 +0000 |
commit | a6e14bbe170b50d5b949f73bc016037e073800cd (patch) | |
tree | 9f819b958fa5cdcdd7d140ae5149fc01169432de /gcc/ada | |
parent | 293f8df8c493503a01e32b779608a2eb52bbc3db (diff) | |
download | gcc-a6e14bbe170b50d5b949f73bc016037e073800cd.tar.gz |
2010-06-22 Thomas Quinot <quinot@adacore.com>
* sem_res.adb (Make_Call_Into_Operator): Use First_Subtype for better
error reporting with generic types.
2010-06-22 Thomas Quinot <quinot@adacore.com>
* bindgen.adb, bindusg.adb, gnatbind.adb, gnat_ugn.texi, opt.ads,
osint-b.adb, osint-b.ads, output.adb, output.ads, switch-b.adb,
vms_data.ads: Add a new command line switch -A to gnatbind to output
the list of all ALI files for the partition.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161153 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/ada/bindgen.adb | 10 | ||||
-rw-r--r-- | gcc/ada/bindusg.adb | 6 | ||||
-rw-r--r-- | gcc/ada/gnat_ugn.texi | 8 | ||||
-rw-r--r-- | gcc/ada/gnatbind.adb | 28 | ||||
-rw-r--r-- | gcc/ada/opt.ads | 12 | ||||
-rw-r--r-- | gcc/ada/osint-b.adb | 35 | ||||
-rw-r--r-- | gcc/ada/osint-b.ads | 20 | ||||
-rw-r--r-- | gcc/ada/output.adb | 29 | ||||
-rw-r--r-- | gcc/ada/output.ads | 8 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 4 | ||||
-rw-r--r-- | gcc/ada/switch-b.adb | 30 | ||||
-rw-r--r-- | gcc/ada/vms_data.ads | 13 |
13 files changed, 182 insertions, 33 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index df841e214ba..c255ccf509d 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,15 @@ +2010-06-22 Thomas Quinot <quinot@adacore.com> + + * sem_res.adb (Make_Call_Into_Operator): Use First_Subtype for better + error reporting with generic types. + +2010-06-22 Thomas Quinot <quinot@adacore.com> + + * bindgen.adb, bindusg.adb, gnatbind.adb, gnat_ugn.texi, opt.ads, + osint-b.adb, osint-b.ads, output.adb, output.ads, switch-b.adb, + vms_data.ads: Add a new command line switch -A to gnatbind to output + the list of all ALI files for the partition. + 2010-06-22 Arnaud Charlet <charlet@adacore.com> * s-osinte-vxworks.ads: Fix casing. diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index 49179f19fff..21118984fbd 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2010, 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- -- @@ -1936,6 +1936,10 @@ package body Bindgen is WBI (""); Write_Info_Ada_C ("-- ", "/* ", " BEGIN Object file/option list"); + if Object_List_Filename /= null then + Set_List_File (Object_List_Filename.all); + end if; + for E in Elab_Order.First .. Elab_Order.Last loop -- If not spec that has an associated body, then generate a @@ -1985,6 +1989,10 @@ package body Bindgen is end if; end loop; + if Object_List_Filename /= null then + Close_List_File; + end if; + -- Add a "-Ldir" for each directory in the object path for J in 1 .. Nb_Dir_In_Obj_Search_Path loop diff --git a/gcc/ada/bindusg.adb b/gcc/ada/bindusg.adb index ff328cba365..4702d82095b 100644 --- a/gcc/ada/bindusg.adb +++ b/gcc/ada/bindusg.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2010, 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- -- @@ -73,6 +73,10 @@ package body Bindusg is Write_Line (" -a Automatically initialize elaboration " & "procedure"); + -- Line for -A switch + + Write_Line (" -A Give list of ALI files in partition"); + -- Line for -b switch Write_Line (" -b Generate brief messages to stderr " & diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 562658753d9..cf83af32290 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -8028,6 +8028,10 @@ Specify directory to be searched for ALI files. @cindex @option{^-aI^/SOURCE_SEARCH^} (@command{gnatbind}) Specify directory to be searched for source file. +@item ^-A^/ALI_LIST^@r{[=}@var{filename}@r{]} +@cindex @option{^-A^/ALI_LIST^} (@command{gnatbind}) +Output ALI list (to standard output or to the named file). + @item ^-b^/REPORT_ERRORS=BRIEF^ @cindex @option{^-b^/REPORT_ERRORS=BRIEF^} (@command{gnatbind}) Generate brief messages to @file{stderr} even if verbose mode set. @@ -8180,9 +8184,9 @@ Name the output file @var{file} (default is @file{b~@var{xxx}.adb}). Note that if this option is used, then linking must be done manually, gnatlink cannot be used. -@item ^-O^/OBJECT_LIST^ +@item ^-O^/OBJECT_LIST^@r{[=}@var{filename}@r{]} @cindex @option{^-O^/OBJECT_LIST^} (@command{gnatbind}) -Output object list. +Output object list (to standard output or to the named file). @item ^-p^/PESSIMISTIC_ELABORATION^ @cindex @option{^-p^/PESSIMISTIC_ELABORATION^} (@command{gnatbind}) diff --git a/gcc/ada/gnatbind.adb b/gcc/ada/gnatbind.adb index bdd9702af94..c09f7955797 100644 --- a/gcc/ada/gnatbind.adb +++ b/gcc/ada/gnatbind.adb @@ -738,7 +738,7 @@ begin Free (Text); end if; - -- Acquire all information in ALI files that have been read in + -- Load ALIs for all dependent units for Index in ALIs.First .. ALIs.Last loop Read_Withed_ALIs (Index); @@ -750,6 +750,32 @@ begin raise Unrecoverable_Error; end if; + -- Output list of ALI files in closure + + if Output_ALI_List then + declare + FD : File_Descriptor; + begin + if ALI_List_Filename /= null then + Set_List_File (ALI_List_Filename.all); + end if; + + for Index in ALIs.First .. ALIs.Last loop + declare + Full_Afile : constant File_Name_Type := + Find_File (ALIs.Table (Index).Afile, Library); + begin + Write_Name (Full_Afile); + Write_Eol; + end; + end loop; + + if ALI_List_Filename /= null then + Close_List_File; + end if; + end; + end if; + -- Build source file table from the ALI files we have read in Set_Source_Table; diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index 50625ec9a22..626947b0860 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -951,9 +951,17 @@ package Opt is -- GNATBIND -- True if output of list of linker options is requested (-K switch set) - Output_Object_List : Boolean := False; + Output_ALI_List : Boolean := False; + ALI_List_Filename : String_Ptr; -- GNATBIND - -- True if output of list of objects is requested (-O switch set) + -- True if output of list of ALIs is requested (-A switch set). List is + -- output under the given filename, or standard output if not specified. + + Output_Object_List : Boolean := False; + Object_List_Filename : String_Ptr; + -- GNATBIND + -- True if output of list of objects is requested (-O switch set). List is + -- output under the given filename, or standard output if not specified. Overflow_Checks_Unsuppressed : Boolean := False; -- GNAT diff --git a/gcc/ada/osint-b.adb b/gcc/ada/osint-b.adb index b66cebf2ac2..a3062f42ddb 100644 --- a/gcc/ada/osint-b.adb +++ b/gcc/ada/osint-b.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2008, Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2010, 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- -- @@ -24,10 +24,13 @@ ------------------------------------------------------------------------------ with Opt; use Opt; +with Output; use Output; with Targparm; use Targparm; package body Osint.B is + Current_List_File : File_Descriptor := Invalid_FD; + ------------------------- -- Close_Binder_Output -- ------------------------- @@ -45,6 +48,19 @@ package body Osint.B is end Close_Binder_Output; + --------------------- + -- Close_List_File -- + --------------------- + + procedure Close_List_File is + begin + if Current_List_File /= Invalid_FD then + Close (Current_List_File); + Current_List_File := Invalid_FD; + Set_Standard_Output; + end if; + end Close_List_File; + -------------------------- -- Create_Binder_Output -- -------------------------- @@ -65,8 +81,8 @@ package body Osint.B is begin if Output_File_Name /= "" then - Name_Buffer (Output_File_Name'Range) := Output_File_Name; - Name_Buffer (Output_File_Name'Last + 1) := ASCII.NUL; + Name_Buffer (1 .. Output_File_Name'Length) := Output_File_Name; + Name_Buffer (Output_File_Name'Length + 1) := ASCII.NUL; if Typ = 's' then Name_Buffer (Output_File_Name'Last) := 's'; @@ -176,6 +192,19 @@ package body Osint.B is Current_File_Name_Index := To; end Set_Current_File_Name_Index; + procedure Set_List_File (Filename : String) is + begin + pragma Assert (Current_List_File = Invalid_FD); + Current_List_File := Create_File (Filename, Text); + + if Current_List_File = Invalid_FD then + Fail ("cannot create list file: " & Filename); + + else + Set_Output (Current_List_File); + end if; + end Set_List_File; + ----------------------- -- Write_Binder_Info -- ----------------------- diff --git a/gcc/ada/osint-b.ads b/gcc/ada/osint-b.ads index a6b601fd296..d24ec91ee21 100644 --- a/gcc/ada/osint-b.ads +++ b/gcc/ada/osint-b.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 2001-2008, Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2010, 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- -- @@ -44,9 +44,9 @@ package Osint.B is -- Binder Output -- ------------------- - -- These routines are used by the binder to generate the C source file - -- containing the binder output. The format of this file is described - -- in the package Bindfmt. + -- These routines are used by the binder to generate the C or Ada source + -- files containing the binder output. The format of these files is + -- described in package Bindgen. procedure Create_Binder_Output (Output_File_Name : String; @@ -81,4 +81,16 @@ package Osint.B is procedure Set_Current_File_Name_Index (To : Int); -- Set value of Current_File_Name_Index (in private part of Osint) to To + ---------------------------------- + -- Other binder-generated files -- + ---------------------------------- + + procedure Set_List_File (Filename : String); + -- Create Filename as a text output file and set it as the current output + -- (see Output.Set_Output). + + procedure Close_List_File; + -- If a specific output file was created by Set_List_File, close it and + -- reset the current output file to standard output. + end Osint.B; diff --git a/gcc/ada/output.adb b/gcc/ada/output.adb index 141c12fb294..8210d3f258f 100644 --- a/gcc/ada/output.adb +++ b/gcc/ada/output.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2010, 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- -- @@ -29,8 +29,6 @@ -- -- ------------------------------------------------------------------------------ -with System.OS_Lib; use System.OS_Lib; - package body Output is Current_FD : File_Descriptor := Standout; @@ -228,17 +226,26 @@ package body Output is Special_Output_Proc := P; end Set_Special_Output; - ------------------------ - -- Set_Standard_Error -- - ------------------------ + ---------------- + -- Set_Output -- + ---------------- - procedure Set_Standard_Error is + procedure Set_Output (FD : File_Descriptor) is begin if Special_Output_Proc = null then Flush_Buffer; end if; - Current_FD := Standerr; + Current_FD := FD; + end Set_Output; + + ------------------------ + -- Set_Standard_Error -- + ------------------------ + + procedure Set_Standard_Error is + begin + Set_Output (Standerr); end Set_Standard_Error; ------------------------- @@ -247,11 +254,7 @@ package body Output is procedure Set_Standard_Output is begin - if Special_Output_Proc = null then - Flush_Buffer; - end if; - - Current_FD := Standout; + Set_Output (Standout); end Set_Standard_Output; ------- diff --git a/gcc/ada/output.ads b/gcc/ada/output.ads index 2df0da661e5..d88272c05a6 100644 --- a/gcc/ada/output.ads +++ b/gcc/ada/output.ads @@ -33,6 +33,8 @@ -- writing error messages and informational output. It is also used by the -- debug source file output routines (see Sprint.Print_Debug_Line). +with System.OS_Lib; use System.OS_Lib; + with Hostparm; use Hostparm; with Types; use Types; @@ -85,6 +87,12 @@ package Output is -- has been cancelled. Output to standard output is the default mode -- before any call to either of the Set procedures. + procedure Set_Output (FD : File_Descriptor); + -- Sets subsequent output to appear on the given file descriptor when no + -- special output is in effect. When a special output is in effect, + -- the output will appear on the given file descriptor only after special + -- output has been cancelled. + procedure Indent; -- Increases the current indentation level. Whenever a line is written -- (triggered by Eol), an appropriate amount of whitespace is added to the diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 3ab997b22aa..a7576838759 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -1313,7 +1313,7 @@ package body Sem_Res is elsif In_Instance then null; - elsif (Op_Name = Name_Op_Multiply or else Op_Name = Name_Op_Divide) + elsif (Op_Name = Name_Op_Multiply or else Op_Name = Name_Op_Divide) and then Is_Fixed_Point_Type (Etype (Left_Opnd (Op_Node))) and then Is_Fixed_Point_Type (Etype (Right_Opnd (Op_Node))) then @@ -1445,7 +1445,7 @@ package body Sem_Res is null; else - Error_Msg_NE ("expect type&", N, Typ); + Error_Msg_NE ("expect type&", N, First_Subtype (Typ)); end if; end if; end if; diff --git a/gcc/ada/switch-b.adb b/gcc/ada/switch-b.adb index e0b6ab735dc..32140c97cba 100644 --- a/gcc/ada/switch-b.adb +++ b/gcc/ada/switch-b.adb @@ -41,10 +41,35 @@ package body Switch.B is Ptr : Integer := Switch_Chars'First; C : Character := ' '; + function Get_Optional_Filename return String_Ptr; + -- If current character is '=', return a newly allocated string + -- containing the remainder of the current switch (after the '='), else + -- return null. + function Get_Stack_Size (S : Character) return Int; -- Used for -d and -D to scan stack size including handling k/m. -- S is set to 'd' or 'D' to indicate the switch being scanned. + --------------------------- + -- Get_Optional_Filename -- + --------------------------- + + function Get_Optional_Filename return String_Ptr is + Result : String_Ptr; + begin + if Ptr <= Max and then Switch_Chars (Ptr) = '=' then + if Ptr = Max then + Bad_Switch (Switch_Chars); + else + Result := new String'(Switch_Chars (Ptr + 1 .. Max)); + Ptr := Max + 1; + return Result; + end if; + else + return null; + end if; + end Get_Optional_Filename; + -------------------- -- Get_Stack_Size -- -------------------- @@ -125,7 +150,8 @@ package body Switch.B is when 'A' => Ptr := Ptr + 1; - Ada_Bind_File := True; + Output_ALI_List := True; + ALI_List_Filename := Get_Optional_Filename; -- Processing for b switch @@ -144,7 +170,6 @@ package body Switch.B is when 'C' => Ptr := Ptr + 1; - Ada_Bind_File := False; Write_Line ("warning: gnatbind switch -C is obsolescent"); @@ -318,6 +343,7 @@ package body Switch.B is when 'O' => Ptr := Ptr + 1; Output_Object_List := True; + Object_List_Filename := Get_Optional_Filename; -- Processing for p switch diff --git a/gcc/ada/vms_data.ads b/gcc/ada/vms_data.ads index 564deb34284..ed2f8ad4fd9 100644 --- a/gcc/ada/vms_data.ads +++ b/gcc/ada/vms_data.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1996-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1996-2010, 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- -- @@ -196,6 +196,14 @@ package VMS_Data is -- -- Add directories to the project search path. + S_Bind_ALI : aliased constant S := "/ALI_LIST " & + "-A"; + -- /NOALI_LIST (D) + -- /ALI_LIST + -- + -- Output full names of all the ALI files in the partition. The output is + -- written to SYS$OUTPUT. + S_Bind_Bind : aliased constant S := "/BIND_FILE=" & "ADA " & "-A " & @@ -385,7 +393,7 @@ package VMS_Data is -- /NOOBJECT_LIST (D) -- /OBJECT_LIST -- - -- Output full names of all the object files that must be linker to + -- Output full names of all the object files that must be linked to -- provide the Ada component of the program. The output is written to -- SYS$OUTPUT. @@ -669,6 +677,7 @@ package VMS_Data is Bind_Switches : aliased constant Switches := (S_Bind_Add 'Access, + S_Bind_ALI 'Access, S_Bind_Bind 'Access, S_Bind_Build 'Access, S_Bind_Current 'Access, |