summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog18
-rw-r--r--gcc/ada/einfo.adb2
-rw-r--r--gcc/ada/exp_ch5.adb13
-rw-r--r--gcc/ada/exp_util.adb11
-rw-r--r--gcc/ada/sem_attr.adb4
-rw-r--r--gcc/ada/sem_ch4.adb15
-rw-r--r--gcc/ada/sem_util.adb423
-rw-r--r--gcc/ada/sem_util.ads5
8 files changed, 223 insertions, 268 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 9aa5cb098ca..5b18da40103 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,23 @@
2014-07-29 Robert Dewar <dewar@adacore.com>
+ * einfo.adb (Has_Protected): Test base type.
+ * sem_ch4.adb (Analyze_Allocator): Reorganize code to make sure
+ that we always properly check No_Protected_Type_Allocators.
+
+2014-07-29 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_util.ads, sem_util.adb (Defining_Entity): Now applies to
+ loop declarations as well.
+ * exp_ch5.adb (Expand_Loop_Statement): Apply Qualify_Entity_Names
+ to an iterator loop, because it may contain local renaming
+ declarations that require debugging information.
+
+2014-07-29 Robert Dewar <dewar@adacore.com>
+
+ * sem_util.ads, exp_util.adb, sem_attr.adb: Minor reformatting.
+
+2014-07-29 Robert Dewar <dewar@adacore.com>
+
* einfo.ads, einfo.adb (Static_Real_Or_String_Predicate): New function
(Set_Static_Real_Or_String_Predicate): New procedure
* sem_ch13.adb (Build_Predicate_Functions): Accomodate static
diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb
index 5da314a9ea4..926190b823d 100644
--- a/gcc/ada/einfo.adb
+++ b/gcc/ada/einfo.adb
@@ -1647,7 +1647,7 @@ package body Einfo is
function Has_Protected (Id : E) return B is
begin
- return Flag271 (Id);
+ return Flag271 (Base_Type (Id));
end Has_Protected;
function Has_Qualified_Name (Id : E) return B is
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index 78f876b8e8d..96506f88109 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -3946,6 +3946,19 @@ package body Exp_Ch5 is
and then Present (Iterator_Specification (Scheme))
then
Expand_Iterator_Loop (N);
+
+ -- An iterator loop may generate renaming declarations for elements
+ -- that require debug information. This is the case in particular
+ -- with element iterators, where debug information must be generated
+ -- for the temporary that holds the element value. These temporaries
+ -- are created within a transient block whose local declarations are
+ -- transferred to the loop, which now has non-trivial local objects.
+
+ if Nkind (N) = N_Loop_Statement
+ and then Present (Identifier (N))
+ then
+ Qualify_Entity_Names (N);
+ end if;
end if;
-- When the iteration scheme mentiones attribute 'Loop_Entry, the loop
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index d2a5f84e0cd..0b6d7a3e628 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -5447,6 +5447,8 @@ package body Exp_Util is
-- that it is common and reasonable for code to be deleted in
-- instances for various reasons.
+ -- Could we use Is_Statically_Unevaluated here???
+
if Nkind (Parent (N)) = N_If_Statement then
declare
C : constant Node_Id := Condition (Parent (N));
@@ -5495,6 +5497,7 @@ package body Exp_Util is
declare
E : Entity_Id := First_Entity (Defining_Entity (N));
+
begin
while Present (E) loop
if Ekind (E) = E_Operator then
@@ -5510,7 +5513,7 @@ package body Exp_Util is
elsif Nkind (N) = N_If_Statement then
Kill_Dead_Code (Then_Statements (N));
- Kill_Dead_Code (Elsif_Parts (N));
+ Kill_Dead_Code (Elsif_Parts (N));
Kill_Dead_Code (Else_Statements (N));
elsif Nkind (N) = N_Loop_Statement then
@@ -5543,8 +5546,10 @@ package body Exp_Util is
procedure Kill_Dead_Code (L : List_Id; Warn : Boolean := False) is
N : Node_Id;
W : Boolean;
+
begin
W := Warn;
+
if Is_Non_Empty_List (L) then
N := First (L);
while Present (N) loop
@@ -6770,7 +6775,7 @@ package body Exp_Util is
Analyze (Block);
end if;
- when others =>
+ when others =>
null;
end case;
end Process_Statements_For_Controlled_Objects;
@@ -6782,6 +6787,7 @@ package body Exp_Util is
function Power_Of_Two (N : Node_Id) return Nat is
Typ : constant Entity_Id := Etype (N);
pragma Assert (Is_Integer_Type (Typ));
+
Siz : constant Nat := UI_To_Int (Esize (Typ));
Val : Uint;
@@ -8703,7 +8709,6 @@ package body Exp_Util is
Loc : constant Source_Ptr := Sloc (N);
Stseq : constant Node_Id := Handled_Statement_Sequence (N);
Stmts : constant List_Id := Statements (Stseq);
-
begin
if Abort_Allowed then
Prepend_To (Stmts, Build_Runtime_Call (Loc, RE_Abort_Defer));
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index 8b703261ff3..d22118e4db8 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -5492,7 +5492,7 @@ package body Sem_Attr is
when Attribute_Scalar_Storage_Order => Scalar_Storage_Order :
declare
- Ent : Entity_Id := Empty;
+ Ent : Entity_Id := Empty;
begin
Check_E0;
@@ -5505,7 +5505,7 @@ package body Sem_Attr is
-- the default bit order for the target.
if not (GNAT_Mode and then Is_Generic_Type (P_Type))
- and then not In_Instance
+ and then not In_Instance
then
Error_Attr_P
("prefix of % attribute must be record or array type");
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index 7f9f086ad8c..8ac94e92602 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -639,15 +639,6 @@ package body Sem_Ch4 is
end;
end if;
- -- Check restriction against dynamically allocated protected
- -- objects. Note that when limited aggregates are supported,
- -- a similar test should be applied to an allocator with a
- -- qualified expression ???
-
- if Has_Protected (Type_Id) then
- Check_Restriction (No_Protected_Type_Allocators, N);
- end if;
-
-- Check for missing initialization. Skip this check if we already
-- had errors on analyzing the allocator, since in that case these
-- are probably cascaded errors.
@@ -725,6 +716,12 @@ package body Sem_Ch4 is
Check_Restriction (No_Task_Allocators, N);
end if;
+ -- Check restriction against dynamically allocated protected objects
+
+ if Has_Protected (Designated_Type (Acc_Type)) then
+ Check_Restriction (No_Protected_Type_Allocators, N);
+ end if;
+
-- AI05-0013-1: No_Nested_Finalization forbids allocators if the access
-- type is nested, and the designated type needs finalization. The rule
-- is conservative in that class-wide types need finalization.
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 0782c502546..62a5bdb9743 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -153,8 +153,8 @@ package body Sem_Util is
elsif Nkind (Parent (Typ)) = N_Private_Type_Declaration then
if Present (Full_View (Typ))
- and then Nkind (Parent (Full_View (Typ)))
- = N_Full_Type_Declaration
+ and then
+ Nkind (Parent (Full_View (Typ))) = N_Full_Type_Declaration
then
Nod := Type_Definition (Parent (Full_View (Typ)));
@@ -2149,7 +2149,7 @@ package body Sem_Util is
Get_Index_Bounds (Choice, L, H);
pragma Assert
(Compile_Time_Known_Value (L)
- and then Compile_Time_Known_Value (H));
+ and then Compile_Time_Known_Value (H));
Count_Components :=
Count_Components
+ Expr_Value (H) - Expr_Value (L) + 1;
@@ -2364,9 +2364,7 @@ package body Sem_Util is
elsif not Comes_From_Source (Nam) then
return;
- elsif Is_Entity_Name (Nam)
- and then Is_Type (Entity (Nam))
- then
+ elsif Is_Entity_Name (Nam) and then Is_Type (Entity (Nam)) then
null;
else
@@ -2542,11 +2540,7 @@ package body Sem_Util is
-- Check for Is_Imported needs commenting below ???
if VM_Target /= No_VM
- and then (Ekind (Ent) = E_Variable
- or else
- Ekind (Ent) = E_Constant
- or else
- Ekind (Ent) = E_Loop_Parameter)
+ and then Ekind_In (Ent, E_Variable, E_Constant, E_Loop_Parameter)
and then Scope (Ent) /= Empty
and then not Is_Library_Level_Entity (Ent)
and then not Is_Imported (Ent)
@@ -2562,9 +2556,7 @@ package body Sem_Util is
Enclosing := Enclosing_Subprogram (Ent);
- if Enclosing /= Empty
- and then Enclosing /= Current_Subp
- then
+ if Enclosing /= Empty and then Enclosing /= Current_Subp then
Set_Has_Up_Level_Access (Ent, True);
end if;
end if;
@@ -2769,7 +2761,7 @@ 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;
-------------------------
@@ -2950,9 +2942,7 @@ package body Sem_Util is
begin
S := Current_Scope;
- while Present (S)
- and then S /= Pref_Encl_Typ
- loop
+ while Present (S) and then S /= Pref_Encl_Typ loop
if Scope (S) = Pref_Encl_Typ then
E := First_Entity (Pref_Encl_Typ);
while Present (E)
@@ -2961,6 +2951,7 @@ package body Sem_Util is
if E = S then
return True;
end if;
+
Next_Entity (E);
end loop;
end if;
@@ -2987,7 +2978,7 @@ package body Sem_Util is
and then No (Cont_Encl_Typ)
and then Is_Public_Operation
and then Scope_Depth (Pref_Encl_Typ) >=
- Object_Access_Level (Context)
+ Object_Access_Level (Context)
then
Error_Msg_N
("??possible unprotected access to protected data", Expr);
@@ -3064,9 +3055,7 @@ package body Sem_Util is
Ancestor := Etype (Full_T);
Collect (Ancestor);
- if Is_Interface (Ancestor)
- and then not Exclude_Parents
- then
+ if Is_Interface (Ancestor) and then not Exclude_Parents then
Append_Unique_Elmt (Ancestor, Ifaces_List);
end if;
end if;
@@ -3210,8 +3199,8 @@ package body Sem_Util is
end if;
while Present (ADT)
- and then Is_Tag (Node (ADT))
- and then Related_Type (Node (ADT)) /= Iface
+ and then Is_Tag (Node (ADT))
+ and then Related_Type (Node (ADT)) /= Iface
loop
-- Skip secondary dispatch table referencing thunks to user
-- defined primitives covered by this interface.
@@ -3389,8 +3378,8 @@ package body Sem_Util is
elsif Is_Generic_Type (B_Type) then
if Nkind (B_Decl) = N_Formal_Type_Declaration
- and then Nkind (Formal_Type_Definition (B_Decl))
- = N_Formal_Derived_Type_Definition
+ and then Nkind (Formal_Type_Definition (B_Decl)) =
+ N_Formal_Derived_Type_Definition
then
Formal_Derived := True;
else
@@ -3489,8 +3478,7 @@ package body Sem_Util is
-- package declaration are not primitive for it.
if Is_Prim
- and then (not Formal_Derived
- or else Present (Alias (Id)))
+ and then (not Formal_Derived or else Present (Alias (Id)))
then
-- In the special case of an equality operator aliased to
-- an overriding dispatching equality belonging to the same
@@ -4223,7 +4211,10 @@ package body Sem_Util is
end if;
end;
- when N_Block_Statement =>
+ when
+ N_Block_Statement |
+ N_Loop_Statement
+ =>
return Entity (Identifier (N));
when others =>
@@ -4241,10 +4232,9 @@ package body Sem_Util is
Check_Concurrent : Boolean := False) return Boolean
is
E : Entity_Id;
+
begin
- if not Is_Entity_Name (N)
- or else No (Entity (N))
- then
+ if not Is_Entity_Name (N) or else No (Entity (N)) then
return False;
else
E := Entity (N);
@@ -4440,7 +4430,7 @@ package body Sem_Util is
elsif Nkind (Obj1) = N_Selected_Component then
return Denotes_Same_Object (Prefix (Obj1), Prefix (Obj2))
and then
- Entity (Selector_Name (Obj1)) = Entity (Selector_Name (Obj2));
+ Entity (Selector_Name (Obj1)) = Entity (Selector_Name (Obj2));
-- Both names are dereferences and the dereferenced names are known to
-- denote the same object (RM 6.4.1(6.7/3))
@@ -4509,10 +4499,11 @@ package body Sem_Util is
and then Denotes_Same_Object (Hi1, Hi2);
end;
- -- In the recursion, literals appear as indexes.
+ -- In the recursion, literals appear as indexes
elsif Nkind (Obj1) = N_Integer_Literal
- and then Nkind (Obj2) = N_Integer_Literal
+ and then
+ Nkind (Obj2) = N_Integer_Literal
then
return Intval (Obj1) = Intval (Obj2);
@@ -4678,11 +4669,9 @@ package body Sem_Util is
-- Start of processing for Designate_Next_Unit
begin
- if (K1 = N_Identifier or else
- K1 = N_Defining_Identifier)
- and then
- (K2 = N_Identifier or else
- K2 = N_Defining_Identifier)
+ if (K1 = N_Identifier or else K1 = N_Defining_Identifier)
+ and then
+ (K2 = N_Identifier or else K2 = N_Defining_Identifier)
then
return Chars (Name1) = Chars (Name2);
@@ -5106,7 +5095,7 @@ package body Sem_Util is
-- same name as a generic formal which has been seen already.
elsif Nkind (Parent (Def_Id)) = N_Package_Renaming_Declaration
- and then not Comes_From_Source (Def_Id)
+ and then not Comes_From_Source (Def_Id)
then
Set_Is_Immediately_Visible (E, False);
@@ -5139,9 +5128,7 @@ package body Sem_Util is
-- entity in the scope.
Prev := First_Entity (Current_Scope);
- while Present (Prev)
- and then Next_Entity (Prev) /= E
- loop
+ while Present (Prev) and then Next_Entity (Prev) /= E loop
Next_Entity (Prev);
end loop;
@@ -5301,7 +5288,7 @@ package body Sem_Util is
end if;
if Nkind (Parent (Parent (Def_Id))) =
- N_Generic_Subprogram_Declaration
+ N_Generic_Subprogram_Declaration
and then Def_Id =
Defining_Entity (Specification (Parent (Parent (Def_Id))))
then
@@ -5369,9 +5356,7 @@ package body Sem_Util is
-- Declaring a homonym is not allowed in SPARK ...
- if Present (C)
- and then Restriction_Check_Required (SPARK_05)
- then
+ if Present (C) and then Restriction_Check_Required (SPARK_05) then
declare
Enclosing_Subp : constant Node_Id := Enclosing_Subprogram (Def_Id);
Enclosing_Pack : constant Node_Id := Enclosing_Package (Def_Id);
@@ -5419,38 +5404,38 @@ package body Sem_Util is
if Warn_On_Hiding and then Present (C)
- -- Don't warn for record components since they always have a well
- -- defined scope which does not confuse other uses. Note that in
- -- some cases, Ekind has not been set yet.
+ -- Don't warn for record components since they always have a well
+ -- defined scope which does not confuse other uses. Note that in
+ -- some cases, Ekind has not been set yet.
- and then Ekind (C) /= E_Component
- and then Ekind (C) /= E_Discriminant
- and then Nkind (Parent (C)) /= N_Component_Declaration
- and then Ekind (Def_Id) /= E_Component
- and then Ekind (Def_Id) /= E_Discriminant
- and then Nkind (Parent (Def_Id)) /= N_Component_Declaration
+ and then Ekind (C) /= E_Component
+ and then Ekind (C) /= E_Discriminant
+ and then Nkind (Parent (C)) /= N_Component_Declaration
+ and then Ekind (Def_Id) /= E_Component
+ and then Ekind (Def_Id) /= E_Discriminant
+ and then Nkind (Parent (Def_Id)) /= N_Component_Declaration
- -- Don't warn for one character variables. It is too common to use
- -- such variables as locals and will just cause too many false hits.
+ -- Don't warn for one character variables. It is too common to use
+ -- such variables as locals and will just cause too many false hits.
- and then Length_Of_Name (Chars (C)) /= 1
+ and then Length_Of_Name (Chars (C)) /= 1
- -- Don't warn for non-source entities
+ -- Don't warn for non-source entities
- and then Comes_From_Source (C)
- and then Comes_From_Source (Def_Id)
+ and then Comes_From_Source (C)
+ and then Comes_From_Source (Def_Id)
- -- Don't warn unless entity in question is in extended main source
+ -- Don't warn unless entity in question is in extended main source
- and then In_Extended_Main_Source_Unit (Def_Id)
+ and then In_Extended_Main_Source_Unit (Def_Id)
- -- Finally, the hidden entity must be either immediately visible or
- -- use visible (i.e. from a used package).
+ -- Finally, the hidden entity must be either immediately visible or
+ -- use visible (i.e. from a used package).
- and then
- (Is_Immediately_Visible (C)
- or else
- Is_Potentially_Use_Visible (C))
+ and then
+ (Is_Immediately_Visible (C)
+ or else
+ Is_Potentially_Use_Visible (C))
then
Error_Msg_Sloc := Sloc (C);
Error_Msg_N ("declaration hides &#?h?", Def_Id);
@@ -5552,9 +5537,7 @@ package body Sem_Util is
Actual : Node_Id;
begin
- if (Nkind (Parnt) = N_Indexed_Component
- or else
- Nkind (Parnt) = N_Selected_Component)
+ if Nkind_In (Parnt, N_Indexed_Component, N_Selected_Component)
and then N = Prefix (Parnt)
then
Find_Actual (Parnt, Formal, Call);
@@ -5693,10 +5676,10 @@ package body Sem_Util is
while Present (Old_Disc) and then Present (New_Disc) loop
if Old_Disc = Par_Disc then
return New_Disc;
- else
- Next_Discriminant (Old_Disc);
- Next_Discriminant (New_Disc);
end if;
+
+ Next_Discriminant (Old_Disc);
+ Next_Discriminant (New_Disc);
end loop;
-- Should always find it
@@ -5984,8 +5967,7 @@ package body Sem_Util is
-- be a static subtype, since otherwise it would have
-- been diagnosed as illegal.
- elsif Is_Entity_Name (Choice)
- and then Is_Type (Entity (Choice))
+ elsif Is_Entity_Name (Choice) and then Is_Type (Entity (Choice))
then
exit Search when Is_In_Range (Expr, Etype (Choice),
Assume_Valid => False);
@@ -5999,7 +5981,7 @@ package body Sem_Util is
begin
exit Search when
- Val >= Expr_Value (Low_Bound (R))
+ Val >= Expr_Value (Low_Bound (R))
and then
Val <= Expr_Value (High_Bound (R));
end;
@@ -7273,8 +7255,7 @@ package body Sem_Util is
-- where we do not know the alignment of Obj.
if Known_Alignment (Entity (Expr))
- and then
- UI_To_Int (Alignment (Entity (Expr))) <
+ and then UI_To_Int (Alignment (Entity (Expr))) <
Ttypes.Maximum_Alignment
then
Set_Result (Unknown);
@@ -7509,7 +7490,7 @@ package body Sem_Util is
if Nkind (Prop_Nam) = N_Others_Choice
or else (Nkind (Prop_Nam) = N_Identifier
- and then Chars (Prop_Nam) = Property)
+ and then Chars (Prop_Nam) = Property)
then
return Is_True (Expr_Value (Expression (Prop)));
end if;
@@ -7563,24 +7544,20 @@ package body Sem_Util is
return True;
elsif Property = Name_Async_Writers
- and then
- (Present (AW)
- or else
- (No (AR) and then No (ER) and then No (EW)))
+ and then (Present (AW)
+ or else (No (AR) and then No (ER) and then No (EW)))
then
return True;
elsif Property = Name_Effective_Reads
- and then
- (Present (ER)
- or else
- (No (AR) and then No (AW) and then No (EW)))
+ and then (Present (ER)
+ or else (No (AR) and then No (AW) and then No (EW)))
then
return True;
elsif Property = Name_Effective_Writes
- and then
- (Present (EW) or else (No (AR) and then No (AW) and then No (ER)))
+ and then (Present (EW)
+ or else (No (AR) and then No (AW) and then No (ER)))
then
return True;
@@ -7646,9 +7623,7 @@ package body Sem_Util is
-- Handle private types
- if Use_Full_View
- and then Present (Full_View (Typ))
- then
+ if Use_Full_View and then Present (Full_View (Typ)) then
Typ := Full_View (Typ);
end if;
@@ -7675,7 +7650,7 @@ package body Sem_Util is
-- Handle private types
or else (Present (Full_View (Etype (Typ)))
- and then Full_View (Etype (Typ)) = Typ)
+ and then Full_View (Etype (Typ)) = Typ)
-- Protect the frontend against wrong source with cyclic
-- derivations
@@ -7714,13 +7689,12 @@ package body Sem_Util is
return Has_No_Obvious_Side_Effects (Right_Opnd (N));
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
+ return Has_No_Obvious_Side_Effects (Left_Opnd (N))
+ and then
Has_No_Obvious_Side_Effects (Right_Opnd (N));
elsif Nkind (N) = N_Expression_With_Actions
- and then
- Is_Empty_List (Actions (N))
+ and then Is_Empty_List (Actions (N))
then
return Has_No_Obvious_Side_Effects (Expression (N));
@@ -7850,13 +7824,13 @@ package body Sem_Util is
Formal : constant Entity_Id := First_Formal (Init);
begin
if Ekind (Init) = E_Procedure
- and then Chars (Init) = Name_Initialize
- and then Comes_From_Source (Init)
- and then Present (Formal)
- and then Etype (Formal) = BT
- and then No (Next_Formal (Formal))
- and then (Ada_Version < Ada_2012
- or else not Null_Present (Parent (Init)))
+ and then Chars (Init) = Name_Initialize
+ and then Comes_From_Source (Init)
+ and then Present (Formal)
+ and then Etype (Formal) = BT
+ and then No (Next_Formal (Formal))
+ and then (Ada_Version < Ada_2012
+ or else not Null_Present (Parent (Init)))
then
return True;
end if;
@@ -8613,9 +8587,7 @@ package body Sem_Util is
begin
S := Current_Scope;
- while Present (S)
- and then S /= Standard_Standard
- loop
+ 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)
@@ -8628,9 +8600,8 @@ package body Sem_Util is
-- that it is not currently on the scope stack.
if Is_Child_Unit (Curr_Unit)
- and then
- Nkind (Unit (Cunit (Current_Sem_Unit)))
- = N_Package_Instantiation
+ and then Nkind (Unit (Cunit (Current_Sem_Unit))) =
+ N_Package_Instantiation
and then not In_Open_Scopes (Curr_Unit)
then
return False;
@@ -8654,11 +8625,8 @@ 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_Procedure)
+ while Present (S) and then S /= Standard_Standard loop
+ if Ekind_In (S, E_Function, E_Procedure)
and then Is_Generic_Instance (S)
then
return True;
@@ -8685,11 +8653,8 @@ 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_Procedure)
+ while Present (S) and then S /= Standard_Standard loop
+ if Ekind_In (S, E_Function, E_Procedure)
and then Is_Generic_Instance (S)
then
return True;
@@ -8716,9 +8681,7 @@ package body Sem_Util is
begin
S := Current_Scope;
- while Present (S)
- and then S /= Standard_Standard
- loop
+ while Present (S) and then S /= Standard_Standard loop
if Ekind (S) = E_Package
and then Is_Generic_Instance (S)
and then not In_Package_Body (S)
@@ -8742,12 +8705,8 @@ package body Sem_Util is
begin
S := Current_Scope;
- while Present (S)
- and then S /= Standard_Standard
- loop
- if Ekind (S) = E_Package
- and then In_Package_Body (S)
- then
+ while Present (S) and then S /= Standard_Standard loop
+ if Ekind (S) = E_Package and then In_Package_Body (S) then
return True;
else
S := Scope (S);
@@ -8827,10 +8786,9 @@ package body Sem_Util is
Btyp := Base_Type (Etype (Pref));
end if;
- return
- Present (Btyp)
- and then (Is_Record_Type (Btyp) or else Is_Array_Type (Btyp))
- and then Reverse_Storage_Order (Btyp);
+ return Present (Btyp)
+ and then (Is_Record_Type (Btyp) or else Is_Array_Type (Btyp))
+ and then Reverse_Storage_Order (Btyp);
end In_Reverse_Storage_Order_Object;
--------------------------------------
@@ -8868,11 +8826,10 @@ package body Sem_Util is
function In_Visible_Part (Scope_Id : Entity_Id) return Boolean is
begin
- return
- Is_Package_Or_Generic_Package (Scope_Id)
- and then In_Open_Scopes (Scope_Id)
- and then not In_Package_Body (Scope_Id)
- and then not In_Private_Part (Scope_Id);
+ return Is_Package_Or_Generic_Package (Scope_Id)
+ and then In_Open_Scopes (Scope_Id)
+ and then not In_Package_Body (Scope_Id)
+ and then not In_Private_Part (Scope_Id);
end In_Visible_Part;
--------------------------------
@@ -9043,14 +9000,13 @@ package body Sem_Util is
-- For a retrieval of a subcomponent of some composite object,
-- retrieve the ultimate entity if there is one.
- elsif Nkind (New_Prefix) = N_Selected_Component
- or else Nkind (New_Prefix) = N_Indexed_Component
+ elsif Nkind_In (New_Prefix, N_Selected_Component,
+ N_Indexed_Component)
then
Pref := Prefix (New_Prefix);
while Present (Pref)
- and then
- (Nkind (Pref) = N_Selected_Component
- or else Nkind (Pref) = N_Indexed_Component)
+ and then Nkind_In (Pref, N_Selected_Component,
+ N_Indexed_Component)
loop
Pref := Prefix (Pref);
end loop;
@@ -9226,9 +9182,7 @@ package body Sem_Util is
begin
Par := E2;
- while Present (Par)
- and then Par /= Standard_Standard
- loop
+ while Present (Par) and then Par /= Standard_Standard loop
if Par = E1 then
return True;
end if;
@@ -9331,9 +9285,8 @@ package body Sem_Util is
function Is_Attribute_Result (N : Node_Id) return Boolean is
begin
- return
- Nkind (N) = N_Attribute_Reference
- and then Attribute_Name (N) = Name_Result;
+ return Nkind (N) = N_Attribute_Reference
+ and then Attribute_Name (N) = Name_Result;
end Is_Attribute_Result;
------------------------------------
@@ -9532,9 +9485,8 @@ package body Sem_Util is
function Is_Concurrent_Interface (T : Entity_Id) return Boolean is
begin
- return
- Is_Interface (T)
- and then
+ return Is_Interface (T)
+ and then
(Is_Protected_Interface (T)
or else Is_Synchronized_Interface (T)
or else Is_Task_Interface (T));
@@ -9980,7 +9932,7 @@ package body Sem_Util is
and then In_Package_Body (Current_Scope)))
and then (Is_Declared_Within_Variant (Comp)
- or else Has_Discriminant_Dependent_Constraint (Comp))
+ or else Has_Discriminant_Dependent_Constraint (Comp))
and then (not P_Aliased or else Ada_Version >= Ada_2005)
then
return True;
@@ -10025,14 +9977,10 @@ package body Sem_Util is
function Is_Dereferenced (N : Node_Id) return Boolean is
P : constant Node_Id := Parent (N);
begin
- return
- (Nkind (P) = N_Selected_Component
- or else
- Nkind (P) = N_Explicit_Dereference
- or else
- Nkind (P) = N_Indexed_Component
- or else
- Nkind (P) = N_Slice)
+ return Nkind_In (P, N_Selected_Component,
+ N_Explicit_Dereference,
+ N_Indexed_Component,
+ N_Slice)
and then Prefix (P) = N;
end Is_Dereferenced;
@@ -10205,7 +10153,8 @@ package body Sem_Util is
end if;
if Compile_Time_Known_Value (Lbd)
- and then Compile_Time_Known_Value (Hbd)
+ and then
+ Compile_Time_Known_Value (Hbd)
then
if Expr_Value (Hbd) < Expr_Value (Lbd) then
return True;
@@ -10287,7 +10236,7 @@ package body Sem_Util is
while Present (Ent) loop
if Ekind (Ent) = E_Component
and then (No (Parent (Ent))
- or else No (Expression (Parent (Ent))))
+ or else No (Expression (Parent (Ent))))
and then not Is_Fully_Initialized_Type (Etype (Ent))
-- Special VM case for tag components, which need to be
@@ -10464,9 +10413,8 @@ package body Sem_Util is
begin
if Is_Class_Wide_Type (Typ)
- and then
- Nam_In (Chars (Etype (Typ)), Name_Forward_Iterator,
- Name_Reversible_Iterator)
+ and then Nam_In (Chars (Etype (Typ)), Name_Forward_Iterator,
+ Name_Reversible_Iterator)
and then
Is_Predefined_File_Name
(Unit_File_Name (Get_Source_Unit (Etype (Typ))))
@@ -10710,7 +10658,7 @@ package body Sem_Util is
Is_Object_Reference (Selector_Name (N))
and then
(Is_Object_Reference (Prefix (N))
- or else Is_Access_Type (Etype (Prefix (N))));
+ or else Is_Access_Type (Etype (Prefix (N))));
when N_Explicit_Dereference =>
return True;
@@ -11230,7 +11178,7 @@ package body Sem_Util is
elsif Present (Controlling_Argument (N))
and then Is_Remote_Access_To_Class_Wide_Type
- (Etype (Controlling_Argument (N)))
+ (Etype (Controlling_Argument (N)))
then
-- Any primitive operation call with a controlling argument of
-- a RACW type is a remote call.
@@ -11306,16 +11254,13 @@ package body Sem_Util is
begin
if Is_Class_Wide_Type (Typ)
- and then Chars (Etype (Typ)) = Name_Reversible_Iterator
- and then
- Is_Predefined_File_Name
- (Unit_File_Name (Get_Source_Unit (Etype (Typ))))
+ and then Chars (Etype (Typ)) = Name_Reversible_Iterator
+ and then Is_Predefined_File_Name
+ (Unit_File_Name (Get_Source_Unit (Etype (Typ))))
then
return True;
- elsif not Is_Tagged_Type (Typ)
- or else not Is_Derived_Type (Typ)
- then
+ elsif not Is_Tagged_Type (Typ) or else not Is_Derived_Type (Typ) then
return False;
else
@@ -11348,13 +11293,11 @@ package body Sem_Util is
if not Is_List_Member (N) then
declare
P : constant Node_Id := Parent (N);
- K : constant Node_Kind := Nkind (P);
begin
- return
- (K = N_Expanded_Name or else
- K = N_Generic_Association or else
- K = N_Parameter_Association or else
- K = N_Selected_Component)
+ return Nkind_In (P, N_Expanded_Name,
+ N_Generic_Association,
+ N_Parameter_Association,
+ N_Selected_Component)
and then Selector_Name (P) = N;
end;
@@ -11429,7 +11372,8 @@ package body Sem_Util is
N_Short_Circuit |
N_Membership_Test =>
Is_Ok := Is_SPARK_Initialization_Expr (Left_Opnd (Orig_N))
- and then Is_SPARK_Initialization_Expr (Right_Opnd (Orig_N));
+ and then
+ Is_SPARK_Initialization_Expr (Right_Opnd (Orig_N));
when N_Aggregate |
N_Extension_Aggregate =>
@@ -11499,7 +11443,7 @@ package body Sem_Util is
return Present (Entity (N))
and then
(Ekind_In (Entity (N), E_Constant, E_Variable)
- or else Ekind (Entity (N)) in Formal_Kind);
+ or else Ekind (Entity (N)) in Formal_Kind);
else
case Nkind (N) is
@@ -11913,7 +11857,7 @@ package body Sem_Util is
elsif Nkind (N) = N_Explicit_Dereference
and then Present (Etype (Orig_Node))
- and then Ada_Version >= Ada_2012
+ and then Ada_Version >= Ada_2012
and then Has_Implicit_Dereference (Etype (Orig_Node))
then
return True;
@@ -11933,10 +11877,10 @@ package body Sem_Util is
K : constant Entity_Kind := Ekind (E);
begin
- return (K = E_Variable
- and then Nkind (Parent (E)) /= N_Exception_Handler)
+ return (K = E_Variable
+ and then Nkind (Parent (E)) /= N_Exception_Handler)
or else (K = E_Component
- and then not In_Protected_Function (E))
+ 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
@@ -12410,7 +12354,7 @@ package body Sem_Util is
if Is_OK_Static_Expression (L_Low)
and then
- Is_OK_Static_Expression (L_High)
+ Is_OK_Static_Expression (L_High)
then
if Expr_Value (L_High) < Expr_Value (L_Low) then
L_Len := Uint_0;
@@ -13462,9 +13406,7 @@ package body Sem_Util is
end;
end if;
- elsif F in List_Range
- and then Parent (List_Id (F)) = N
- then
+ elsif F in List_Range and then Parent (List_Id (F)) = N then
Visit_List (List_Id (F));
return;
end if;
@@ -13540,8 +13482,7 @@ package body Sem_Util is
end if;
if Is_Type (Node (E))
- and then
- Old_Itype = Associated_Node_For_Itype (Node (E))
+ and then Old_Itype = Associated_Node_For_Itype (Node (E))
then
Set_Associated_Node_For_Itype
(Node (Next_Elmt (E)), New_Itype);
@@ -13637,9 +13578,8 @@ package body Sem_Util is
begin
-- Handle case of an Itype, which must be copied
- if Has_Extension (N)
- and then Is_Itype (N)
- then
+ if Has_Extension (N) and then Is_Itype (N) then
+
-- Nothing to do if already in the list. This can happen with an
-- Itype entity that appears more than once in the tree.
-- Note that we do not want to visit descendents in this case.
@@ -14071,14 +14011,13 @@ package body Sem_Util is
then
if No (Actuals)
and then
- (Nkind (Parent (N)) = N_Procedure_Call_Statement
- or else
- (Nkind (Parent (N)) = N_Function_Call
- or else
- Nkind (Parent (N)) = 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));
+
else
Error_Msg_Name_1 := Chars (S);
Error_Msg_Sloc := Sloc (S);
@@ -14317,8 +14256,7 @@ package body Sem_Util is
-- or container is also modified.
if Ada_Version >= Ada_2012
- and then
- Nkind (Parent (Ent)) = N_Iterator_Specification
+ and then Nkind (Parent (Ent)) = N_Iterator_Specification
then
declare
Domain : constant Node_Id := Name (Parent (Ent));
@@ -14409,10 +14347,9 @@ package body Sem_Util is
function Is_Interface_Conversion (N : Node_Id) return Boolean is
begin
- return
- Nkind (N) = N_Unchecked_Type_Conversion
- and then Nkind (Expression (N)) = N_Attribute_Reference
- and then Attribute_Name (Expression (N)) = Name_Address;
+ return Nkind (N) = N_Unchecked_Type_Conversion
+ and then Nkind (Expression (N)) = N_Attribute_Reference
+ and then Attribute_Name (Expression (N)) = Name_Address;
end Is_Interface_Conversion;
------------------
@@ -14786,9 +14723,7 @@ package body Sem_Util is
return Any_Type;
end if;
- if Is_Private_Type (Btype)
- and then not Is_Generic_Type (Btype)
- then
+ if Is_Private_Type (Btype) and then not Is_Generic_Type (Btype) then
if Present (Full_View (Btype))
and then Is_Record_Type (Full_View (Btype))
and then not Is_Frozen (Btype)
@@ -14875,16 +14810,16 @@ package body Sem_Util is
return Chars (E1) = Chars (E2)
or else
(not Is_Internal_Name (Chars (E1))
- and then Is_Internal_Name (Chars (E2))
- and then Non_Internal_Name (E2) = Chars (E1))
+ and then Is_Internal_Name (Chars (E2))
+ and then Non_Internal_Name (E2) = Chars (E1))
or else
(not Is_Internal_Name (Chars (E2))
- and then Is_Internal_Name (Chars (E1))
- and then Non_Internal_Name (E1) = Chars (E2))
+ and then Is_Internal_Name (Chars (E1))
+ and then Non_Internal_Name (E1) = Chars (E2))
or else
(Is_Predefined_Dispatching_Operation (E1)
- and then Is_Predefined_Dispatching_Operation (E2)
- and then Same_TSS (E1, E2))
+ and then Is_Predefined_Dispatching_Operation (E2)
+ and then Same_TSS (E1, E2))
or else
(Is_Init_Proc (E1) and then Is_Init_Proc (E2));
end Primitive_Names_Match;
@@ -15484,12 +15419,7 @@ package body Sem_Util is
-- For conditionals, we also allow loop parameters and all formals,
-- including in parameters.
- elsif Cond
- and then
- (Ekind (Ent) = E_Loop_Parameter
- or else
- Ekind (Ent) = E_In_Parameter)
- then
+ elsif Cond and then Ekind_In (Ent, E_Loop_Parameter, E_In_Parameter) then
null;
-- For all other cases, not just unsafe, but impossible to capture
@@ -15511,7 +15441,7 @@ package body Sem_Util is
or else Present (Address_Clause (Ent))
or else Address_Taken (Ent)
or else (Is_Library_Level_Entity (Ent)
- and then Ekind (Ent) = E_Variable)
+ and then Ekind (Ent) = E_Variable)
then
return False;
end if;
@@ -15560,9 +15490,9 @@ package body Sem_Util is
if Nkind (P) = N_If_Statement
or else Nkind (P) = N_Case_Statement
or else (Nkind (P) in N_Short_Circuit
- and then Desc = Right_Opnd (P))
+ and then Desc = Right_Opnd (P))
or else (Nkind (P) = N_If_Expression
- and then Desc /= First (Expressions (P)))
+ and then Desc /= First (Expressions (P)))
or else Nkind (P) = N_Exception_Handler
or else Nkind (P) = N_Selective_Accept
or else Nkind (P) = N_Conditional_Entry_Call
@@ -15570,9 +15500,10 @@ package body Sem_Util is
or else Nkind (P) = N_Asynchronous_Select
then
return False;
+
else
Desc := P;
- P := Parent (P);
+ P := Parent (P);
-- A special Ada 2012 case: the original node may be part
-- of the else_actions of a conditional expression, in which
@@ -15908,9 +15839,7 @@ package body Sem_Util is
procedure Set_Debug_Info_Needed_If_Not_Set (E : Entity_Id) is
begin
- if Present (E)
- and then not Needs_Debug_Info (E)
- then
+ if Present (E) and then not Needs_Debug_Info (E) then
Set_Debug_Info_Needed (E);
-- For a private type, indicate that the full view also needs
@@ -16540,12 +16469,9 @@ package body Sem_Util is
if not Is_Public (Ent) then
Set_Public_Status (Ent);
- if Is_Public (Ent)
- and then Ekind (Ent) = E_Record_Subtype
+ if Is_Public (Ent) and then Ekind (Ent) = E_Record_Subtype then
- then
- -- The components of the propagated Itype must be public
- -- as well.
+ -- The components of the propagated Itype must also be public
declare
Comp : Entity_Id;
@@ -16608,7 +16534,7 @@ package body Sem_Util is
or else
(Is_Itype (Btyp)
and then Nkind (Associated_Node_For_Itype (Btyp)) =
- N_Object_Declaration
+ N_Object_Declaration
and then Is_Return_Object
(Defining_Identifier
(Associated_Node_For_Itype (Btyp))))
@@ -16730,9 +16656,7 @@ package body Sem_Util is
return Empty;
end;
- elsif Is_Private_Type (T)
- and then Present (Full_View (T))
- then
+ elsif Is_Private_Type (T) and then Present (Full_View (T)) then
return Type_Without_Stream_Operation (Full_View (T), Op);
else
return Empty;
@@ -17032,8 +16956,7 @@ package body Sem_Util is
Elmt : Elmt_Id;
begin
- pragma Assert (Is_Record_Type (Typ)
- and then Is_Tagged_Type (Typ));
+ pragma Assert (Is_Record_Type (Typ) and then Is_Tagged_Type (Typ));
-- Collect all the parents and progenitors of Typ. If the full-view of
-- private parents and progenitors is available then it is used to
@@ -17133,8 +17056,7 @@ package body Sem_Util is
if Is_Array_Type (Expec_Type)
and then Number_Dimensions (Expec_Type) = 1
- and then
- Covers (Etype (Component_Type (Expec_Type)), Found_Type)
+ and then Covers (Etype (Component_Type (Expec_Type)), Found_Type)
then
-- Use type name if available. This excludes multidimensional
-- arrays and anonymous arrays.
@@ -17284,9 +17206,7 @@ package body Sem_Util is
elsif Is_Integer_Type (Expec_Type)
and then Is_RTE (Found_Type, RE_Address)
- and then (Nkind (Parent (Expr)) = N_Op_Add
- or else
- Nkind (Parent (Expr)) = N_Op_Subtract)
+ and then Nkind_In (Parent (Expr), N_Op_Add, N_Op_Subtract)
and then Expr = Left_Opnd (Parent (Expr))
and then Is_Integer_Type (Etype (Right_Opnd (Parent (Expr))))
then
@@ -17376,10 +17296,7 @@ package body Sem_Util is
Error_Msg_N ("\\found package name!", Expr);
elsif Is_Entity_Name (Expr)
- and then
- (Ekind (Entity (Expr)) = E_Procedure
- or else
- Ekind (Entity (Expr)) = E_Generic_Procedure)
+ and then Ekind_In (Entity (Expr), E_Procedure, E_Generic_Procedure)
then
if Ekind (Expec_Type) = E_Access_Subprogram_Type then
Error_Msg_N
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index d6963416f72..8140f61fb34 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -444,6 +444,11 @@ package Sem_Util is
-- specification. If the declaration has a defining unit name, then the
-- defining entity is obtained from the defining unit name ignoring any
-- child unit prefixes.
+ --
+ -- Iterator loops also have a defining entity, which holds the list of
+ -- local entities declared during loop expansion. These entities need
+ -- debugging information, generated through QUalify_Entity_Names, and
+ -- the loop declaration must be placed in the table Name_Qualify_Units.
function Denotes_Discriminant
(N : Node_Id;