[multiple changes]

2009-04-10  Robert Dewar  <dewar@adacore.com>

	* einfo.ads, einfo.adb (Low_Bound_Tested): New name for Low_Bound_Known

	* sem_prag.adb (Analyze_Pragma, case Check): Remove check for lower
	bound tested, since this is now done more generally in Sem_Res.

	* sem_res.adb (Resolve_Comparison_Op): Add call to
	Check_Lower_Bound_Tested.
	(Resolve_Equality_Op): Add call to Check_Lower_Bound_Tested

	* sem_warn.ads, sem_warn.adb (Check_Low_Bound_Tested): New procedure
	(Low_Bound_Tested): New name for Low_Bound_Known flag

	* exp_ch5.adb: Minor reformatting

	* exp_ch4.adb:
	Add comments on copying the Comes_From_Source flag for allocators

	* sinfo.ads:
	Add comments on copying the Comes_From_Source flag for allocators

	* exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Copy
	Comes_From_Source flag from old allocator to new one.

2009-04-10  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch6.ads: Address missing documentation query

2009-04-10  Vincent Celier  <celier@adacore.com>

	* prj-attr.adb:
	Add new Linker attributes Max_Command_Line_Length, Response_File_Format
	and Response_File_Switches.

	* prj-nmsc.adb (Process_Linker): Process new attributes
	Max_Command_Line_Length, Response_File_Format and
	Response_File_Switches.

	* prj.ads (Response_File_Format): New enumeration type
	(Project_Configuration): New componants Max_Command_Line_Length,
	Resp_File_Format and Resp_File_Options.

	* snames.ads-tmpl: Add new standard names for linking response files
	for gprbuild: GNU, None, Object_List, Option_List,
	Max_Command_Line_Length, Response_File_Format and
	Response_File_Switches.

2009-04-10  Geert Bosch  <bosch@adacore.com>

	* system-aix.ads, system-darwin-ppc.ads, system-darwin-x86.ads,
	system-freebsd-x86.ads, system-hpux.ads, system-hpux-ia64.ads,
	system-irix-n32.ads, system-irix-o32.ads, system-linux-alpha.ads,
	system-linux-hppa.ads, system-linux-ia64.ads, system-linux-ppc.ads,
	system-linux-s390.ads, system-linux-s390x.ads, system-linux-sh4.ads,
	system-linux-sparc.ads, system-linux-x86_64.ads, system-linux-x86.ads,
	system-mingw.ads, system-solaris-sparc.ads, system-solaris-sparcv9.ads,
	system-solaris-x86.ads, system-tru64.ads, system-vms_64.ads,
	system-vms.ads, system-vms-ia64.ads, system-vms-zcx.ads,
	system-vxworks-arm.ads, system-vxworks-m68k.ads,
	system-vxworks-mips.ads, system-vxworks-ppc.ads,
	system-vxworks-sparcv9.ads, system-vxworks-x86.ads
	(Backend_Overflow_Checks): Set to True.

From-SVN: r145924
This commit is contained in:
Arnaud Charlet 2009-04-10 17:57:48 +02:00
parent 934a3a2580
commit fad0600db0
49 changed files with 349 additions and 87 deletions

View File

@ -1,3 +1,67 @@
2009-04-10 Robert Dewar <dewar@adacore.com>
* einfo.ads, einfo.adb (Low_Bound_Tested): New name for Low_Bound_Known
* sem_prag.adb (Analyze_Pragma, case Check): Remove check for lower
bound tested, since this is now done more generally in Sem_Res.
* sem_res.adb (Resolve_Comparison_Op): Add call to
Check_Lower_Bound_Tested.
(Resolve_Equality_Op): Add call to Check_Lower_Bound_Tested
* sem_warn.ads, sem_warn.adb (Check_Low_Bound_Tested): New procedure
(Low_Bound_Tested): New name for Low_Bound_Known flag
* exp_ch5.adb: Minor reformatting
* exp_ch4.adb:
Add comments on copying the Comes_From_Source flag for allocators
* sinfo.ads:
Add comments on copying the Comes_From_Source flag for allocators
* exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Copy
Comes_From_Source flag from old allocator to new one.
2009-04-10 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.ads: Address missing documentation query
2009-04-10 Vincent Celier <celier@adacore.com>
* prj-attr.adb:
Add new Linker attributes Max_Command_Line_Length, Response_File_Format
and Response_File_Switches.
* prj-nmsc.adb (Process_Linker): Process new attributes
Max_Command_Line_Length, Response_File_Format and
Response_File_Switches.
* prj.ads (Response_File_Format): New enumeration type
(Project_Configuration): New componants Max_Command_Line_Length,
Resp_File_Format and Resp_File_Options.
* snames.ads-tmpl: Add new standard names for linking response files
for gprbuild: GNU, None, Object_List, Option_List,
Max_Command_Line_Length, Response_File_Format and
Response_File_Switches.
2009-04-10 Geert Bosch <bosch@adacore.com>
* system-aix.ads, system-darwin-ppc.ads, system-darwin-x86.ads,
system-freebsd-x86.ads, system-hpux.ads, system-hpux-ia64.ads,
system-irix-n32.ads, system-irix-o32.ads, system-linux-alpha.ads,
system-linux-hppa.ads, system-linux-ia64.ads, system-linux-ppc.ads,
system-linux-s390.ads, system-linux-s390x.ads, system-linux-sh4.ads,
system-linux-sparc.ads, system-linux-x86_64.ads, system-linux-x86.ads,
system-mingw.ads, system-solaris-sparc.ads, system-solaris-sparcv9.ads,
system-solaris-x86.ads, system-tru64.ads, system-vms_64.ads,
system-vms.ads, system-vms-ia64.ads, system-vms-zcx.ads,
system-vxworks-arm.ads, system-vxworks-m68k.ads,
system-vxworks-mips.ads, system-vxworks-ppc.ads,
system-vxworks-sparcv9.ads, system-vxworks-x86.ads
(Backend_Overflow_Checks): Set to True.
2009-04-10 Thomas Quinot <quinot@adacore.com>
* exp_attr.adb: Minor reformatting

View File

@ -460,7 +460,7 @@ package body Einfo is
-- Itype_Printed Flag202
-- Has_Pragma_Pure Flag203
-- Is_Known_Null Flag204
-- Low_Bound_Known Flag205
-- Low_Bound_Tested Flag205
-- Is_Visible_Formal Flag206
-- Known_To_Have_Preelab_Init Flag207
-- Must_Have_Preelab_Init Flag208
@ -2160,10 +2160,10 @@ package body Einfo is
return Node16 (Id);
end Lit_Strings;
function Low_Bound_Known (Id : E) return B is
function Low_Bound_Tested (Id : E) return B is
begin
return Flag205 (Id);
end Low_Bound_Known;
end Low_Bound_Tested;
function Machine_Radix_10 (Id : E) return B is
begin
@ -4627,11 +4627,11 @@ package body Einfo is
Set_Node16 (Id, V);
end Set_Lit_Strings;
procedure Set_Low_Bound_Known (Id : E; V : B := True) is
procedure Set_Low_Bound_Tested (Id : E; V : B := True) is
begin
pragma Assert (Is_Formal (Id));
Set_Flag205 (Id, V);
end Set_Low_Bound_Known;
end Set_Low_Bound_Tested;
procedure Set_Machine_Radix_10 (Id : E; V : B := True) is
begin
@ -6971,7 +6971,7 @@ package body Einfo is
W ("Kill_Range_Checks", Flag33 (Id));
W ("Kill_Tag_Checks", Flag34 (Id));
W ("Known_To_Have_Preelab_Init", Flag207 (Id));
W ("Low_Bound_Known", Flag205 (Id));
W ("Low_Bound_Tested", Flag205 (Id));
W ("Machine_Radix_10", Flag84 (Id));
W ("Materialize_Entity", Flag168 (Id));
W ("Must_Be_On_Byte_Boundary", Flag183 (Id));

View File

@ -2757,15 +2757,13 @@ package Einfo is
-- the nature and use of this entity for implementing the Image and
-- Value attributes for the enumeration type in question.
-- Low_Bound_Known (Flag205)
-- Low_Bound_Tested (Flag205)
-- Present in all entities. Currently this can only be set True for
-- formal parameter entries of a standard unconstrained one-dimensional
-- array or string type, where the lower bound of the index type is zero
-- or one. Indicates that the low bound is known to be equal to the lower
-- bound of the index type (e.g. 1 for String, since the index type is
-- Positive). This flag can only be set by a pragma Assert which
-- specifies this. If this flag is set, warnings about assuming the index
-- low bound to be zero or one are suppressed.
-- array or string type. Indicates that an explicit test of the low bound
-- of the formal appeared in the code, e.g. in a pragma Assert. If this
-- flag is set, warnings about assuming the index low bound to be one
-- are suppressed.
-- Machine_Radix_10 (Flag84)
-- Present in decimal types and subtypes, set if the Machine_Radix
@ -4520,7 +4518,7 @@ package Einfo is
-- Kill_Elaboration_Checks (Flag32)
-- Kill_Range_Checks (Flag33)
-- Kill_Tag_Checks (Flag34)
-- Low_Bound_Known (Flag205)
-- Low_Bound_Tested (Flag205)
-- Materialize_Entity (Flag168)
-- Needs_Debug_Info (Flag147)
-- Never_Set_In_Source (Flag115)
@ -5008,7 +5006,7 @@ package Einfo is
-- Is_Controlling_Formal (Flag97)
-- Is_Only_Out_Parameter (Flag226)
-- Is_Optional_Parameter (Flag134)
-- Low_Bound_Known (Flag205)
-- Low_Bound_Tested (Flag205)
-- Is_Return_Object (Flag209)
-- Parameter_Mode (synth)
@ -5899,7 +5897,7 @@ package Einfo is
function Limited_View (Id : E) return E;
function Lit_Indexes (Id : E) return E;
function Lit_Strings (Id : E) return E;
function Low_Bound_Known (Id : E) return B;
function Low_Bound_Tested (Id : E) return B;
function Machine_Radix_10 (Id : E) return B;
function Master_Id (Id : E) return E;
function Materialize_Entity (Id : E) return B;
@ -6450,7 +6448,7 @@ package Einfo is
procedure Set_Limited_View (Id : E; V : E);
procedure Set_Lit_Indexes (Id : E; V : E);
procedure Set_Lit_Strings (Id : E; V : E);
procedure Set_Low_Bound_Known (Id : E; V : B := True);
procedure Set_Low_Bound_Tested (Id : E; V : B := True);
procedure Set_Machine_Radix_10 (Id : E; V : B := True);
procedure Set_Master_Id (Id : E; V : E);
procedure Set_Materialize_Entity (Id : E; V : B := True);
@ -7139,7 +7137,7 @@ package Einfo is
pragma Inline (Limited_View);
pragma Inline (Lit_Indexes);
pragma Inline (Lit_Strings);
pragma Inline (Low_Bound_Known);
pragma Inline (Low_Bound_Tested);
pragma Inline (Machine_Radix_10);
pragma Inline (Master_Id);
pragma Inline (Materialize_Entity);
@ -7527,7 +7525,7 @@ package Einfo is
pragma Inline (Set_Limited_View);
pragma Inline (Set_Lit_Indexes);
pragma Inline (Set_Lit_Strings);
pragma Inline (Set_Low_Bound_Known);
pragma Inline (Set_Low_Bound_Tested);
pragma Inline (Set_Machine_Radix_10);
pragma Inline (Set_Master_Id);
pragma Inline (Set_Materialize_Entity);

View File

@ -657,6 +657,11 @@ package body Exp_Ch4 is
Make_Allocator (Loc,
New_Reference_To (Etype (Exp), Loc)));
-- Copy the Comes_From_Source flag for the allocator we just
-- built, since logically this allocator is a replacement of
-- the original allocator node. This is for proper handling of
-- restriction No_Implicit_Heap_Allocations.
Set_Comes_From_Source
(Expression (Tmp_Node), Comes_From_Source (N));
@ -672,6 +677,7 @@ package body Exp_Ch4 is
end if;
Convert_Aggr_In_Allocator (N, Tmp_Node, Exp);
else
Node := Relocate_Node (N);
Set_Analyzed (Node);
@ -727,6 +733,11 @@ package body Exp_Ch4 is
Make_Allocator (Loc,
New_Reference_To (Etype (Exp), Loc)));
-- Copy the Comes_From_Source flag for the allocator we just
-- built, since logically this allocator is a replacement of
-- the original allocator node. This is for proper handling
-- of restriction No_Implicit_Heap_Allocations.
Set_Comes_From_Source
(Expression (Tmp_Node), Comes_From_Source (N));
@ -929,6 +940,11 @@ package body Exp_Ch4 is
Expression => Make_Allocator (Loc,
New_Reference_To (Etype (Exp), Loc)));
-- Copy the Comes_From_Source flag for the allocator we just built,
-- since logically this allocator is a replacement of the original
-- allocator node. This is for proper handling of restriction
-- No_Implicit_Heap_Allocations.
Set_Comes_From_Source
(Expression (Tmp_Node), Comes_From_Source (N));
@ -4185,7 +4201,7 @@ package body Exp_Ch4 is
Make_Integer_Literal (Loc, Dim)));
end Construct_Attribute_Reference;
-- Start processing for Check_Subscripts
-- Start of processing for Check_Subscripts
begin
for J in 1 .. Number_Dimensions (Typ) loop
@ -7920,6 +7936,72 @@ package body Exp_Ch4 is
or else
(Is_Fixed_Point_Type (Target_Type) and then Conversion_OK (N)))
then
-- Handle case in which type conversions from real types to integers
-- are truncated instead of rounded. For example, in the .NET target
-- the only instructions available for conversion from float types to
-- integers truncate the result. That is, the result of Integer (3.9)
-- is 3 instead of 4. The frontend expansion done here to handle also
-- negative values is the following composition of conditional
-- expressions:
-- (if Abs (Operand - Float(Integer(Operand))) >= 0.5 then
-- (if Operand >= 0.0 then
-- Integer(Operand) + 1
-- else
-- Integer(Operand) - 1)
-- else
-- Integer(Operand))
if Integer_Truncation_On_Target and then Comes_From_Source (N) then
declare
Conv_Node : Node_Id;
begin
-- This code is weird, why are we doing all these copy tree
-- operations, instead of just capturing Integer(Operand)
-- once and then reusing the value instead of forcing this
-- conversion to be done four times! ???
-- There should be no New_Copy_Tree operations in the below
-- code at all???
Conv_Node := New_Copy_Tree (N);
Set_Parent (Conv_Node, Parent (N));
Set_Comes_From_Source (Conv_Node, False);
Analyze_And_Resolve (Conv_Node, Target_Type);
Rewrite (N,
Make_Conditional_Expression (Loc,
Expressions => New_List (
Make_Op_Ge (Loc,
Left_Opnd =>
Make_Op_Abs (Loc,
Make_Op_Subtract (Loc,
New_Copy_Tree (Operand),
Make_Type_Conversion (Loc,
New_Reference_To (Etype (Operand), Loc),
New_Copy_Tree (Conv_Node)))),
Right_Opnd => Make_Real_Literal (Loc, Ureal_Half)),
Make_Conditional_Expression (Loc,
Expressions => New_List (
Make_Op_Ge (Loc,
Left_Opnd => New_Copy_Tree (Operand),
Right_Opnd => Make_Real_Literal (Loc, Ureal_0)),
Make_Op_Add (Loc,
New_Copy_Tree (Conv_Node),
Make_Integer_Literal (Loc, 1)),
Make_Op_Subtract (Loc,
New_Copy_Tree (Conv_Node),
Make_Integer_Literal (Loc, 1)))),
New_Copy_Tree (Conv_Node))));
Analyze_And_Resolve (N, Target_Type);
return;
end;
end if;
-- One more check here, gcc is still not able to do conversions of
-- this type with proper overflow checking, and so gigi is doing an
-- approximation of what is required by doing floating-point compares

View File

@ -2825,12 +2825,14 @@ package body Exp_Ch5 is
if Is_Class_Wide_Type (Return_Obj_Typ) then
Heap_Allocator :=
Make_Allocator (Loc,
New_Reference_To
(Etype (Return_Obj_Expr), Loc));
Expression =>
New_Reference_To
(Etype (Return_Obj_Expr), Loc));
else
Heap_Allocator :=
Make_Allocator (Loc,
New_Reference_To (Return_Obj_Typ, Loc));
Expression =>
New_Reference_To (Return_Obj_Typ, Loc));
end if;
-- If the object requires default initialization then

View File

@ -5005,12 +5005,19 @@ package body Exp_Ch6 is
-- is handled separately further below.
New_Allocator :=
Make_Allocator (Loc, New_Reference_To (Result_Subt, Loc));
Set_Storage_Pool (New_Allocator, Storage_Pool (Allocator));
Set_Procedure_To_Call (New_Allocator, Procedure_To_Call (Allocator));
Make_Allocator (Loc,
Expression => New_Reference_To (Result_Subt, Loc));
Set_No_Initialization (New_Allocator);
-- Copy attributes to new allocator. Note that the new allocator
-- logically comes from source if the original one did, so copy the
-- relevant flag. This ensures proper treatment of the restriction
-- No_Implicit_Heap_Allocations in this case.
Set_Storage_Pool (New_Allocator, Storage_Pool (Allocator));
Set_Procedure_To_Call (New_Allocator, Procedure_To_Call (Allocator));
Set_Comes_From_Source (New_Allocator, Comes_From_Source (Allocator));
Rewrite (Allocator, New_Allocator);
-- Create a new access object and initialize it to the result of the

View File

@ -245,6 +245,12 @@ package body Prj.Attr is
"SVlib_dir_switch#" &
"SVlib_name_switch#" &
-- Configuration - Response files
"SVmax_command_line_length#" &
"SVresponse_file_format#" &
"LVresponse_file_switches#" &
-- package Cross_Reference
"Pcross_reference#" &

View File

@ -484,9 +484,9 @@ package body Prj.Nmsc is
-- Locate a directory. Name is the directory name. Parent is the root
-- directory, if Name a relative path name. Dir is set to the canonical
-- case path name of the directory, and Display is the directory path name
-- for display purposes. If the directory does not exist and Project_Setup
-- for display purposes. If the directory does not exist and Setup_Projects
-- is True and Create is a non null string, an attempt is made to create
-- the directory. If the directory does not exist and Project_Setup is
-- the directory. If the directory does not exist and Setup_Projects is
-- false, then Dir and Display are set to No_Name.
--
-- Current_Dir should represent the current directory, and is passed for
@ -1839,6 +1839,57 @@ package body Prj.Nmsc is
elsif Attribute.Name = Name_Map_File_Option then
Data.Config.Map_File_Option := Attribute.Value.Value;
elsif Attribute.Name = Name_Max_Command_Line_Length then
begin
Data.Config.Max_Command_Line_Length :=
Natural'Value (Get_Name_String
(Attribute.Value.Value));
exception
when Constraint_Error =>
Error_Msg
(Project,
In_Tree,
"value must be positive or equal to 0",
Attribute.Value.Location);
end;
elsif Attribute.Name = Name_Response_File_Format then
declare
Name : Name_Id;
begin
Get_Name_String (Attribute.Value.Value);
To_Lower (Name_Buffer (1 .. Name_Len));
Name := Name_Find;
if Name = Name_None then
Data.Config.Resp_File_Format := None;
elsif Name = Name_Gnu then
Data.Config.Resp_File_Format := GNU;
elsif Name = Name_Object_List then
Data.Config.Resp_File_Format := Object_List;
elsif Name = Name_Option_List then
Data.Config.Resp_File_Format := Option_List;
else
Error_Msg
(Project,
In_Tree,
"illegal response file format",
Attribute.Value.Location);
end if;
end;
elsif Attribute.Name = Name_Response_File_Switches then
Put (Into_List =>
Data.Config.Resp_File_Options,
From_List => Attribute.Value.Values,
In_Tree => In_Tree);
end if;
end if;

View File

@ -979,6 +979,13 @@ package Prj is
Table_Increment => 100);
-- The table that contains the lists of project files
type Response_File_Format is
(None,
GNU,
Object_List,
Option_List);
-- The format of the different response files
type Project_Configuration is record
Run_Path_Option : Name_List_Index := No_Name_List;
-- The option to use when linking to specify the path where to look for
@ -1015,6 +1022,19 @@ package Prj is
-- The option to specify the name of a library for linking. Specified in
-- the configuration. When not specified, defaults to "-l".
Max_Command_Line_Length : Natural := 0;
-- When positive and when Resp_File_Format (see below) is not None,
-- if the command line for the invocation of the linker would be greater
-- than this value, a response file is used to invoke the linker.
Resp_File_Format : Response_File_Format := None;
-- The format of a response file, when linking with a response file is
-- supported.
Resp_File_Options : Name_List_Index := No_Name_List;
-- The switches, if any, that precede the path name of the response
-- file in the invocation of the linker.
-- Libraries
Library_Builder : Path_Name_Type := No_Path;
@ -1085,6 +1105,9 @@ package Prj is
Linker_Lib_Dir_Option => No_Name,
Linker_Lib_Name_Option => No_Name,
Library_Builder => No_Path,
Max_Command_Line_Length => 0,
Resp_File_Format => None,
Resp_File_Options => No_Name_List,
Lib_Support => None,
Archive_Builder => No_Name_List,
Archive_Builder_Append_Option => No_Name_List,

View File

@ -119,7 +119,9 @@ package Sem_Ch6 is
-- are subtype conformant, post error message if not (RM 6.3.1(16)),
-- the flag being placed on the Err_Loc node if it is specified, and
-- on the appropriate component of the New_Id construct if not.
-- What is the semantics of Skip_Controlling_Formals???
-- Skip_Controlling_Formals is True when checking the conformance of
-- a subprogram that implements an interface operation. In that case,
-- only the non-controlling formals can (and must) be examined.
procedure Check_Type_Conformant
(New_Id : Entity_Id;

View File

@ -5733,25 +5733,6 @@ package body Sem_Prag is
else
Analyze_And_Resolve (Expr, Any_Boolean);
end if;
-- If assertion is of the form (X'First = literal), where X is
-- a formal, then set Low_Bound_Known flag on this formal.
if Nkind (Expr) = N_Op_Eq then
declare
Right : constant Node_Id := Right_Opnd (Expr);
Left : constant Node_Id := Left_Opnd (Expr);
begin
if Nkind (Left) = N_Attribute_Reference
and then Attribute_Name (Left) = Name_First
and then Is_Entity_Name (Prefix (Left))
and then Is_Formal (Entity (Prefix (Left)))
and then Nkind (Right) = N_Integer_Literal
then
Set_Low_Bound_Known (Entity (Prefix (Left)));
end if;
end;
end if;
end Check;
----------------
@ -9608,10 +9589,10 @@ package body Sem_Prag is
Check_Precondition_Postcondition (In_Body);
-- If in spec, nothing to do. If in body, then we convert the
-- pragma to pragma Check (Precondition, cond [, msg]). Note we
-- do this whether or not precondition checks are enabled. That
-- works fine since pragma Check will do this check.
-- If in spec, nothing more to do. If in body, then we convert the
-- pragma to pragma Check (Precondition, cond [, msg]). Note we do
-- this whether or not precondition checks are enabled. That works
-- fine since pragma Check will do this check.
if In_Body then
if Arg_Count = 2 then

View File

@ -5393,6 +5393,7 @@ package body Sem_Res is
Check_Unset_Reference (L);
Check_Unset_Reference (R);
Generate_Operator_Reference (N, T);
Check_Low_Bound_Tested (N);
Eval_Relational_Op (N);
end if;
end if;
@ -6135,6 +6136,7 @@ package body Sem_Res is
Check_Unset_Reference (L);
Check_Unset_Reference (R);
Generate_Operator_Reference (N, T);
Check_Low_Bound_Tested (N);
-- If this is an inequality, it may be the implicit inequality
-- created for a user-defined operation, in which case the corres-

View File

@ -604,6 +604,29 @@ package body Sem_Warn is
end if;
end Check_Infinite_Loop_Warning;
----------------------------
-- Check_Low_Bound_Tested --
----------------------------
procedure Check_Low_Bound_Tested (Expr : Node_Id) is
begin
if Comes_From_Source (Expr) then
declare
L : constant Node_Id := Left_Opnd (Expr);
R : constant Node_Id := Right_Opnd (Expr);
begin
if Nkind (L) = N_Attribute_Reference
and then Attribute_Name (L) = Name_First
and then Is_Entity_Name (Prefix (L))
and then Is_Formal (Entity (Prefix (L)))
and then Nkind (R) = N_Integer_Literal
then
Set_Low_Bound_Tested (Entity (Prefix (L)));
end if;
end;
end if;
end Check_Low_Bound_Tested;
----------------------
-- Check_References --
----------------------
@ -3633,7 +3656,7 @@ package body Sem_Warn is
if Is_Formal (Ent)
and then Is_Suspicious_Type (Typ)
and then not Low_Bound_Known (Ent)
and then not Low_Bound_Tested (Ent)
then
Test_Suspicious_Index;
end if;

View File

@ -168,6 +168,13 @@ package Sem_Warn is
-- N is the node for a loop statement. This procedure checks if a warning
-- should be given for a possible infinite loop, and if so issues it.
procedure Check_Low_Bound_Tested (Expr : Node_Id);
-- Expr is the node for a comparison operation. This procedure checks if
-- the comparison is a source comparison of P'First with a literal and if
-- so, sets the Low_Bound_Tested flag in Expr to suppress warnings about
-- improper low bound assumptions (we assume that if the code explicitly
-- checks X'First, then it is not operating in blind assumption mode).
procedure Warn_On_Known_Condition (C : Node_Id);
-- C is a node for a boolean expression resulting from a relational
-- or membership operation. If the expression has a compile time known

View File

@ -3728,6 +3728,13 @@ package Sinfo is
-- Is_Dynamic_Coextension (Flag18-Sem)
-- plus fields for expression
-- Note: like all nodes, the N_Allocator has the Comes_From_Source flag.
-- This flag has a special function in conjunction with the restriction
-- No_Implicit_Heap_Allocations, which will be triggered if this flag
-- is not set. This means that if a source allocator is replaced with
-- a constructed allocator, the Comes_From_Source flag should be copied
-- to the newly created allocator.
---------------------------------
-- 5.1 Sequence Of Statements --
---------------------------------

View File

@ -1048,6 +1048,7 @@ package Snames is
Name_Global_Config_File : constant Name_Id := N + $; -- GPR
Name_Gnatls : constant Name_Id := N + $;
Name_Gnatstub : constant Name_Id := N + $;
Name_Gnu : constant Name_Id := N + $;
Name_Ide : constant Name_Id := N + $;
Name_Implementation : constant Name_Id := N + $;
Name_Implementation_Exceptions : constant Name_Id := N + $;
@ -1088,19 +1089,25 @@ package Snames is
Name_Mapping_File_Switches : constant Name_Id := N + $;
Name_Mapping_Spec_Suffix : constant Name_Id := N + $;
Name_Mapping_Body_Suffix : constant Name_Id := N + $;
Name_Max_Command_Line_Length : constant Name_Id := N + $;
Name_Metrics : constant Name_Id := N + $;
Name_Naming : constant Name_Id := N + $;
Name_None : constant Name_Id := N + $;
Name_Object_Generated : constant Name_Id := N + $;
Name_Object_List : constant Name_Id := N + $;
Name_Objects_Linked : constant Name_Id := N + $;
Name_Objects_Path : constant Name_Id := N + $;
Name_Objects_Path_File : constant Name_Id := N + $;
Name_Object_Dir : constant Name_Id := N + $;
Name_Option_List : constant Name_Id := N + $;
Name_Path_Syntax : constant Name_Id := N + $;
Name_Pic_Option : constant Name_Id := N + $;
Name_Pretty_Printer : constant Name_Id := N + $;
Name_Prefix : constant Name_Id := N + $;
Name_Project : constant Name_Id := N + $;
Name_Project_Dir : constant Name_Id := N + $;
Name_Response_File_Format : constant Name_Id := N + $;
Name_Response_File_Switches : constant Name_Id := N + $;
Name_Roots : constant Name_Id := N + $; -- GPR
Name_Required_Switches : constant Name_Id := N + $;
Name_Run_Path_Option : constant Name_Id := N + $;

View File

@ -126,7 +126,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -142,7 +142,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -142,7 +142,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -128,7 +128,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := False;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := False;

View File

@ -115,7 +115,7 @@ private
AAMP : constant Boolean := False;
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Compiler_System_Version : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -124,7 +124,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -124,7 +124,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -115,7 +115,7 @@ private
AAMP : constant Boolean := False;
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Compiler_System_Version : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;

View File

@ -115,7 +115,7 @@ private
AAMP : constant Boolean := False;
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Compiler_System_Version : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;

View File

@ -124,7 +124,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -115,7 +115,7 @@ private
AAMP : constant Boolean := False;
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Compiler_System_Version : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;

View File

@ -124,7 +124,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -124,7 +124,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := False;

View File

@ -133,7 +133,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := False;

View File

@ -116,7 +116,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := False;

View File

@ -133,7 +133,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := True;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := False;

View File

@ -129,7 +129,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -129,7 +129,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -129,7 +129,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := False;

View File

@ -129,7 +129,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -131,7 +131,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;

View File

@ -129,7 +129,7 @@ private
-- of the individual switch values.
Backend_Divide_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := False;
Backend_Overflow_Checks : constant Boolean := True;
Command_Line_Args : constant Boolean := False;
Configurable_Run_Time : constant Boolean := False;
Denorm : constant Boolean := True;