[multiple changes]

2004-06-28  Robert Dewar  <dewar@gnat.com>

	* mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb,
	mlib-tgt-irix.adb, mlib-tgt-hpux.adb, mlib-tgt-linux.adb,
	mlib-tgt-linux.adb, mlib-tgt-solaris.adb, mlib-tgt-solaris.adb,
	mlib-tgt-vms-alpha.adb, mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb,
	a-strmap.adb, a-strmap.ads, clean.adb: Minor reformatting

	* exp_util.adb (Is_Possibly_Unaligned_Slice): Completely rewritten, to
	deal with problem of inefficient slices on machines with strict
	alignment, when the slice is a component of a composite.

	* checks.adb (Apply_Array_Size_Check): Do not special case 64-bit
	machines, we need the check there as well.

2004-06-28  Ed Schonberg  <schonberg@gnat.com>

	* exp_ch5.adb (Expand_Assign_Array): Use correct condition to
	determine safe copying direction for overlapping slice assignments
	when component is controlled.

	* sem_ch12.adb (Instantiate_Formal_Package): Implicit operations of a
	formal derived type in the actual for a formal package are visible in
	the enclosing instance.

2004-06-28  Ed Schonberg  <schonberg@gnat.com>

	PR ada/15600
	* sem_util.adb (Trace_Components): Diagnose properly an illegal
	circularity involving a private type whose completion includes a
	self-referential component.
	(Enter_Name): Use Is_Inherited_Operation to distinguish a source
	renaming or an instantiation from an implicit derived operation.

2004-06-28  Pascal Obry  <obry@gnat.com>

	* mlib-tgt-mingw.adb: (Library_Exists_For): Remove "lib" prefix from
	DLL.
	(Library_File_Name_For): Idem.

2004-06-28  Matthew Gingell  <gingell@gnat.com>

	* g-traceb.ads: Add explanatory note on the format of addresses
	expected by addr2line.

2004-06-28  Jerome Guitton  <guitton@act-europe.fr>

	* Makefile.in: Force debugging information on s-tasdeb.adb,
	a-except.adb and s-assert.adb needed by the debugger.

2004-06-28  Vincent Celier  <celier@gnat.com>

	* make.adb (Collect_Arguments_And_Compile): Change Flag1 to
	Need_To_Build_Lib.
	(Gnatmake): Ditto.

	* mlib-prj.adb (Check_Library): Replace Flag1 with Need_To_Build_Lib

	* prj.adb: Minor reformatting
	(Project_Empty): Change Flag1 to Need_To_Build_Lib. Remove Flag2.

	* prj.ads: Comment updates
	Minor reformatting
	(Project_Data): Change Flag1 to Need_To_Build_Lib.
	Remove Flag2: not used.

	* prj-dect.adb (Parse_Declarative_Items): Accept "null" as a
	declaration.

	* gnat_ugn.texi: Put a "null;" declaration in one project file example

	* gnat_rm.texi: Document Empty declarations "null;".

	* makegpr.adb (Compile_Link_With_Gnatmake): Put the global archives in
	front of the linker options.
	(Link_Foreign): Put the global archives and the libraries in front of
	the linker options.

2004-06-28  Javier Miranda  <miranda@gnat.com>

	* rtsfind.adb: (Get_Unit_Name): Fix typo in comment
	(RTU_Loaded): Code cleanup
	(Set_RTU_Loaded): New procedure to register as *loaded* explicitly
	withed predefined units.

	* rtsfind.ads (Set_RTU_Loaded): New procedure to register as *loaded*
	explicitly withed predefined units.
	Fix typo in comment

	* sem_ch10.adb (Analyze_Compilation_Unit): Register as *loaded*
	explicitly withed predefined units.

From-SVN: r83789
This commit is contained in:
Arnaud Charlet 2004-06-28 16:37:05 +02:00
parent 45da19e38e
commit 246d2ceb32
31 changed files with 564 additions and 317 deletions

View File

@ -1,3 +1,95 @@
2004-06-28 Robert Dewar <dewar@gnat.com>
* mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb,
mlib-tgt-irix.adb, mlib-tgt-hpux.adb, mlib-tgt-linux.adb,
mlib-tgt-linux.adb, mlib-tgt-solaris.adb, mlib-tgt-solaris.adb,
mlib-tgt-vms-alpha.adb, mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb,
a-strmap.adb, a-strmap.ads, clean.adb: Minor reformatting
* exp_util.adb (Is_Possibly_Unaligned_Slice): Completely rewritten, to
deal with problem of inefficient slices on machines with strict
alignment, when the slice is a component of a composite.
* checks.adb (Apply_Array_Size_Check): Do not special case 64-bit
machines, we need the check there as well.
2004-06-28 Ed Schonberg <schonberg@gnat.com>
* exp_ch5.adb (Expand_Assign_Array): Use correct condition to
determine safe copying direction for overlapping slice assignments
when component is controlled.
* sem_ch12.adb (Instantiate_Formal_Package): Implicit operations of a
formal derived type in the actual for a formal package are visible in
the enclosing instance.
2004-06-28 Ed Schonberg <schonberg@gnat.com>
PR ada/15600
* sem_util.adb (Trace_Components): Diagnose properly an illegal
circularity involving a private type whose completion includes a
self-referential component.
(Enter_Name): Use Is_Inherited_Operation to distinguish a source
renaming or an instantiation from an implicit derived operation.
2004-06-28 Pascal Obry <obry@gnat.com>
* mlib-tgt-mingw.adb: (Library_Exists_For): Remove "lib" prefix from
DLL.
(Library_File_Name_For): Idem.
2004-06-28 Matthew Gingell <gingell@gnat.com>
* g-traceb.ads: Add explanatory note on the format of addresses
expected by addr2line.
2004-06-28 Jerome Guitton <guitton@act-europe.fr>
* Makefile.in: Force debugging information on s-tasdeb.adb,
a-except.adb and s-assert.adb needed by the debugger.
2004-06-28 Vincent Celier <celier@gnat.com>
* make.adb (Collect_Arguments_And_Compile): Change Flag1 to
Need_To_Build_Lib.
(Gnatmake): Ditto.
* mlib-prj.adb (Check_Library): Replace Flag1 with Need_To_Build_Lib
* prj.adb: Minor reformatting
(Project_Empty): Change Flag1 to Need_To_Build_Lib. Remove Flag2.
* prj.ads: Comment updates
Minor reformatting
(Project_Data): Change Flag1 to Need_To_Build_Lib.
Remove Flag2: not used.
* prj-dect.adb (Parse_Declarative_Items): Accept "null" as a
declaration.
* gnat_ugn.texi: Put a "null;" declaration in one project file example
* gnat_rm.texi: Document Empty declarations "null;".
* makegpr.adb (Compile_Link_With_Gnatmake): Put the global archives in
front of the linker options.
(Link_Foreign): Put the global archives and the libraries in front of
the linker options.
2004-06-28 Javier Miranda <miranda@gnat.com>
* rtsfind.adb: (Get_Unit_Name): Fix typo in comment
(RTU_Loaded): Code cleanup
(Set_RTU_Loaded): New procedure to register as *loaded* explicitly
withed predefined units.
* rtsfind.ads (Set_RTU_Loaded): New procedure to register as *loaded*
explicitly withed predefined units.
Fix typo in comment
* sem_ch10.adb (Analyze_Compilation_Unit): Register as *loaded*
explicitly withed predefined units.
2004-06-25 Pascal Obry <obry@gnat.com>
* makegpr.adb (Build_Library): Remove parameter Lib_Address and

View File

@ -1892,6 +1892,28 @@ endif
s-traceb.o : s-traceb.adb
$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) \
$(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) \
$< $(OUTPUT_OPTION)
# force debugging information on s-tasdeb.o so that it is always
# possible to set conditional breakpoints on tasks.
s-tasdeb.o : s-tasdeb.adb s-tasdeb.ads
$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 $(ADA_INCLUDES) \
$< $(OUTPUT_OPTION)
# force debugging information on a-except.o so that it is always
# possible to set conditional breakpoints on exceptions.
# use -O1 otherwise gdb isn't able to get a full backtrace on mips targets.
a-except.o : a-except.adb a-except.ads
$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O1 -fno-inline \
$(ADA_INCLUDES) $< $(OUTPUT_OPTION)
# force debugging information on s-assert.o so that it is always
# possible to set breakpoint on assert failures.
s-assert.o : s-assert.adb s-assert.ads a-except.ads
$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O2 $(ADA_INCLUDES) \
$< $(OUTPUT_OPTION)
adadecode.o : adadecode.c adadecode.h

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2002 Free Software Foundation, Inc. --
-- Copyright (C) 1992-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- --
@ -54,7 +54,7 @@ package body Ada.Strings.Maps is
-- "=" --
---------
function "=" (Left, Right : in Character_Set) return Boolean is
function "=" (Left, Right : Character_Set) return Boolean is
begin
return Character_Set_Internal (Left) = Character_Set_Internal (Right);
end "=";
@ -63,7 +63,7 @@ package body Ada.Strings.Maps is
-- "and" --
-----------
function "and" (Left, Right : in Character_Set) return Character_Set is
function "and" (Left, Right : Character_Set) return Character_Set is
begin
return Character_Set
(Character_Set_Internal (Left) and Character_Set_Internal (Right));
@ -73,7 +73,7 @@ package body Ada.Strings.Maps is
-- "not" --
-----------
function "not" (Right : in Character_Set) return Character_Set is
function "not" (Right : Character_Set) return Character_Set is
begin
return Character_Set (not Character_Set_Internal (Right));
end "not";
@ -82,7 +82,7 @@ package body Ada.Strings.Maps is
-- "or" --
----------
function "or" (Left, Right : in Character_Set) return Character_Set is
function "or" (Left, Right : Character_Set) return Character_Set is
begin
return Character_Set
(Character_Set_Internal (Left) or Character_Set_Internal (Right));
@ -92,7 +92,7 @@ package body Ada.Strings.Maps is
-- "xor" --
-----------
function "xor" (Left, Right : in Character_Set) return Character_Set is
function "xor" (Left, Right : Character_Set) return Character_Set is
begin
return Character_Set
(Character_Set_Internal (Left) xor Character_Set_Internal (Right));
@ -104,8 +104,7 @@ package body Ada.Strings.Maps is
function Is_In
(Element : Character;
Set : Character_Set)
return Boolean
Set : Character_Set) return Boolean
is
begin
return Set (Element);
@ -117,8 +116,7 @@ package body Ada.Strings.Maps is
function Is_Subset
(Elements : Character_Set;
Set : Character_Set)
return Boolean
Set : Character_Set) return Boolean
is
begin
return (Elements and Set) = Elements;
@ -128,7 +126,7 @@ package body Ada.Strings.Maps is
-- To_Domain --
---------------
function To_Domain (Map : in Character_Mapping) return Character_Sequence
function To_Domain (Map : Character_Mapping) return Character_Sequence
is
Result : String (1 .. Map'Length);
J : Natural;
@ -150,8 +148,7 @@ package body Ada.Strings.Maps is
----------------
function To_Mapping
(From, To : in Character_Sequence)
return Character_Mapping
(From, To : Character_Sequence) return Character_Mapping
is
Result : Character_Mapping;
Inserted : Character_Set := Null_Set;
@ -183,11 +180,10 @@ package body Ada.Strings.Maps is
-- To_Range --
--------------
function To_Range (Map : in Character_Mapping) return Character_Sequence
function To_Range (Map : Character_Mapping) return Character_Sequence
is
Result : String (1 .. Map'Length);
J : Natural;
begin
J := 0;
for C in Map'Range loop
@ -204,7 +200,7 @@ package body Ada.Strings.Maps is
-- To_Ranges --
---------------
function To_Ranges (Set : in Character_Set) return Character_Ranges is
function To_Ranges (Set : Character_Set) return Character_Ranges is
Max_Ranges : Character_Ranges (1 .. Set'Length / 2 + 1);
Range_Num : Natural;
C : Character;
@ -214,7 +210,7 @@ package body Ada.Strings.Maps is
Range_Num := 0;
loop
-- Skip gap between subsets.
-- Skip gap between subsets
while not Set (C) loop
exit when C = Character'Last;
@ -226,7 +222,7 @@ package body Ada.Strings.Maps is
Range_Num := Range_Num + 1;
Max_Ranges (Range_Num).Low := C;
-- Span a subset.
-- Span a subset
loop
exit when not Set (C) or else C = Character'Last;
@ -248,13 +244,9 @@ package body Ada.Strings.Maps is
-- To_Sequence --
-----------------
function To_Sequence
(Set : Character_Set)
return Character_Sequence
is
function To_Sequence (Set : Character_Set) return Character_Sequence is
Result : String (1 .. Character'Pos (Character'Last) + 1);
Count : Natural := 0;
begin
for Char in Set'Range loop
if Set (Char) then
@ -270,9 +262,8 @@ package body Ada.Strings.Maps is
-- To_Set --
------------
function To_Set (Ranges : in Character_Ranges) return Character_Set is
function To_Set (Ranges : Character_Ranges) return Character_Set is
Result : Character_Set;
begin
for C in Result'Range loop
Result (C) := False;
@ -287,9 +278,8 @@ package body Ada.Strings.Maps is
return Result;
end To_Set;
function To_Set (Span : in Character_Range) return Character_Set is
function To_Set (Span : Character_Range) return Character_Set is
Result : Character_Set;
begin
for C in Result'Range loop
Result (C) := False;
@ -304,7 +294,6 @@ package body Ada.Strings.Maps is
function To_Set (Sequence : Character_Sequence) return Character_Set is
Result : Character_Set := Null_Set;
begin
for J in Sequence'Range loop
Result (Sequence (J)) := True;
@ -315,7 +304,6 @@ package body Ada.Strings.Maps is
function To_Set (Singleton : Character) return Character_Set is
Result : Character_Set := Null_Set;
begin
Result (Singleton) := True;
return Result;
@ -325,9 +313,10 @@ package body Ada.Strings.Maps is
-- Value --
-----------
function Value (Map : in Character_Mapping; Element : in Character)
return Character is
function Value
(Map : Character_Mapping;
Element : Character) return Character
is
begin
return Map (Element);
end Value;

View File

@ -61,48 +61,44 @@ pragma Preelaborate (Maps);
type Character_Ranges is array (Positive range <>) of Character_Range;
function To_Set (Ranges : in Character_Ranges) return Character_Set;
function To_Set (Ranges : Character_Ranges) return Character_Set;
function To_Set (Span : in Character_Range) return Character_Set;
function To_Set (Span : Character_Range) return Character_Set;
function To_Ranges (Set : in Character_Set) return Character_Ranges;
function To_Ranges (Set : Character_Set) return Character_Ranges;
----------------------------------
-- Operations on Character Sets --
----------------------------------
function "=" (Left, Right : in Character_Set) return Boolean;
function "=" (Left, Right : Character_Set) return Boolean;
function "not" (Right : in Character_Set) return Character_Set;
function "and" (Left, Right : in Character_Set) return Character_Set;
function "or" (Left, Right : in Character_Set) return Character_Set;
function "xor" (Left, Right : in Character_Set) return Character_Set;
function "-" (Left, Right : in Character_Set) return Character_Set;
function "not" (Right : Character_Set) return Character_Set;
function "and" (Left, Right : Character_Set) return Character_Set;
function "or" (Left, Right : Character_Set) return Character_Set;
function "xor" (Left, Right : Character_Set) return Character_Set;
function "-" (Left, Right : Character_Set) return Character_Set;
function Is_In
(Element : in Character;
Set : in Character_Set)
return Boolean;
(Element : Character;
Set : Character_Set) return Boolean;
function Is_Subset
(Elements : in Character_Set;
Set : in Character_Set)
return Boolean;
(Elements : Character_Set;
Set : Character_Set) return Boolean;
function "<="
(Left : in Character_Set;
Right : in Character_Set)
return Boolean
(Left : Character_Set;
Right : Character_Set) return Boolean
renames Is_Subset;
subtype Character_Sequence is String;
-- Alternative representation for a set of character values
function To_Set (Sequence : in Character_Sequence) return Character_Set;
function To_Set (Sequence : Character_Sequence) return Character_Set;
function To_Set (Singleton : Character) return Character_Set;
function To_Set (Singleton : in Character) return Character_Set;
function To_Sequence (Set : in Character_Set) return Character_Sequence;
function To_Sequence (Set : Character_Set) return Character_Sequence;
------------------------------------
-- Character Mapping Declarations --
@ -112,9 +108,8 @@ pragma Preelaborate (Maps);
-- Representation for a character to character mapping:
function Value
(Map : in Character_Mapping;
Element : in Character)
return Character;
(Map : Character_Mapping;
Element : Character) return Character;
Identity : constant Character_Mapping;
@ -123,19 +118,16 @@ pragma Preelaborate (Maps);
----------------------------
function To_Mapping
(From, To : in Character_Sequence)
return Character_Mapping;
(From, To : Character_Sequence) return Character_Mapping;
function To_Domain
(Map : in Character_Mapping)
return Character_Sequence;
(Map : Character_Mapping) return Character_Sequence;
function To_Range
(Map : in Character_Mapping)
return Character_Sequence;
(Map : Character_Mapping) return Character_Sequence;
type Character_Mapping_Function is
access function (From : in Character) return Character;
access function (From : Character) return Character;
private
pragma Inline (Is_In);

View File

@ -831,13 +831,6 @@ package body Checks is
if Size_Known_At_Compile_Time (Typ) then
return;
end if;
-- No problem on 64-bit machines, we just don't bother with
-- the case where the size in bytes overflows 64-bits.
if System_Address_Size = 64 then
return;
end if;
end if;
-- Following code is temporarily deleted, since GCC 3 is returning

View File

@ -325,15 +325,14 @@ package body Clean is
procedure Clean_Archive (Project : Project_Id) is
Current_Dir : constant Dir_Name_Str := Get_Current_Dir;
Data : constant Project_Data := Projects.Table (Project);
Archive_Name : constant String :=
"lib" & Get_Name_String (Data.Name) & '.' & Archive_Ext;
"lib" & Get_Name_String (Data.Name) & '.' & Archive_Ext;
-- The name of the archive file for this project
Archive_Dep_Name : constant String :=
"lib" & Get_Name_String (Data.Name) & ".deps";
"lib" & Get_Name_String (Data.Name) & ".deps";
-- The name of the archive dependency file for this project
Obj_Dir : constant String := Get_Name_String (Data.Object_Directory);
@ -439,8 +438,7 @@ package body Clean is
Extract_From_Q (Lib_File);
Full_Lib_File := Osint.Full_Lib_File_Name (Lib_File);
-- If we have an existing ALI file that is not read-only,
-- process it.
-- If we have existing ALI file that is not read-only, process it
if Full_Lib_File /= No_File
and then not Is_Readonly_Library (Full_Lib_File)
@ -484,8 +482,7 @@ package body Clean is
end if;
end if;
-- Now, delete all the existing files corresponding to this
-- ALI file.
-- Now delete all existing files corresponding to this ALI file
declare
Obj_Dir : constant String :=
@ -515,9 +512,10 @@ package body Clean is
for J in 1 .. Sources.Last loop
declare
Deb : constant String :=
Debug_File_Name (Sources.Table (J));
Debug_File_Name (Sources.Table (J));
Rep : constant String :=
Repinfo_File_Name (Sources.Table (J));
Repinfo_File_Name (Sources.Table (J));
begin
if Is_Regular_File (Obj_Dir & Dir_Separator & Deb) then
Delete (Obj_Dir, Deb);
@ -557,8 +555,7 @@ package body Clean is
procedure Clean_Project (Project : Project_Id) is
Main_Source_File : File_Name_Type;
-- Name of the executable on the command line, without directory
-- information.
-- Name of executable on the command line without directory info
Executable : Name_Id;
-- Name of the executable file
@ -610,7 +607,8 @@ package body Clean is
begin
Change_Dir (Obj_Dir);
-- First, deal with Ada.
-- First, deal with Ada
-- Look through the units to find those that are either immediate
-- sources or inherited sources of the project.
@ -765,8 +763,9 @@ package body Clean is
end if;
if Data.Other_Sources_Present then
-- There is non-Ada code: delete the object files and
-- the dependency files, if they exist.
-- the dependency files if they exist.
Source_Id := Data.First_Other_Source;
@ -1093,8 +1092,8 @@ package body Clean is
Prj.Pars.Set_Verbosity (To => Prj.Com.Current_Verbosity);
-- Parse the project file.
-- If there is an error, Main_Project will still be No_Project.
-- Parse the project file. If there is an error, Main_Project
-- will still be No_Project.
Prj.Pars.Parse
(Project => Main_Project,
@ -1103,8 +1102,7 @@ package body Clean is
Process_Languages => All_Languages);
if Main_Project = No_Project then
Fail ("""" & Project_File_Name.all &
""" processing failed");
Fail ("""" & Project_File_Name.all & """ processing failed");
end if;
if Opt.Verbose_Mode then
@ -1311,7 +1309,8 @@ package body Clean is
procedure Parse_Cmd_Line is
Source_Index : Int := 0;
Index : Positive := 1;
Last : constant Natural := Argument_Count;
Last : constant Natural := Argument_Count;
begin
while Index <= Last loop
declare

View File

@ -826,8 +826,8 @@ package body Exp_Ch5 is
-- the explicit bounds of right- and left-hand side.
declare
Proc : constant Node_Id :=
TSS (Base_Type (L_Type), TSS_Slice_Assign);
Proc : constant Node_Id :=
TSS (Base_Type (L_Type), TSS_Slice_Assign);
Actuals : List_Id;
begin
@ -840,7 +840,10 @@ package body Exp_Ch5 is
Duplicate_Subexpr (Left_Hi, Name_Req => True),
Duplicate_Subexpr (Right_Lo, Name_Req => True),
Duplicate_Subexpr (Right_Hi, Name_Req => True));
Append_To (Actuals, Condition);
Append_To (Actuals,
Make_Op_Not (Loc,
Right_Opnd => Condition));
Rewrite (N,
Make_Procedure_Call_Statement (Loc,

View File

@ -2384,34 +2384,6 @@ package body Exp_Util is
---------------------------------
function Is_Possibly_Unaligned_Slice (P : Node_Id) return Boolean is
function Has_Non_Trivial_Component_Clause (E : Entity_Id) return Boolean;
-- Check whether the component clause might place the component at an
-- alignment that will require the use of a copy when a slice is passed
-- as a parameter. The code is conservative because at this point the
-- expander does not know the alignment choice that the back-end will
-- make. For now we return true if the component is not the first one
-- in the enclosing record. This routine is a place holder for further
-- analysis of this kind.
--------------------------------------
-- Has_Non_Trivial_Component_Clause --
--------------------------------------
function Has_Non_Trivial_Component_Clause (E : Entity_Id) return Boolean
is
Rep_Clause : constant Node_Id := Component_Clause (E);
begin
if No (Rep_Clause) then
return False;
else
return Intval (Position (Rep_Clause)) /= Uint_0
or else Intval (First_Bit (Rep_Clause)) /= Uint_0;
end if;
end Has_Non_Trivial_Component_Clause;
-- Start of processing for Is_Possibly_Unaligned_Slice
begin
-- ??? GCC3 will eventually handle strings with arbitrary alignments,
-- but for now the following check must be disabled.
@ -2420,6 +2392,8 @@ package body Exp_Util is
-- return False;
-- end if;
-- For renaming case, go to renamed object
if Is_Entity_Name (P)
and then Is_Object (Entity (P))
and then Present (Renamed_Object (Entity (P)))
@ -2427,57 +2401,121 @@ package body Exp_Util is
return Is_Possibly_Unaligned_Slice (Renamed_Object (Entity (P)));
end if;
-- We only need to worry if the target has strict alignment, unless
-- it is a nested record component with a component clause, which
-- Gigi does not handle well. This patch should disappear with GCC 3.0
-- and it is not clear why it is needed even when the representation
-- clause is a confirming one, but in its absence gigi complains that
-- the slice is not addressable.???
if not Target_Strict_Alignment then
if Nkind (P) /= N_Slice
or else Nkind (Prefix (P)) /= N_Selected_Component
or else Nkind (Prefix (Prefix (P))) /= N_Selected_Component
then
return False;
end if;
end if;
-- The reference must be a slice
if Nkind (P) /= N_Slice then
return False;
end if;
-- Always assume the worst for a nested record component with a
-- component clause, which gigi/gcc does not appear to handle well.
-- It is not clear why this special test is needed at all ???
if Nkind (Prefix (P)) = N_Selected_Component
and then Nkind (Prefix (Prefix (P))) = N_Selected_Component
and then
Present (Component_Clause (Entity (Selector_Name (Prefix (P)))))
then
return True;
end if;
-- We only need to worry if the target has strict alignment
if not Target_Strict_Alignment then
return False;
end if;
-- If it is a slice, then look at the array type being sliced
declare
Pref : constant Node_Id := Prefix (P);
Typ : constant Entity_Id := Etype (Prefix (P));
Sarr : constant Node_Id := Prefix (P);
-- Prefix of the slice, i.e. the array being sliced
Styp : constant Entity_Id := Etype (Prefix (P));
-- Type of the array being sliced
Pref : Node_Id;
Ptyp : Entity_Id;
begin
-- The worrisome case is one where we don't know the alignment
-- of the array, or we know it and it is greater than 1 (if the
-- alignment is one, then obviously it cannot be misaligned).
-- The problems arise if the array object that is being sliced
-- is a component of a record or array, and we cannot guarantee
-- the alignment of the array within its containing object.
if Known_Alignment (Typ) and then Alignment (Typ) = 1 then
return False;
end if;
-- To investigate this, we look at successive prefixes to see
-- if we have a worrisome indexed or selected component.
-- The only way we can be unaligned is if the array being sliced
-- is a component of a record, and either the record is packed,
-- or the component has a component clause, or the record has
-- a specified alignment (that might be too small).
Pref := Sarr;
loop
-- Case of array is part of an indexed component reference
return
Nkind (Pref) = N_Selected_Component
and then
(Is_Packed (Etype (Prefix (Pref)))
or else
Known_Alignment (Etype (Prefix (Pref)))
or else
Has_Non_Trivial_Component_Clause
(Entity (Selector_Name (Pref))));
if Nkind (Pref) = N_Indexed_Component then
Ptyp := Etype (Prefix (Pref));
-- The only problematic case is when the array is packed,
-- in which case we really know nothing about the alignment
-- of individual components.
if Is_Bit_Packed_Array (Ptyp) then
return True;
end if;
-- Case of array is part of a selected component reference
elsif Nkind (Pref) = N_Selected_Component then
Ptyp := Etype (Prefix (Pref));
-- We are definitely in trouble if the record in question
-- has an alignment, and either we know this alignment is
-- inconsistent with the alignment of the slice, or we
-- don't know what the alignment of the slice should be.
if Known_Alignment (Ptyp)
and then (Unknown_Alignment (Styp)
or else Alignment (Styp) > Alignment (Ptyp))
then
return True;
end if;
-- We are in potential trouble if the record type is packed.
-- We could special case when we know that the array is the
-- first component, but that's not such a simple case ???
if Is_Packed (Ptyp) then
return True;
end if;
-- We are in trouble if there is a component clause, and
-- either we do not know the alignment of the slice, or
-- the alignment of the slice is inconsistent with the
-- bit position specified by the component clause.
declare
Field : constant Entity_Id := Entity (Selector_Name (Pref));
begin
if Present (Component_Clause (Field))
and then
(Unknown_Alignment (Styp)
or else
(Component_Bit_Offset (Field) mod
(System_Storage_Unit * Alignment (Styp))) /= 0)
then
return True;
end if;
end;
-- For cases other than selected or indexed components we
-- know we are OK, since no issues arise over alignment.
else
return False;
end if;
-- We processed an indexed component or selected component
-- reference that looked safe, so keep checking prefixes.
Pref := Prefix (Pref);
end loop;
end;
end Is_Possibly_Unaligned_Slice;

View File

@ -54,7 +54,8 @@
-- Compile without -g
-- Run the program, and call Call_Chain
-- Recompile with -g
-- Use addr2line to interpret the absolute call locations
-- Use addr2line to interpret the absolute call locations (note that
-- addr2line expects addresses in hexadecimal format).
-- This capability is currently supported on the following targets:

View File

@ -13309,6 +13309,7 @@ See the chapter on project files in the GNAT Users guide for examples of use.
* Reserved Words::
* Lexical Elements::
* Declarations::
* Empty declarations::
* Typed string declarations::
* Variables::
* Expressions::
@ -13379,9 +13380,21 @@ simple_declarative_item ::=
variable_declaration |
typed_variable_declaration |
attribute_declaration |
case_construction
case_construction |
empty_declaration
@end smallexample
@node Empty declarations
@section Empty declarations
@smallexample
empty_declaration ::=
@b{null} ;
@end smallexample
An empty declaration is allowed anywhere a declaration is allowed.
It has no effect.
@node Typed string declarations
@section Typed string declarations
@ -13683,7 +13696,7 @@ case_construction ::=
case_item ::=
@b{when} discrete_choice_list =>
@{case_construction | attribute_declaration@}
@{case_construction | attribute_declaration | empty_declaration@}
discrete_choice_list ::=
string_literal @{| string_literal@} |

View File

@ -10809,6 +10809,8 @@ project Build is
for ^Default_Switches^Default_Switches^ ("Ada")
use ("^-g^-g^");
for Executable ("proc") use "proc1";
when others =>
null;
end case;
end Builder;

View File

@ -2231,7 +2231,9 @@ package body Make is
The_Data := Projects.Table (Prj);
end loop;
if The_Data.Library and then not The_Data.Flag1 then
if The_Data.Library
and then not The_Data.Need_To_Build_Lib
then
-- Add to the Q all sources of the project that
-- have not been marked
@ -2242,7 +2244,7 @@ package body Make is
-- Now mark the project as processed
Projects.Table (Prj).Flag1 := True;
Projects.Table (Prj).Need_To_Build_Lib := True;
end if;
end;
end if;
@ -4337,10 +4339,10 @@ package body Make is
if MLib.Tgt.Support_For_Libraries /= MLib.Tgt.None then
for Proj in Projects.First .. Projects.Last loop
if Projects.Table (Proj).Library then
Projects.Table (Proj).Flag1 :=
Projects.Table (Proj).Need_To_Build_Lib :=
not MLib.Tgt.Library_Exists_For (Proj);
if Projects.Table (Proj).Flag1 then
if Projects.Table (Proj).Need_To_Build_Lib then
if Verbose_Mode then
Write_Str
("Library file does not exist for project """);
@ -4722,12 +4724,12 @@ package body Make is
end if;
if Projects.Table (Proj1).Library
and then not Projects.Table (Proj1).Flag1
and then not Projects.Table (Proj1).Need_To_Build_Lib
then
MLib.Prj.Check_Library (Proj1);
end if;
if Projects.Table (Proj1).Flag1 then
if Projects.Table (Proj1).Need_To_Build_Lib then
Library_Projs.Increment_Last;
Current := Library_Projs.Last;
Depth := Projects.Table (Proj1).Depth;
@ -4744,7 +4746,7 @@ package body Make is
end loop;
Library_Projs.Table (Current) := Proj1;
Projects.Table (Proj1).Flag1 := False;
Projects.Table (Proj1).Need_To_Build_Lib := False;
end if;
end loop;
end;

View File

@ -2395,16 +2395,10 @@ package body Makegpr is
if not Compile_Only then
-- If there are linking options from the command line,
-- transmit them to gnatmake.
-- Linking options
if Linker_Options.Last /= 0 then
Add_Argument (Dash_largs, True);
for Arg in 1 .. Linker_Options.Last loop
Add_Argument (Linker_Options.Table (Arg), True);
end loop;
else
Add_Argument (Dash_largs, Verbose_Mode);
end if;
@ -2412,6 +2406,13 @@ package body Makegpr is
-- Add the archives
Add_Archives (For_Gnatmake => True);
-- If there are linking options from the command line,
-- transmit them to gnatmake.
for Arg in 1 .. Linker_Options.Last loop
Add_Argument (Linker_Options.Table (Arg), True);
end loop;
end if;
-- And invoke gnatmake
@ -3318,6 +3319,10 @@ package body Makegpr is
Get_Name_String (Source.Object_Name),
True);
-- Add all the archives, in a correct order
Add_Archives (For_Gnatmake => False);
-- Add the switches specified in package Linker of
-- the main project.
@ -3345,10 +3350,6 @@ package body Makegpr is
Add_Argument (Linker_Options.Table (Arg), True);
end loop;
-- Add all the archives, in a correct order
Add_Archives (For_Gnatmake => False);
-- If there are shared libraries and the run path
-- option is supported, add the run path switch.

View File

@ -1556,7 +1556,7 @@ package body MLib.Prj is
Data : constant Project_Data := Projects.Table (For_Project);
begin
if Data.Library and not Data.Flag1 then
if Data.Library and not Data.Need_To_Build_Lib then
declare
Current : constant Dir_Name_Str := Get_Current_Dir;
Lib_Name : constant Name_Id := Library_File_Name_For (For_Project);
@ -1596,17 +1596,17 @@ package body MLib.Prj is
Obj_TS := File_Stamp (Name_Find);
-- If library file time stamp is earlier, set Flag1 and
-- return. String comparaison is used, otherwise time stamps
-- may be too close and the comparaison would return True,
-- which would trigger an unnecessary rebuild of the
-- library.
-- If library file time stamp is earlier, set
-- Need_To_Build_Lib and return. String comparaison is used,
-- otherwise time stamps may be too close and the
-- comparaison would return True, which would trigger
-- an unnecessary rebuild of the library.
if String (Lib_TS) < String (Obj_TS) then
-- Library must be rebuilt
Projects.Table (For_Project).Flag1 := True;
Projects.Table (For_Project).Need_To_Build_Lib := True;
exit;
end if;
end if;

View File

@ -134,8 +134,8 @@ package body MLib.Tgt is
pragma Unreferenced (Lib_Version);
Lib_File : constant String :=
Lib_Dir & Directory_Separator & "lib" &
MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
Lib_Dir & Directory_Separator & "lib" &
MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
-- The file name of the library
Init_Fini : Argument_List_Access := Empty_Argument_List;

View File

@ -113,8 +113,8 @@ package body MLib.Tgt is
pragma Unreferenced (Symbol_Data);
Lib_File : constant String :=
Lib_Dir & Directory_Separator & "lib" &
MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
Lib_Dir & Directory_Separator & "lib" &
MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
Version_Arg : String_Access;
Symbolic_Link_Needed : Boolean := False;
@ -135,6 +135,7 @@ package body MLib.Tgt is
end if;
-- If specified, add automatic elaboration/finalization
if Auto_Init then
Init_Fini := Init_Fini_List;
Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");

View File

@ -114,8 +114,8 @@ package body MLib.Tgt is
pragma Unreferenced (Symbol_Data);
Lib_File : constant String :=
Lib_Dir & Directory_Separator & "lib" &
MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
Lib_Dir & Directory_Separator & "lib" &
MLib.Fil.Ext_To (Lib_Filename, DLL_Ext);
Version_Arg : String_Access;
Symbolic_Link_Needed : Boolean := False;
@ -129,6 +129,7 @@ package body MLib.Tgt is
end if;
-- If specified, add automatic elaboration/finalization
if Auto_Init then
Init_Fini := Init_Fini_List;
Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");

View File

@ -117,8 +117,8 @@ package body MLib.Tgt is
pragma Unreferenced (Symbol_Data);
Lib_File : constant String :=
Lib_Dir & Directory_Separator & "lib" &
Fil.Ext_To (Lib_Filename, DLL_Ext);
Lib_Dir & Directory_Separator & "lib" &
Fil.Ext_To (Lib_Filename, DLL_Ext);
Version_Arg : String_Access;
Symbolic_Link_Needed : Boolean := False;
@ -132,6 +132,7 @@ package body MLib.Tgt is
end if;
-- If specified, add automatic elaboration/finalization
if Auto_Init then
Init_Fini := Init_Fini_List;
Init_Fini (2) := new String'("-Wl," & Lib_Filename & "init");

View File

@ -107,8 +107,8 @@ package body MLib.Tgt is
pragma Unreferenced (Lib_Version);
Lib_File : constant String :=
Lib_Dir & Directory_Separator &
Files.Ext_To (Lib_Filename, DLL_Ext);
Lib_Dir & Directory_Separator &
Files.Ext_To (Lib_Filename, DLL_Ext);
-- Start of processing for Build_Dynamic_Library
@ -207,7 +207,7 @@ package body MLib.Tgt is
else
return Is_Regular_File
(Lib_Dir & Directory_Separator & "lib" &
(Lib_Dir & Directory_Separator &
MLib.Fil.Ext_To (Lib_Name, DLL_Ext));
end if;
end;
@ -231,13 +231,13 @@ package body MLib.Tgt is
Get_Name_String (Projects.Table (Project).Library_Name);
begin
Name_Len := 3;
Name_Buffer (1 .. Name_Len) := "lib";
if Projects.Table (Project).Library_Kind = Static then
Name_Len := 3;
Name_Buffer (1 .. Name_Len) := "lib";
Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
else
Name_Len := 0;
Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
end if;

View File

@ -111,8 +111,8 @@ package body MLib.Tgt is
pragma Unreferenced (Symbol_Data);
Lib_File : constant String :=
Lib_Dir & Directory_Separator & "lib" &
Fil.Ext_To (Lib_Filename, DLL_Ext);
Lib_Dir & Directory_Separator & "lib" &
Fil.Ext_To (Lib_Filename, DLL_Ext);
Version_Arg : String_Access;
Symbolic_Link_Needed : Boolean := False;
@ -126,6 +126,7 @@ package body MLib.Tgt is
end if;
-- If specified, add automatic elaboration/finalization
if Auto_Init then
Init_Fini := Init_Fini_List;
Init_Fini (1) :=

View File

@ -119,8 +119,8 @@ package body MLib.Tgt is
pragma Unreferenced (Symbol_Data);
Lib_File : constant String :=
Lib_Dir & Directory_Separator & "lib" &
Fil.Ext_To (Lib_Filename, DLL_Ext);
Lib_Dir & Directory_Separator & "lib" &
Fil.Ext_To (Lib_Filename, DLL_Ext);
Version_Arg : String_Access;
Symbolic_Link_Needed : Boolean := False;

View File

@ -140,7 +140,7 @@ package body MLib.Tgt is
Lib_File : constant String :=
Lib_Dir & Directory_Separator & "lib" &
Fil.Ext_To (Lib_Filename, DLL_Ext);
Fil.Ext_To (Lib_Filename, DLL_Ext);
Opts : Argument_List := Options;
Last_Opt : Natural := Opts'Last;
@ -151,8 +151,8 @@ package body MLib.Tgt is
function Is_Interface (Obj_File : String) return Boolean;
-- For a Stand-Alone Library, returns True if Obj_File is the object
-- file name of an interface of the SAL.
-- For other libraries, always return True.
-- file name of an interface of the SAL. For other libraries, always
-- return True.
function Option_File_Name return String;
-- Returns Symbol_File, if not empty. Otherwise, returns "symvec.opt"

View File

@ -140,7 +140,7 @@ package body MLib.Tgt is
Lib_File : constant String :=
Lib_Dir & Directory_Separator & "lib" &
Fil.Ext_To (Lib_Filename, DLL_Ext);
Fil.Ext_To (Lib_Filename, DLL_Ext);
Opts : Argument_List := Options;
Last_Opt : Natural := Opts'Last;
@ -151,8 +151,8 @@ package body MLib.Tgt is
function Is_Interface (Obj_File : String) return Boolean;
-- For a Stand-Alone Library, returns True if Obj_File is the object
-- file name of an interface of the SAL.
-- For other libraries, always return True.
-- file name of an interface of the SAL. For other libraries, always
-- return True.
function Option_File_Name return String;
-- Returns Symbol_File, if not empty. Otherwise, returns "symvec.opt"

View File

@ -747,6 +747,10 @@ package body Prj.Dect is
Set_End_Of_Line (Current_Declaration);
Set_Previous_Line_Node (Current_Declaration);
when Tok_Null =>
Scan; -- past "null"
when Tok_Package =>
-- Package declaration

View File

@ -78,8 +78,8 @@ package body Prj is
First_Referred_By => No_Project,
Name => No_Name,
Path_Name => No_Name,
Virtual => False,
Display_Path_Name => No_Name,
Virtual => False,
Location => No_Location,
Mains => Nil_String,
Directory => No_Name,
@ -127,8 +127,7 @@ package body Prj is
Language_Independent_Checked => False,
Checked => False,
Seen => False,
Flag1 => False,
Flag2 => False,
Need_To_Build_Lib => False,
Depth => 0,
Unkept_Comments => False);

View File

@ -40,8 +40,8 @@ with GNAT.OS_Lib; use GNAT.OS_Lib;
package Prj is
Empty_Name : Name_Id;
-- Name_Id for an empty name (no characters).
-- Initialized by procedure Initialize.
-- Name_Id for an empty name (no characters). Initialized by the call
-- to procedure Initialize.
All_Packages : constant String_List_Access := null;
-- Default value of parameter Packages of procedures Parse, in Prj.Pars and
@ -52,9 +52,8 @@ package Prj is
-- normally forbidden for project names, there cannot be any name clash.
Project_File_Extension : String := ".gpr";
-- The standard project file name extension.
-- It is not a constant, because Canonical_Case_File_Name is called
-- on this variable in the body of Prj.
-- The standard project file name extension. It is not a constant, because
-- Canonical_Case_File_Name is called on this variable in the body of Prj.
Default_Ada_Spec_Suffix : Name_Id;
-- The Name_Id for the standard GNAT suffix for Ada spec source file
@ -72,15 +71,24 @@ package Prj is
type Programming_Language is
(Lang_Ada, Lang_C, Lang_C_Plus_Plus);
-- The list of language supported
-- The set of languages supported
subtype Other_Programming_Language is
Programming_Language range Lang_C .. Programming_Language'Last;
Programming_Language range Lang_C .. Programming_Language'Last;
-- The set of non-Ada languages supported
type Languages_In_Project is array (Programming_Language) of Boolean;
-- Set of supported languages used in a project
No_Languages : constant Languages_In_Project := (others => False);
-- No supported languages are used
type Impl_Suffix_Array is array (Programming_Language) of Name_Id;
-- Suffixes for the non spec sources of the different supported languages
-- in a project.
No_Impl_Suffixes : constant Impl_Suffix_Array := (others => No_Name);
-- A default value for the non spec source suffixes
Lang_Ada_Name : aliased String := "ada";
Lang_C_Name : aliased String := "c";
@ -93,7 +101,8 @@ package Prj is
-- -x when using a GCC compiler.
Lang_Name_Ids : array (Programming_Language) of Name_Id;
-- Initialized by Prj.Initialize
-- Same as Lang_Names, but using Name_Id, instead of String_Access.
-- Initialized by Prj.Initialize.
Lang_Ada_Display_Name : aliased String := "Ada";
Lang_C_Display_Name : aliased String := "C";
@ -115,8 +124,9 @@ package Prj is
Lang_C_Plus_Plus => C_Plus_Plus_Impl_Suffix'Access);
-- Default extension of the sources of the different languages.
Lang_Suffix_Ids : array (Programming_Language) of Name_Id;
-- Initialized by Prj.Initialize
Lang_Suffix_Ids : array (Programming_Language) of Name_Id;
-- Same as Lang_Suffixes, but using Name_Id, instead of String_Access.
-- Initialized by Prj.Initialize.
Gnatmake_String : aliased String := "gnatmake";
Gcc_String : aliased String := "gcc";
@ -137,6 +147,10 @@ package Prj is
(Lang_Ada => Ada_Args_Strings 'Access,
Lang_C => C_Args_String 'Access,
Lang_C_Plus_Plus => C_Plus_Plus_Args_String'Access);
-- For each supported language, the string between "-c" and "args" to
-- be used in the gprmake switch for the start of the compiling switch
-- section for each supported language. For example, "-ccargs" indicates
-- the start of the C compiler switch section.
type Other_Source_Id is new Nat;
No_Other_Source : constant Other_Source_Id := 0;
@ -154,6 +168,7 @@ package Prj is
Naming_Exception : Boolean := False; -- True if a naming exception
Next : Other_Source_Id := No_Other_Source;
end record;
-- Data for a source in a language other than Ada
package Other_Sources is new Table.Table
(Table_Component_Type => Other_Source,
@ -171,9 +186,13 @@ package Prj is
-- High is extremely verbose.
type Lib_Kind is (Static, Dynamic, Relocatable);
type Policy is (Autonomous, Compliant, Controlled, Restricted);
-- See explaination about this type in package Symbols
-- Type to specify the symbol policy, when symbol control is supported.
-- See full explanation about this type in package Symbols.
-- Autonomous: Create a symbol file without considering any reference
-- Compliant: Try to be as compatible as possible with an existing ref
-- Controlled: Fail if symbols are not the same as those in the reference
-- Restricted: Restrict the symbols to those in the symbol file
type Symbol_Record is record
Symbol_File : Name_Id := No_Name;
@ -186,8 +205,10 @@ package Prj is
(Symbol_File => No_Name,
Reference => No_Name,
Symbol_Policy => Autonomous);
-- The default value of the symbol data
function Empty_String return Name_Id;
-- Return the Name_Id for an empty string ""
type Project_Id is new Nat;
No_Project : constant Project_Id := 0;
@ -237,8 +258,8 @@ package Prj is
Index : Int := 0;
end case;
end record;
-- Values for variables and array elements.
-- Default is True if the current value is the default one for the variable
-- Values for variables and array elements. Default is True if the
-- current value is the default one for the variable
Nil_Variable_Value : constant Variable_Value :=
(Project => No_Project,
@ -314,13 +335,15 @@ package Prj is
Arrays : Array_Id := No_Array;
Packages : Package_Id := No_Package;
end record;
-- Contains the declarations (variables, single and array attributes,
-- packages) for a project or a package in a project.
No_Declarations : constant Declarations :=
(Variables => No_Variable,
Attributes => No_Variable,
Arrays => No_Array,
Packages => No_Package);
-- Declarations. Used in project structures and packages (what for???)
-- Default value of Declarations: indicates that there is no declarations.
type Package_Element is record
Name : Name_Id := No_Name;
@ -387,36 +410,32 @@ package Prj is
-- Current_Body_Suffix is defined.
Separate_Suffix : Name_Id := No_Name;
-- The string to append to the unit name for the
-- source file name of an Ada subunit.
-- String to append to unit name for source file name of an Ada subunit.
Sep_Suffix_Loc : Source_Ptr := No_Location;
-- The position in the project file source where
-- Separate_Suffix is defined.
-- Position in the project file source where Separate_Suffix is defined.
Specs : Array_Element_Id := No_Array_Element;
-- An associative array mapping individual specs
-- to source file names. Specific to Ada.
-- An associative array mapping individual specs to source file names.
-- This is specific to Ada.
Bodies : Array_Element_Id := No_Array_Element;
-- An associative array mapping individual bodies
-- to source file names. Specific to Ada.
-- An associative array mapping individual bodies to source file names.
-- This is specific to Ada.
Specification_Exceptions : Array_Element_Id := No_Array_Element;
-- An associative array listing spec file names that don't have the
-- spec suffix. Not used by Ada. Indexed by the programming language
-- name.
-- An associative array listing spec file names that do not have the
-- spec suffix. Not used by Ada. Indexed by programming language name.
Implementation_Exceptions : Array_Element_Id := No_Array_Element;
-- An associative array listing body file names that don't have the
-- body suffix. Not used by Ada. Indexed by the programming language
-- name.
-- An associative array listing body file names that do not have the
-- body suffix. Not used by Ada. Indexed by programming language name.
end record;
function Standard_Naming_Data return Naming_Data;
pragma Inline (Standard_Naming_Data);
-- The standard GNAT naming scheme.
-- The standard GNAT naming scheme
function Same_Naming_Scheme
(Left, Right : Naming_Data)
@ -426,14 +445,14 @@ package Prj is
type Project_List is new Nat;
Empty_Project_List : constant Project_List := 0;
-- A list of project files.
-- A list of project files
type Project_Element is record
Project : Project_Id := No_Project;
Next : Project_List := Empty_Project_List;
end record;
-- Element in a list of project file.
-- Next is the id of the next project file in the list.
-- Element in a list of project files. Next is the id of the next
-- project file in the list.
package Project_Lists is new Table.Table
(Table_Component_Type => Project_Element,
@ -442,7 +461,7 @@ package Prj is
Table_Initial => 100,
Table_Increment => 100,
Table_Name => "Prj.Project_Lists");
-- The table that contains the lists of project files.
-- The table that contains the lists of project files
-- The following record describes a project file representation
@ -459,30 +478,27 @@ package Prj is
-- Set by Prj.Proc.Process.
Name : Name_Id := No_Name;
-- The name of the project.
-- Set by Prj.Proc.Process.
-- The name of the project. Set by Prj.Proc.Process.
Path_Name : Name_Id := No_Name;
-- The path name of the project file.
-- Set by Prj.Proc.Process.
-- The path name of the project file. Set by Prj.Proc.Process.
Display_Path_Name : Name_Id := No_Name;
-- The path name used for display purposes. May be different from
-- Path_Name for platforms where the file names are case-insensitive.
Virtual : Boolean := False;
-- True for virtual extending projects
Display_Path_Name : Name_Id := No_Name;
Location : Source_Ptr := No_Location;
-- The location in the project file source of the
-- reserved word project.
-- Set by Prj.Proc.Process.
-- The location in the project file source of the reserved word
-- project. Set by Prj.Proc.Process.
Mains : String_List_Id := Nil_String;
-- The list of mains as specified by attribute Main.
-- Set by Prj.Nmsc.Ada_Check.
-- List of mains specified by attribute Main. Set by Prj.Nmsc.Ada_Check.
Directory : Name_Id := No_Name;
-- The directory where the project file resides.
-- Set by Prj.Proc.Process.
-- Directory where the project file resides. Set by Prj.Proc.Process.
Display_Directory : Name_Id := No_Name;
@ -499,6 +515,9 @@ package Prj is
-- Set by Prj.Nmsc.Language_Independent_Check.
Display_Library_Dir : Name_Id := No_Name;
-- The name of the library directory, for display purposes.
-- May be different from Library_Dir for platforms where the file names
-- are case-insensitive.
Library_Src_Dir : Name_Id := No_Name;
-- If a library project, directory where the sources and the ALI files
@ -508,6 +527,9 @@ package Prj is
-- Set by Prj.Nmsc.Language_Independent_Check.
Display_Library_Src_Dir : Name_Id := No_Name;
-- The name of the library source directory, for display purposes.
-- May be different from Library_Src_Dir for platforms where the file
-- names are case-insensitive.
Library_Name : Name_Id := No_Name;
-- If a library project, name of the library
@ -527,10 +549,9 @@ package Prj is
Lib_Interface_ALIs : String_List_Id := Nil_String;
-- For Standalone Library Project Files, indicate the list
-- of Interface ALI files.
-- Set by Prj.Nmsc.Ada_Check.
-- of Interface ALI files. Set by Prj.Nmsc.Ada_Check.
Lib_Auto_Init : Boolean := False;
Lib_Auto_Init : Boolean := False;
-- For non static Standalone Library Project Files, indicate if
-- the library initialisation should be automatic.
@ -539,16 +560,17 @@ package Prj is
Ada_Sources_Present : Boolean := True;
-- A flag that indicates if there are Ada sources in this project file.
-- There are no sources if 1) Source_Dirs is specified as an
-- empty list, 2) Source_Files is specified as an empty list, or
-- 3) Ada is not in the list of the specified Languages.
-- There are no sources if any of the following is true:
-- 1) Source_Dirs is specified as an empty list
-- 2) Source_Files is specified as an empty list
-- 3) Ada is not in the list of the specified Languages
Other_Sources_Present : Boolean := True;
Other_Sources_Present : Boolean := True;
-- A flag that indicates that there are non-Ada sources in this project
Sources : String_List_Id := Nil_String;
-- The list of all the source file names.
-- Set by Prj.Nmsc.Check_Ada_Naming_Scheme.
-- The list of all the source file names. Set by
-- Prj.Nmsc.Check_Ada_Naming_Scheme.
First_Other_Source : Other_Source_Id := No_Other_Source;
Last_Other_Source : Other_Source_Id := No_Other_Source;
@ -563,8 +585,7 @@ package Prj is
-- -I switches.
Include_Data_Set : Boolean := False;
-- Set to True when Imported_Directories_Switches or Include_Path are
-- set.
-- Set True when Imported_Directories_Switches or Include_Path are set
Source_Dirs : String_List_Id := Nil_String;
-- The list of all the source directories.
@ -580,48 +601,48 @@ package Prj is
-- Set by Prj.Nmsc.Language_Independent_Check.
Display_Object_Dir : Name_Id := No_Name;
-- The name of the object directory, for display purposes.
-- May be different from Object_Directory for platforms where the file
-- names are case-insensitive.
Exec_Directory : Name_Id := No_Name;
-- The exec directory of this project file.
-- Default is equal to Object_Directory.
-- Set by Prj.Nmsc.Language_Independent_Check.
Exec_Directory : Name_Id := No_Name;
-- The exec directory of this project file. Default is equal to
-- Object_Directory. Set by Prj.Nmsc.Language_Independent_Check.
Display_Exec_Dir : Name_Id := No_Name;
-- The name of the exec directory, for display purposes.
-- May be different from Exec_Directory for platforms where the file
-- names are case-insensitive.
Extends : Project_Id := No_Project;
-- The reference of the project file, if any, that this
-- project file extends.
-- Set by Prj.Proc.Process.
-- project file extends. Set by Prj.Proc.Process.
Extended_By : Project_Id := No_Project;
-- The reference of the project file, if any, that
-- extends this project file.
-- Set by Prj.Proc.Process.
-- extends this project file. Set by Prj.Proc.Process.
Naming : Naming_Data := Standard_Naming_Data;
-- The naming scheme of this project file.
-- Set by Prj.Nmsc.Check_Naming_Scheme.
Decl : Declarations := No_Declarations;
-- The declarations (variables, attributes and packages)
-- of this project file.
-- Set by Prj.Proc.Process.
-- The declarations (variables, attributes and packages) of this
-- project file. Set by Prj.Proc.Process.
Imported_Projects : Project_List := Empty_Project_List;
-- The list of all directly imported projects, if any.
-- Set by Prj.Proc.Process.
Ada_Include_Path : String_Access := null;
Ada_Include_Path : String_Access := null;
-- The cached value of ADA_INCLUDE_PATH for this project file.
-- Do not use this field directly outside of the compiler, use
-- Prj.Env.Ada_Include_Path instead.
-- Set by Prj.Env.Ada_Include_Path.
-- Prj.Env.Ada_Include_Path instead. Set by Prj.Env.Ada_Include_Path.
Ada_Objects_Path : String_Access := null;
Ada_Objects_Path : String_Access := null;
-- The cached value of ADA_OBJECTS_PATH for this project file.
-- Do not use this field directly outside of the compiler, use
-- Prj.Env.Ada_Objects_Path instead.
-- Set by Prj.Env.Ada_Objects_Path
-- Prj.Env.Ada_Objects_Path instead. Set by Prj.Env.Ada_Objects_Path
Include_Path_File : Name_Id := No_Name;
-- The cached value of the source path temp file for this project file.
@ -629,13 +650,11 @@ package Prj is
Objects_Path_File_With_Libs : Name_Id := No_Name;
-- The cached value of the object path temp file (including library
-- dirs) for this project file.
-- Set by gnatmake (Prj.Env.Set_Ada_Paths).
-- dirs) for this project file. Set by gnatmake (Prj.Env.Set_Ada_Paths).
Objects_Path_File_Without_Libs : Name_Id := No_Name;
-- The cached value of the object path temp file (excluding library
-- dirs) for this project file.
-- Set by gnatmake (Prj.Env.Set_Ada_Paths).
-- dirs) for this project file. Set by gnatmake (Prj.Env.Set_Ada_Paths).
Config_File_Name : Name_Id := No_Name;
-- The name of the configuration pragmas file, if any.
@ -657,17 +676,15 @@ package Prj is
Checked : Boolean := False;
-- A flag to avoid checking repetitively the naming scheme of
-- this project file.
-- Set by Prj.Nmsc.Check_Ada_Naming_Scheme.
-- this project file. Set by Prj.Nmsc.Check_Ada_Naming_Scheme.
Seen : Boolean := False;
Flag1 : Boolean := False;
Flag2 : Boolean := False;
-- Various flags that are used in an ad hoc manner
-- That's really not a good enough comment ??? we need to know what
-- these flags are used for, and give them proper names. If Flag1
-- and Flag2 have multiple uses, then either we use multiple fields
-- or a renaming scheme.
Seen : Boolean := False;
-- A flag to mark a project as "visited" to avoid processing the same
-- project several time.
Need_To_Build_Lib : Boolean := False;
-- Indicates that the library of a Library Project needs to be built or
-- rebuilt.
Depth : Natural := 0;
-- The maximum depth of a project in the project graph.
@ -680,7 +697,7 @@ package Prj is
end record;
function Empty_Project return Project_Data;
-- Return the representation of an empty project.
-- Return the representation of an empty project
package Projects is new Table.Table (
Table_Component_Type => Project_Data,
@ -689,12 +706,12 @@ package Prj is
Table_Initial => 100,
Table_Increment => 100,
Table_Name => "Prj.Projects");
-- The set of all project files.
-- The set of all project files
type Put_Line_Access is access procedure
(Line : String;
Project : Project_Id);
-- Use to customize error reporting in Prj.Proc and Prj.Nmsc.
-- Use to customize error reporting in Prj.Proc and Prj.Nmsc
procedure Expect (The_Token : Token_Type; Token_Image : String);
-- Check that the current token is The_Token. If it is not, then
@ -709,7 +726,7 @@ package Prj is
-- project file tree. Initialize must be called before the call to Reset.
procedure Register_Default_Naming_Scheme
(Language : Name_Id;
(Language : Name_Id;
Default_Spec_Suffix : Name_Id;
Default_Body_Suffix : Name_Id);
-- Register the default suffixs for a given language. These extensions
@ -736,6 +753,7 @@ package Prj is
private
Initial_Buffer_Size : constant := 100;
-- Initial size for extensible buffer used below
Buffer : String_Access := new String (1 .. Initial_Buffer_Size);
-- An extensible character buffer to store names. Used in Prj.Part and

View File

@ -70,6 +70,11 @@ package body Rtsfind is
-- a unit is loaded to contain the defining entity for the unit, the
-- unit name, and the unit number.
-- Note that a unit can be loaded either by a call to find an entity
-- within the unit (e.g. RTE), or by an explicit with of the unit. In
-- the latter case it is critical to make a call to Set_RTU_Loaded to
-- ensure that the entry in this table reflects the load.
type RT_Unit_Table_Record is record
Entity : Entity_Id;
Uname : Unit_Name_Type;
@ -139,7 +144,7 @@ package body Rtsfind is
function Get_Unit_Name (U_Id : RTU_Id) return Unit_Name_Type;
-- Retrieves the Unit Name given a unit id represented by its
-- enumaration value in RTU_Id.
-- enumeration value in RTU_Id.
procedure Load_RTU
(U_Id : RTU_Id;
@ -958,7 +963,7 @@ package body Rtsfind is
-- a WITH if the current unit is part of the extended main code
-- unit, and if we have not already added the with. The WITH is
-- added to the appropriate unit (the current one). We do not need
-- to generate a WITH for an
-- to generate a WITH for an ????
<<Found>>
if (not U.Withed)
@ -1052,11 +1057,49 @@ package body Rtsfind is
function RTU_Loaded (U : RTU_Id) return Boolean is
begin
return True or else Present (RT_Unit_Table (U).Entity);
-- Temporary kludge until we get proper interaction to ensure that
-- an explicit WITH of a unit is properly registered in rtsfind ???
return Present (RT_Unit_Table (U).Entity);
end RTU_Loaded;
--------------------
-- Set_RTU_Loaded --
--------------------
procedure Set_RTU_Loaded (N : Node_Id) is
Loc : constant Source_Ptr := Sloc (N);
Unum : constant Unit_Number_Type := Get_Source_Unit (Loc);
Uname : constant Unit_Name_Type := Unit_Name (Unum);
E : constant Entity_Id :=
Defining_Entity (Unit (Cunit (Unum)));
begin
pragma Assert (Is_Predefined_File_Name (Unit_File_Name (Unum)));
-- Loop through entries in RTU table looking for matching entry
for U_Id in RTU_Id'Range loop
-- Here we have a match
if Get_Unit_Name (U_Id) = Uname then
declare
U : RT_Unit_Table_Record renames RT_Unit_Table (U_Id);
-- The RT_Unit_Table entry that may need updating
begin
-- If entry is not set, set it now
if not Present (U.Entity) then
U.Entity := E;
U.Uname := Get_Unit_Name (U_Id);
U.Unum := Unum;
U.Withed := False;
end if;
return;
end;
end if;
end loop;
end Set_RTU_Loaded;
--------------------
-- Text_IO_Kludge --
--------------------

View File

@ -2695,7 +2695,7 @@ package Rtsfind is
--
-- If RTE returns, the returned value is the required entity
--
-- If the entity is not available, then an error message is given The
-- If the entity is not available, then an error message is given. The
-- form of the message depends on whether we are in configurable run time
-- mode or not. In configurable run time mode, a missing entity is not
-- that surprising and merely says that the particular construct is not
@ -2732,6 +2732,9 @@ package Rtsfind is
-- If the unit has not been loaded, returns False. Note that this does
-- not mean that an attempt to load it subsequently would fail.
procedure Set_RTU_Loaded (N : Node_Id);
-- Register the predefined unit N as already loaded.
procedure Text_IO_Kludge (Nam : Node_Id);
-- In Ada 83, and hence for compatibility in Ada 9X, package Text_IO has
-- generic subpackages (e.g. Integer_IO). They really should be child

View File

@ -43,6 +43,7 @@ with Nmake; use Nmake;
with Opt; use Opt;
with Output; use Output;
with Restrict; use Restrict;
with Rtsfind; use Rtsfind;
with Sem; use Sem;
with Sem_Ch6; use Sem_Ch6;
with Sem_Ch7; use Sem_Ch7;
@ -496,6 +497,16 @@ package body Sem_Ch10 is
Set_Acts_As_Spec (N);
end if;
-- Register predefined units in Rtsfind
declare
Unum : constant Unit_Number_Type := Get_Source_Unit (Sloc (N));
begin
if Is_Predefined_File_Name (Unit_File_Name (Unum)) then
Set_RTU_Loaded (Unit_Node);
end if;
end;
-- Treat compilation unit pragmas that appear after the library unit
if Present (Pragmas_After (Aux_Decls_Node (N))) then

View File

@ -6568,9 +6568,11 @@ package body Sem_Ch12 is
Next_Non_Pragma (Formal_Node);
else
-- No further formals to match.
-- No further formals to match, but the generic
-- part may contain inherited operation that are
-- not hidden in the enclosing instance.
exit;
Next_Entity (Actual_Ent);
end if;
end loop;

View File

@ -1676,10 +1676,8 @@ package body Sem_Util is
-- hides the implicit one, which is removed from all visibility,
-- i.e. the entity list of its scope, and homonym chain of its name.
elsif (Is_Overloadable (E) and then Present (Alias (E)))
elsif (Is_Overloadable (E) and then Is_Inherited_Operation (E))
or else Is_Internal (E)
or else (Ekind (E) = E_Enumeration_Literal
and then Is_Derived_Type (Etype (E)))
then
declare
Prev : Entity_Id;
@ -5363,7 +5361,25 @@ package body Sem_Util is
if Is_Private_Type (Btype)
and then not Is_Generic_Type (Btype)
then
return Btype;
if Present (Full_View (Btype))
and then Is_Record_Type (Full_View (Btype))
and then not Is_Frozen (Btype)
then
-- To indicate that the ancestor depends on a private type,
-- the current Btype is sufficient. However, to check for
-- circular definition we must recurse on the full view.
Candidate := Trace_Components (Full_View (Btype), True);
if Candidate = Any_Type then
return Any_Type;
else
return Btype;
end if;
else
return Btype;
end if;
elsif Is_Array_Type (Btype) then
return Trace_Components (Component_Type (Btype), True);