[multiple changes]

2014-10-17  Robert Dewar  <dewar@adacore.com>

	* sem_util.adb: Minor reformatting.

2014-10-17  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch12.adb (Build_Function_Wrapper): Build wrappers for
	actuals that are defaulted subprograms of the formal subprogram
	declaration.

2014-10-17  Robert Dewar  <dewar@adacore.com>

	* exp_ch4.adb (Expand_N_Op_Eq): Make sure we deal with the
	implementation base type.
	* sinfo.ads: Add a note for N_Op_Eq and N_Op_Ne that record
	operands are always expanded out into component comparisons.

2014-10-17  Robert Dewar  <dewar@adacore.com>

	* s-vallli.adb: Minor comment correction.
	* s-valuti.ads: Minor comment reformatting.

2014-10-17  Robert Dewar  <dewar@adacore.com>

	* gnat_rm.texi: Document System.Atomic_Counters.
	* impunit.adb: Add System.Atomic_Counters (s-atocou.ads) to the
	list of user- accessible units added as children of System.
	* s-atocou.ads: Update comment.

2014-10-17  Arnaud Charlet  <charlet@adacore.com>

	* s-expmod.ads: Add comments.

From-SVN: r216371
This commit is contained in:
Arnaud Charlet 2014-10-17 10:42:41 +02:00
parent 38d0d6c854
commit a92230c56c
11 changed files with 196 additions and 123 deletions

View File

@ -1,3 +1,36 @@
2014-10-17 Robert Dewar <dewar@adacore.com>
* sem_util.adb: Minor reformatting.
2014-10-17 Ed Schonberg <schonberg@adacore.com>
* sem_ch12.adb (Build_Function_Wrapper): Build wrappers for
actuals that are defaulted subprograms of the formal subprogram
declaration.
2014-10-17 Robert Dewar <dewar@adacore.com>
* exp_ch4.adb (Expand_N_Op_Eq): Make sure we deal with the
implementation base type.
* sinfo.ads: Add a note for N_Op_Eq and N_Op_Ne that record
operands are always expanded out into component comparisons.
2014-10-17 Robert Dewar <dewar@adacore.com>
* s-vallli.adb: Minor comment correction.
* s-valuti.ads: Minor comment reformatting.
2014-10-17 Robert Dewar <dewar@adacore.com>
* gnat_rm.texi: Document System.Atomic_Counters.
* impunit.adb: Add System.Atomic_Counters (s-atocou.ads) to the
list of user- accessible units added as children of System.
* s-atocou.ads: Update comment.
2014-10-17 Arnaud Charlet <charlet@adacore.com>
* s-expmod.ads: Add comments.
2014-10-17 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch3.adb (Build_Derived_Record_Type): Remove the propagation

View File

@ -7152,7 +7152,10 @@ package body Exp_Ch4 is
return;
end if;
Typl := Base_Type (Typl);
-- Now get the implementation base type (note that plain Base_Type here
-- might lead us back to the private type, which is not what we want!)
Typl := Implementation_Base_Type (Typl);
-- Equality between variant records results in a call to a routine
-- that has conditional tests of the discriminant value(s), and hence

View File

@ -661,6 +661,7 @@ The GNAT Library
* Interfaces.VxWorks.IO (i-vxwoio.ads)::
* System.Address_Image (s-addima.ads)::
* System.Assertions (s-assert.ads)::
* System.Atomic_Counters (s-atocou.ads)::
* System.Memory (s-memory.ads)::
* System.Multiprocessors (s-multip.ads)::
* System.Multiprocessors.Dispatching_Domains (s-mudido.ads)::
@ -19074,6 +19075,7 @@ of GNAT, and will generate a warning message.
* Interfaces.VxWorks.IO (i-vxwoio.ads)::
* System.Address_Image (s-addima.ads)::
* System.Assertions (s-assert.ads)::
* System.Atomic_Counters (s-atocou.ads)::
* System.Memory (s-memory.ads)::
* System.Multiprocessors (s-multip.ads)::
* System.Multiprocessors.Dispatching_Domains (s-mudido.ads)::
@ -20585,6 +20587,18 @@ This package provides the declaration of the exception raised
by an run-time assertion failure, as well as the routine that
is used internally to raise this assertion.
@node System.Atomic_Counters (s-atocou.ads)
@section @code{System.Atomic_Counters} (@file{s-atocou.ads})
@cindex @code{System.Atomic_Counters} (@file{s-atocou.ads})
@noindent
This package provides the declaration of an atomic counter type,
together with efficient routines (using hardware
synchronization primitives) for incrementing, decrementing,
and testing of these counters. This package is implemented
on most targets, including all Alpha, ia64, PowerPC, SPARC V9,
x86, and x86_64 platforms.
@node System.Memory (s-memory.ads)
@section @code{System.Memory} (@file{s-memory.ads})
@cindex @code{System.Memory} (@file{s-memory.ads})

View File

@ -367,6 +367,7 @@ package body Impunit is
--------------------------------------
("s-addima", F), -- System.Address_Image
("s-atocou", F), -- System.Atomic_Counters
("s-assert", F), -- System.Assertions
("s-diflio", F), -- System.Dim.Float_IO
("s-diinio", F), -- System.Dim.Integer_IO

View File

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 2011-2013, Free Software Foundation, Inc. --
-- Copyright (C) 2011-2014, 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- --
@ -37,8 +37,6 @@
-- - all x86 platforms
-- - all x86_64 platforms
-- Why isn't this package available to application programs???
package System.Atomic_Counters is
pragma Preelaborate;
@ -59,20 +57,19 @@ package System.Atomic_Counters is
function Decrement (Item : in out Atomic_Counter) return Boolean;
pragma Inline_Always (Decrement);
-- Decrements value of atomic counter, returns True when value reach zero.
-- Decrements value of atomic counter, returns True when value reach zero
function Is_One (Item : Atomic_Counter) return Boolean;
pragma Inline_Always (Is_One);
-- Returns True when value of the atomic counter is one.
-- Returns True when value of the atomic counter is one
procedure Initialize (Item : out Atomic_Counter);
pragma Inline_Always (Initialize);
-- Initialize counter by setting its value to one. This subprogram is
-- intended to be used in special cases when counter object can't be
-- intended to be used in special cases when the counter object cannot be
-- initialized in standard way.
private
type Unsigned_32 is mod 2 ** 32;
type Atomic_Counter is limited record

View File

@ -32,15 +32,25 @@
-- This function performs exponentiation of a modular type with non-binary
-- modulus values. Arithmetic is done in Long_Long_Unsigned, with explicit
-- accounting for the modulus value which is passed as the second argument.
-- Note that 1 is a binary modulus (2**0), so the compiler should not (and
-- will not) call this function with Modulus equal to 1).
with System.Unsigned_Types;
package System.Exp_Mod is
pragma Pure;
use type System.Unsigned_Types.Unsigned;
subtype Power_Of_2 is System.Unsigned_Types.Unsigned with
Dynamic_Predicate =>
Power_Of_2 /= 0 and then (Power_Of_2 and (Power_Of_2 - 1)) = 0;
function Exp_Modular
(Left : System.Unsigned_Types.Unsigned;
Modulus : System.Unsigned_Types.Unsigned;
Right : Natural) return System.Unsigned_Types.Unsigned;
Right : Natural) return System.Unsigned_Types.Unsigned
with
Pre => Modulus /= 0 and then Modulus not in Power_Of_2,
Post => Exp_Modular'Result = Left ** Right mod Modulus;
end System.Exp_Mod;

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2014, 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- --
@ -51,7 +51,7 @@ package body System.Val_LLI is
-- Set to True if minus sign is present, otherwise to False
Start : Positive;
-- Saves location of first non-blank (not used in this case)
-- Saves location of first non-blank
begin
Scan_Sign (Str, Ptr, Max, Minus, Start);

View File

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@ -43,9 +43,9 @@ package System.Val_Util is
F, L : out Integer);
-- This procedure scans the string S setting F to be the index of the first
-- non-blank character of S and L to be the index of the last non-blank
-- character of S. Any lower case characters present in S will be folded
-- to their upper case equivalent except for character literals. If S
-- consists of entirely blanks then Constraint_Error is raised.
-- character of S. Any lower case characters present in S will be folded to
-- their upper case equivalent except for character literals. If S consists
-- of entirely blanks then Constraint_Error is raised.
--
-- Note: if S is the null string, F is set to S'First, L to S'Last
@ -60,25 +60,25 @@ package System.Val_Util is
-- last character in the string). Scan_Sign first scans out any initial
-- blanks, raising Constraint_Error if the field is all blank. It then
-- checks for and skips an initial plus or minus, requiring a non-blank
-- character to follow (Constraint_Error is raised if plus or minus
-- appears at the end of the string or with a following blank). Minus is
-- set True if a minus sign was skipped, and False otherwise. On exit
-- Ptr.all points to the character after the sign, or to the first
-- non-blank character if no sign is present. Start is set to the point
-- to the first non-blank character (sign or digit after it).
-- character to follow (Constraint_Error is raised if plus or minus appears
-- at the end of the string or with a following blank). Minus is set True
-- if a minus sign was skipped, and False otherwise. On exit Ptr.all points
-- to the character after the sign, or to the first non-blank character
-- if no sign is present. Start is set to the point to the first non-blank
-- character (sign or digit after it).
--
-- Note: if Str is null, i.e. if Max is less than Ptr, then this is a
-- special case of an all-blank string, and Ptr is unchanged, and hence
-- is greater than Max as required in this case. Constraint_Error is
-- also raised in this case.
-- is greater than Max as required in this case. Constraint_Error is also
-- raised in this case.
procedure Scan_Plus_Sign
(Str : String;
Ptr : not null access Integer;
Max : Integer;
Start : out Positive);
-- Same as Scan_Sign, but allows only plus, not minus.
-- This is used for modular types.
-- Same as Scan_Sign, but allows only plus, not minus. This is used for
-- modular types.
function Scan_Exponent
(Str : String;

View File

@ -1056,7 +1056,12 @@ package body Sem_Ch12 is
Actuals := New_List;
Profile := New_List;
F := First_Formal (Entity (Actual));
if Present (Actual) then
F := First_Formal (Entity (Actual));
else
F := First_Formal (Formal);
end if;
N_Parms := 0;
while Present (F) loop
@ -1066,16 +1071,26 @@ package body Sem_Ch12 is
New_F := Make_Temporary
(Loc, Character'Val (Character'Pos ('A') + N_Parms));
-- If a formal has a class-wide type, rewrite as the corresponding
-- attribute, because the class-wide type is not retrievable by
-- visbility.
if No (Actual) then
-- If formal has a class-wide type rewrite as the corresponding
-- attribute, because the class-wide type is not retrievable by
-- visbility.
if Is_Class_Wide_Type (Etype (F)) then
Parm_Type :=
Make_Attribute_Reference (Loc,
Attribute_Name => Name_Class,
Prefix =>
Make_Identifier (Loc, Chars (Etype (Etype (F)))));
else
Parm_Type :=
Make_Identifier (Loc, Chars (Etype (Etype (F))));
end if;
-- If actual is present, use the type of its own formal
if Is_Class_Wide_Type (Etype (F)) then
Parm_Type :=
Make_Attribute_Reference (Loc,
Attribute_Name => Name_Class,
Prefix =>
Make_Identifier (Loc, Chars (Etype (Etype (F)))));
else
Parm_Type := New_Occurrence_Of (Etype (F), Loc);
end if;
@ -1766,8 +1781,7 @@ package body Sem_Ch12 is
else
if GNATprove_Mode
and then
Present
and then Present
(Containing_Package_With_Ext_Axioms
(Defining_Entity (Analyzed_Formal)))
and then Ekind (Defining_Entity (Analyzed_Formal)) =

View File

@ -371,8 +371,7 @@ package body Sem_Util is
raise Program_Error;
end if;
-- Contract items related to subprogram bodies. The applicable pragmas
-- are:
-- Contract items related to subprogram bodies. Applicable pragmas are:
-- Refined_Depends
-- Refined_Global
-- Refined_Post
@ -392,7 +391,7 @@ package body Sem_Util is
raise Program_Error;
end if;
-- Contract items related to variables. The applicable pragmas are:
-- Contract items related to variables. Applicable pragmas are:
-- Async_Readers
-- Async_Writers
-- Effective_Reads
@ -801,9 +800,7 @@ package body Sem_Util is
return;
end if;
if Is_Generic_Formal (Typ)
and then Is_Discrete_Type (Typ)
then
if Is_Generic_Formal (Typ) and then Is_Discrete_Type (Typ) then
Set_No_Predicate_On_Actual (Typ);
end if;
@ -1442,8 +1439,7 @@ package body Sem_Util is
pragma Assert (Has_Default_Init_Cond (Typ));
pragma Assert (Present (Prag));
-- Nothing to do if the default initial condition procedure was already
-- built.
-- Nothing to do if default initial condition procedure already built
if Present (Default_Init_Cond_Procedure (Typ)) then
return;
@ -1909,7 +1905,7 @@ package body Sem_Util is
return False;
else
return
Cannot_Raise_Constraint_Error (Left_Opnd (Expr))
Cannot_Raise_Constraint_Error (Left_Opnd (Expr))
and then
Cannot_Raise_Constraint_Error (Right_Opnd (Expr));
end if;
@ -1938,7 +1934,7 @@ package body Sem_Util is
return False;
else
return
Cannot_Raise_Constraint_Error (Left_Opnd (Expr))
Cannot_Raise_Constraint_Error (Left_Opnd (Expr))
and then
Cannot_Raise_Constraint_Error (Right_Opnd (Expr));
end if;
@ -1992,6 +1988,7 @@ package body Sem_Util is
and then Ekind (Non_Limited_View (T)) /= E_Incomplete_Type
then
-- The non-limited view is fully declared
null;
else
@ -2429,7 +2426,7 @@ package body Sem_Util is
elsif Nkind_In (Choice, N_Range,
N_Subtype_Indication)
or else (Is_Entity_Name (Choice)
and then Is_Type (Entity (Choice)))
and then Is_Type (Entity (Choice)))
then
declare
L, H : Node_Id;
@ -3049,7 +3046,8 @@ package body Sem_Util is
Comes_From_Source (N)
and then Is_Entity_Name (N)
and then (Entity (N) = Standard_True
or else Entity (N) = Standard_False);
or else
Entity (N) = Standard_False);
end Is_Trivial_Boolean;
-------------------------
@ -4747,7 +4745,8 @@ package body Sem_Util is
-- attempt to detect partial overlap of slices.
return Denotes_Same_Object (Lo1, Lo2)
and then Denotes_Same_Object (Hi1, Hi2);
and then
Denotes_Same_Object (Hi1, Hi2);
end;
-- In the recursion, literals appear as indexes
@ -4788,7 +4787,7 @@ package body Sem_Util is
Nkind_In (A2, N_Selected_Component, N_Indexed_Component, N_Slice)
then
declare
Root1, Root2 : Node_Id;
Root1, Root2 : Node_Id;
Depth1, Depth2 : Int := 0;
begin
@ -4807,8 +4806,8 @@ package body Sem_Util is
Root2 := Prefix (A2);
while not Is_Entity_Name (Root2) loop
if not Nkind_In
(Root2, N_Selected_Component, N_Indexed_Component)
if not Nkind_In (Root2, N_Selected_Component,
N_Indexed_Component)
then
return False;
else
@ -4826,7 +4825,7 @@ package body Sem_Util is
elsif Depth1 > Depth2 then
Root1 := Prefix (A1);
for I in 1 .. Depth1 - Depth2 - 1 loop
for J in 1 .. Depth1 - Depth2 - 1 loop
Root1 := Prefix (Root1);
end loop;
@ -4834,7 +4833,7 @@ package body Sem_Util is
else
Root2 := Prefix (A2);
for I in 1 .. Depth2 - Depth1 - 1 loop
for J in 1 .. Depth2 - Depth1 - 1 loop
Root2 := Prefix (Root2);
end loop;
@ -4897,7 +4896,6 @@ package body Sem_Util is
begin
if Nkind (N) = N_Defining_Program_Unit_Name then
return Name (N);
else
return Prefix (N);
end if;
@ -4911,7 +4909,6 @@ package body Sem_Util is
begin
if Nkind (N) = N_Defining_Program_Unit_Name then
return Defining_Identifier (N);
else
return Selector_Name (N);
end if;
@ -6552,9 +6549,8 @@ package body Sem_Util is
if In_Spec_Expression then
return Typ;
elsif Is_Private_Type (Typ)
and then not Has_Discriminants (Typ)
then
elsif Is_Private_Type (Typ) and then not Has_Discriminants (Typ) then
-- If the type has no discriminants, there is no subtype to
-- build, even if the underlying type is discriminated.
@ -6793,7 +6789,6 @@ package body Sem_Util is
-- For all other cases, we have a complete table of literals, and
-- we simply iterate through the chain of literal until the one
-- with the desired position value is found.
--
else
if Is_Private_Type (Btyp) and then Present (Full_View (Btyp)) then
@ -7579,7 +7574,7 @@ package body Sem_Util is
elsif Default /= Unknown
and then (Has_Size_Clause (Etype (Expr))
or else
or else
Has_Alignment_Clause (Etype (Expr)))
then
Set_Result (Unknown);
@ -7881,13 +7876,13 @@ package body Sem_Util is
-- property is enabled when the flag evaluates to True or the flag is
-- missing altogether.
elsif Property = Name_Async_Readers and then Is_Enabled (AR) then
elsif Property = Name_Async_Readers and then Is_Enabled (AR) then
return True;
elsif Property = Name_Async_Writers and then Is_Enabled (AW) then
elsif Property = Name_Async_Writers and then Is_Enabled (AW) then
return True;
elsif Property = Name_Effective_Reads and then Is_Enabled (ER) then
elsif Property = Name_Effective_Reads and then Is_Enabled (ER) then
return True;
elsif Property = Name_Effective_Writes and then Is_Enabled (EW) then
@ -8027,7 +8022,7 @@ package body Sem_Util is
elsif Nkind (N) in N_Binary_Op or else Nkind (N) in N_Short_Circuit then
return Has_No_Obvious_Side_Effects (Left_Opnd (N))
and then
and then
Has_No_Obvious_Side_Effects (Right_Opnd (N));
elsif Nkind (N) = N_Expression_With_Actions
@ -8247,10 +8242,8 @@ package body Sem_Util is
elsif Is_Entity_Name (N)
and then
(Ekind (Entity (N)) = E_Discriminant
or else
((Ekind (Entity (N)) = E_Constant
or else Ekind (Entity (N)) = E_In_Parameter)
and then Present (Discriminal_Link (Entity (N)))))
or else (Ekind_In (Entity (N), E_Constant, E_In_Parameter)
and then Present (Discriminal_Link (Entity (N)))))
then
return True;
@ -8260,9 +8253,7 @@ package body Sem_Util is
-- For aggregates we have to check that each of the associations
-- is preelaborable.
elsif Nkind (N) = N_Aggregate
or else Nkind (N) = N_Extension_Aggregate
then
elsif Nkind_In (N, N_Aggregate, N_Extension_Aggregate) then
Is_Array_Aggr := Is_Array_Type (Etype (N));
if Is_Array_Aggr then
@ -8564,7 +8555,8 @@ package body Sem_Util is
if No (UT) then
if No (Full_View (Btype)) then
return not Is_Generic_Type (Btype)
and then not Is_Generic_Type (Root_Type (Btype));
and then
not Is_Generic_Type (Root_Type (Btype));
else
return not Is_Generic_Type (Root_Type (Full_View (Btype)));
end if;
@ -8749,9 +8741,7 @@ package body Sem_Util is
Comp : Entity_Id;
begin
if Is_Private_Type (Typ)
and then Present (Underlying_Type (Typ))
then
if Is_Private_Type (Typ) and then Present (Underlying_Type (Typ)) then
return Has_Tagged_Component (Underlying_Type (Typ));
elsif Is_Array_Type (Typ) then
@ -8926,9 +8916,7 @@ package body Sem_Util is
begin
S := Current_Scope;
while Present (S) and then S /= Standard_Standard loop
if (Ekind (S) = E_Function
or else Ekind (S) = E_Package
or else Ekind (S) = E_Procedure)
if Ekind_In (S, E_Function, E_Package, E_Procedure)
and then Is_Generic_Instance (S)
then
-- A child instance is always compiled in the context of a parent
@ -9479,8 +9467,8 @@ package body Sem_Util is
and then Is_Aliased_View (Renamed_Object (E)))))
or else ((Is_Formal (E)
or else Ekind (E) = E_Generic_In_Out_Parameter
or else Ekind (E) = E_Generic_In_Parameter)
or else Ekind_In (E, E_Generic_In_Out_Parameter,
E_Generic_In_Parameter))
and then Is_Tagged_Type (Etype (E)))
or else (Is_Concurrent_Type (E) and then In_Open_Scopes (E))
@ -9842,9 +9830,9 @@ package body Sem_Util is
begin
return Is_Interface (T)
and then
(Is_Protected_Interface (T)
or else Is_Synchronized_Interface (T)
or else Is_Task_Interface (T));
(Is_Protected_Interface (T)
or else Is_Synchronized_Interface (T)
or else Is_Task_Interface (T));
end Is_Concurrent_Interface;
---------------------------
@ -10282,9 +10270,9 @@ package body Sem_Util is
if not Is_Constrained (Prefix_Type)
and then (not Is_Indefinite_Subtype (Prefix_Type)
or else
(Is_Generic_Type (Prefix_Type)
and then Ekind (Current_Scope) = E_Generic_Package
and then In_Package_Body (Current_Scope)))
(Is_Generic_Type (Prefix_Type)
and then Ekind (Current_Scope) = E_Generic_Package
and then In_Package_Body (Current_Scope)))
and then (Is_Declared_Within_Variant (Comp)
or else Has_Discriminant_Dependent_Constraint (Comp))
@ -10518,11 +10506,17 @@ package body Sem_Util is
function Is_Fully_Initialized_Type (Typ : Entity_Id) return Boolean is
begin
-- In Ada2012, a scalar type with an aspect Default_Value
-- is fully initialized.
-- Scalar types
if Is_Scalar_Type (Typ) then
return Ada_Version >= Ada_2012 and then Has_Default_Aspect (Typ);
-- A scalar type with an aspect Default_Value is fully initialized
-- Note: Iniitalize/Normalize_Scalars also ensure full initialization
-- of a scalar type, but we don't take that into account here, since
-- we don't want these to affect warnings.
return Has_Default_Aspect (Typ);
elsif Is_Access_Type (Typ) then
return True;
@ -11786,7 +11780,10 @@ package body Sem_Util is
Comp_Assn := First (Component_Associations (Orig_N));
while Present (Comp_Assn) loop
Expr := Expression (Comp_Assn);
if Present (Expr) -- needed for box association
-- Note: test for Present here needed for box assocation
if Present (Expr)
and then not Is_SPARK_05_Initialization_Expr (Expr)
then
Is_Ok := False;
@ -11890,7 +11887,8 @@ package body Sem_Util is
return (Is_Tagged_Type (E)
and then (Kind = E_Task_Type
or else Kind = E_Protected_Type))
or else
Kind = E_Protected_Type))
or else
(Is_Interface (E)
and then Is_Synchronized_Interface (E))
@ -12215,13 +12213,13 @@ package body Sem_Util is
K : constant Entity_Kind := Ekind (E);
begin
return (K = E_Variable
and then Nkind (Parent (E)) /= N_Exception_Handler)
or else (K = E_Component
and then not In_Protected_Function (E))
or else K = E_Out_Parameter
or else K = E_In_Out_Parameter
or else K = E_Generic_In_Out_Parameter
return (K = E_Variable
and then Nkind (Parent (E)) /= N_Exception_Handler)
or else (K = E_Component
and then not In_Protected_Function (E))
or else K = E_Out_Parameter
or else K = E_In_Out_Parameter
or else K = E_Generic_In_Out_Parameter
-- Current instance of type. If this is a protected type, check
-- we are not within the body of one of its protected functions.
@ -12270,10 +12268,10 @@ package body Sem_Util is
return Is_Variable (Expression (Orig_Node))
and then
(not Comes_From_Source (Orig_Node)
or else
(Is_Tagged_Type (Etype (Subtype_Mark (Orig_Node)))
and then
Is_Tagged_Type (Etype (Expression (Orig_Node)))));
or else
(Is_Tagged_Type (Etype (Subtype_Mark (Orig_Node)))
and then
Is_Tagged_Type (Etype (Expression (Orig_Node)))));
-- GNAT allows an unchecked type conversion as a variable. This
-- only affects the generation of internal expanded code, since
@ -13103,9 +13101,9 @@ package body Sem_Util is
end if;
end New_Copy_List_Tree;
-------------------
-- New_Copy_Tree --
-------------------
--------------------------------------------------
-- New_Copy_Tree Auxiliary Data and Subprograms --
--------------------------------------------------
use Atree.Unchecked_Access;
use Atree_Private_Part;
@ -13168,7 +13166,9 @@ package body Sem_Util is
Hash => New_Copy_Hash,
Equal => Types."=");
-- Start of processing for New_Copy_Tree function
-------------------
-- New_Copy_Tree --
-------------------
function New_Copy_Tree
(Source : Node_Id;
@ -14321,9 +14321,9 @@ package body Sem_Util is
then
if No (Actuals)
and then
Nkind_In (Parent (N), N_Procedure_Call_Statement,
N_Function_Call,
N_Parameter_Association)
Nkind_In (Parent (N), N_Procedure_Call_Statement,
N_Function_Call,
N_Parameter_Association)
and then Ekind (S) /= E_Function
then
Set_Etype (N, Etype (S));
@ -14332,8 +14332,8 @@ package body Sem_Util is
Error_Msg_Name_1 := Chars (S);
Error_Msg_Sloc := Sloc (S);
Error_Msg_NE
("missing argument for parameter & " &
"in call to % declared #", N, Formal);
("missing argument for parameter & "
& "in call to % declared #", N, Formal);
end if;
elsif Is_Overloadable (S) then
@ -14345,8 +14345,8 @@ package body Sem_Util is
Error_Msg_Sloc := Sloc (Parent (S));
Error_Msg_NE
("missing argument for parameter & " &
"in call to % (inherited) #", N, Formal);
("missing argument for parameter & "
& "in call to % (inherited) #", N, Formal);
else
Error_Msg_NE
@ -14504,8 +14504,7 @@ package body Sem_Util is
-- sure this is a modification.
if Has_Pragma_Unmodified (Ent) and then Sure then
Error_Msg_NE
("??pragma Unmodified given for &!", N, Ent);
Error_Msg_NE ("??pragma Unmodified given for &!", N, Ent);
end if;
Set_Never_Set_In_Source (Ent, False);
@ -15049,7 +15048,7 @@ package body Sem_Util is
-- would cause infinite recursion.
elsif Ekind (Subp) = E_Function
and then (Is_Predicate_Function (Subp)
and then (Is_Predicate_Function (Subp)
or else
Is_Predicate_Function_M (Subp))
then
@ -15780,11 +15779,7 @@ package body Sem_Util is
if (Ekind (Ent) = E_Variable and then No (Renamed_Object (Ent)))
or else
Ekind (Ent) = E_Constant
or else
Ekind (Ent) = E_Out_Parameter
or else
Ekind (Ent) = E_In_Out_Parameter
Ekind_In (Ent, E_Constant, E_Out_Parameter, E_In_Out_Parameter)
then
null;
@ -17789,6 +17784,7 @@ package body Sem_Util is
Op : constant Node_Id := Right_Opnd (Parent (Expr));
L : constant Node_Id := Left_Opnd (Op);
R : constant Node_Id := Right_Opnd (Op);
begin
-- The case for the message is when the left operand of the
-- comparison is the same modular type, or when it is an

View File

@ -4246,6 +4246,11 @@ package Sinfo is
-- point operands if the Treat_Fixed_As_Integer flag is set and will
-- thus treat these nodes in identical manner, ignoring small values.
-- Note on equality/inequality tests for records. In the expanded tree,
-- record comparisons are always expanded to be a series of component
-- comparisons, so the back end will never see an equality or inequality
-- operation with operands of a record type.
-- Note on overflow handling: When the overflow checking mode is set to
-- MINIMIZED or ELIMINATED, nodes for signed arithmetic operations may
-- be modified to use a larger type for the operands and result. In