diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2004-03-29 14:03:27 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2004-03-29 14:03:27 +0200 |
commit | 2820d220585177ca4e2e3136bf8ff255303ba6db (patch) | |
tree | b41024c63720bbb6fd3edef3c99d72097d058a4e /gcc/ada/osint-c.adb | |
parent | 63041e68a4c1b6043872652c07223117ebfb07f7 (diff) | |
download | gcc-2820d220585177ca4e2e3136bf8ff255303ba6db.zip gcc-2820d220585177ca4e2e3136bf8ff255303ba6db.tar.gz gcc-2820d220585177ca4e2e3136bf8ff255303ba6db.tar.bz2 |
[multiple changes]
2004-03-29 Javier Miranda <miranda@gnat.com>
* checks.adb (Null_Exclusion_Static_Checks): New subprogram
(Install_Null_Excluding_Check): Local subprogram that determines whether
an access node requires a runtime access check and if so inserts the
appropriate run-time check.
(Apply_Access_Check): Call Install_Null_Excluding check if required
(Apply_Constraint_Check): Call Install_Null_Excluding check if required
* checks.ads: (Null_Exclusion_Static_Checks): New subprogram
* einfo.ads: Fix typo in comment
* exp_ch3.adb (Build_Assignment): Generate conversion to the
null-excluding type to force the corresponding run-time check.
(Expand_N_Object_Declaration): Generate conversion to the null-excluding
type to force the corresponding run-time check.
* exp_ch5.adb (Expand_N_Assignment_Statement): Generate conversion to
the null-excluding type to force the corresponding run-time check.
* exp_ch6.adb (Expand_Call): Do not generate the run-time check in
case of access types unless they have the null-excluding attribute.
* sprint.adb (Sprint_Node_Actual): Give support to the null-exclusing
part.
* exp_util.ads: Fix typo in comment
* par.adb (P_Null_Exclusion): New subprogram
(P_Subtype_Indication): New formal that indicates if the null-excluding
part has been scanned-out and it was present
* par-ch3.adb, par-ch4.adb, par-ch6.adb: Give support to AI-231
* sem_aggr.adb: (Check_Can_Never_Be_Null): New subprogram
(Aggregate_Constraint_Checks): Generate conversion to the null-excluding
type to force the corresponding run-time check
(Resolve_Aggregate): Propagate the null-excluding attribute to the array
components
(Resolve_Array_Aggregate): Carry out some static checks
(Resolve_Record_Aggregate.Get_Value): Carry out some static check
* sem_ch3.adb (Access_Definition): In Ada 0Y the Can_Never_Be_Null
attribute must be set only if specified by means of the null-excluding
part. In addition, we must also propagate the access-constant attribute
if present.
(Access_Subprogram_Declaration, Access_Type_Declaration,
Analyze_Component_Declaration, Analyze_Object_Declaration,
Array_Type_Declaration, Process_Discriminants,
Analyze_Subtype_Declaration): Propagate the null-excluding attribute
and carry out some static checks.
(Build_Derived_Access_Type): Set the null-excluding attribute
(Derived_Type_Declaration, Process_Subtype): Carry out some static
checks.
* sem_ch4.adb (Analyze_Allocator): Carry out some static checks
* sem_ch5.adb (Analyze_Assignment): Carry out some static checks
* sem_ch6.adb (Process_Formals): Carry out some static checks.
(Set_Actual_Subtypes): Generate null-excluding subtype if the
null-excluding part was present; it is not required to be done here in
case of anonymous access types.
(Set_Formal_Mode): Ada 0Y allows anonymous access to have the null
value.
* sem_res.adb (Resolve_Actuals): Carry out some static check
(Resolve_Null): Allow null in anonymous access
* sinfo.adb: New subprogram Null_Exclusion_Present
All_Present and Constant_Present available on access_definition nodes
* sinfo.ads: New flag Null_Exclusion_Present on subtype_declaration,
object_declaration, derived_type_definition, component_definition,
discriminant_specification, access_to_object_definition,
access_function_definition, allocator, access_procedure_definition,
access_definition, parameter_specification, All_Present and
Constant_Present flags available on access_definition nodes.
2004-03-29 Robert Dewar <dewar@gnat.com>
* fname.adb, fname.ads, fname-sf.adb, fname-uf.adb, fname-uf.ads,
gnat1drv.adb, lib.adb, lib.ads, lib-load.adb, lib-writ.adb,
opt.ads, osint.adb, osint.ads, osint-c.adb, par.adb,
par-ch10.adb, par-load.adb, par-prag.adb, sfn_scan.adb,
sfn_scan.ads, sinput-l.adb, sinput-l.ads, switch-c.adb,
sem_prag.adb: Updates to handle multiple units/file
* par.adb: Change test for s-rpc to s-rp for detecting rpc and children
* par.adb, memtrack.adb, prj-makr.adb, prj-part.adb,
sem_util.adb: Minor reformatting
* sem_ch12.adb: Add comment for previous change
2004-03-29 Laurent Pautet <pautet@act-europe.fr>
* osint.adb (Executable_Prefix): Set Exec_Name to the current
executable name when not initialized. Otherwise, use its current value.
* osint.ads (Exec_Name): Move Exec_Name from body to spec in order to
initialize it to another executable name than the current one. This
allows to configure paths for an executable name (gnatmake) different
from the current one (gnatdist).
2004-03-29 Ed Schonberg <schonberg@gnat.com>
* exp_ch6.adb (Expand_Call): A call to a function declared in the
current unit cannot be inlined if it appears in the body of a withed
unit, to avoid order of elaboration problems in gigi.
* exp_ch9.adb (Build_Protected_Sub_Specification): Generate debugging
information for protected (wrapper) operation as well, to simplify gdb
use.
* sem_ch6.adb (Analyze_Subprogram_Body): For a private operation in a
protected body, indicate that the entity for the generated spec comes
from source, to ensure that references are properly generated for it.
(Build_Body_To_Inline): Do not inline a function that returns a
controlled type.
* sem_prag.adb (Process_Convention): If subprogram is overloaded, only
apply convention to homonyms that are declared explicitly.
* sem_res.adb (Make_Call_Into_Operator): If the operation is a function
that renames an equality operator and the operands are overloaded,
resolve them with the declared formal types, before rewriting as an
operator.
2004-03-29 GNAT Script <nobody@gnat.com>
* Make-lang.in: Makefile automatically updated
From-SVN: r80055
Diffstat (limited to 'gcc/ada/osint-c.adb')
-rw-r--r-- | gcc/ada/osint-c.adb | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/gcc/ada/osint-c.adb b/gcc/ada/osint-c.adb index d925abf..7914b1b 100644 --- a/gcc/ada/osint-c.adb +++ b/gcc/ada/osint-c.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2003 Free Software Foundation, Inc. -- +-- Copyright (C) 2001-2004 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- -- @@ -43,8 +43,7 @@ package body Osint.C is function Create_Auxiliary_File (Src : File_Name_Type; - Suffix : String) - return File_Name_Type; + Suffix : String) return File_Name_Type; -- Common processing for Creat_Repinfo_File and Create_Debug_File. -- Src is the file name used to create the required output file and -- Suffix is the desired suffic (dg/rep for debug/repinfo file). @@ -52,7 +51,8 @@ package body Osint.C is procedure Set_Library_Info_Name; -- Sets a default ali file name from the main compiler source name. -- This is used by Create_Output_Library_Info, and by the version of - -- Read_Library_Info that takes a default file name. + -- Read_Library_Info that takes a default file name. The name is in + -- Name_Buffer (with length in Name_Len) on return from the call ---------------------- -- Close_Debug_File -- @@ -60,6 +60,7 @@ package body Osint.C is procedure Close_Debug_File is Status : Boolean; + begin Close (Output_FD, Status); @@ -76,6 +77,7 @@ package body Osint.C is procedure Close_Output_Library_Info is Status : Boolean; + begin Close (Output_FD, Status); @@ -92,6 +94,7 @@ package body Osint.C is procedure Close_Repinfo_File is Status : Boolean; + begin Close (Output_FD, Status); @@ -108,8 +111,7 @@ package body Osint.C is function Create_Auxiliary_File (Src : File_Name_Type; - Suffix : String) - return File_Name_Type + Suffix : String) return File_Name_Type is Result : File_Name_Type; @@ -256,18 +258,36 @@ package body Osint.C is -- To compare them, remove file name directories and extensions. if Output_Object_File_Name /= null then + -- Make sure there is a dot at Dot_Index. This may not be the case -- if the source file name has no extension. Name_Buffer (Dot_Index) := '.'; + -- If we are in multiple unit per file mode, then add ~nnn + -- extension to the name before doing the comparison. + + if Multiple_Unit_Index /= 0 then + declare + Exten : constant String := Name_Buffer (Dot_Index .. Name_Len); + begin + Name_Len := Dot_Index - 1; + Add_Char_To_Name_Buffer ('~'); + Add_Nat_To_Name_Buffer (Multiple_Unit_Index); + Dot_Index := Name_Len + 1; + Add_Str_To_Name_Buffer (Exten); + end; + end if; + + -- Remove extension preparing to replace it + declare Name : constant String := Name_Buffer (1 .. Dot_Index); Len : constant Natural := Dot_Index; begin - Name_Buffer (1 .. Output_Object_File_Name'Length) - := Output_Object_File_Name.all; + Name_Buffer (1 .. Output_Object_File_Name'Length) := + Output_Object_File_Name.all; Dot_Index := 0; for J in reverse Output_Object_File_Name'Range loop @@ -277,8 +297,11 @@ package body Osint.C is end if; end loop; + -- Dot_Index should be zero now (we check for extension elsewhere) + pragma Assert (Dot_Index /= 0); - -- We check for the extension elsewhere + + -- Check name of object file is what we expect if Name /= Name_Buffer (Dot_Index - Len + 1 .. Dot_Index) then Fail ("incorrect object file name"); |