From: Arnaud Charlet Date: Wed, 8 Dec 2004 11:48:38 +0000 (+0100) Subject: sem_ch5.adb (One_Bound): Remove call to Resolve... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e2d6a9e577a281708dabbfd4666ae1b6bdd5d018;p=gcc.git sem_ch5.adb (One_Bound): Remove call to Resolve... * sem_ch5.adb (One_Bound): Remove call to Resolve, as the bound needs to be resolved later as part of Analyze_Iteration_Scheme's call to Make_Index. From-SVN: r91893 --- diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index 99e10d17b26..2a4cf9d7ef8 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -149,7 +149,7 @@ package body Sem_Ch5 is elsif Nkind (N) = N_Indexed_Component then Diagnose_Non_Variable_Lhs (Prefix (N)); - -- Another special case for assignment to discriminant. + -- Another special case for assignment to discriminant elsif Nkind (N) = N_Selected_Component then if Present (Entity (Selector_Name (N))) @@ -939,7 +939,7 @@ package body Sem_Ch5 is -- Analyze_If_Statement -- -------------------------- - -- A special complication arises in the analysis of if statements. + -- A special complication arises in the analysis of if statements -- The expander has circuitry to completely delete code that it -- can tell will not be executed (as a result of compile time known @@ -1141,20 +1141,23 @@ package body Sem_Ch5 is --------------- function One_Bound (Bound : Node_Id) return Node_Id is - Assign : Node_Id; - Id : Entity_Id; - Decl : Node_Id; + Assign : Node_Id; + Id : Entity_Id; + Decl : Node_Id; + Decl_Typ : Entity_Id; begin -- If the bound is a constant or an object, no need for a -- separate declaration. If the bound is the result of previous -- expansion it is already analyzed and should not be modified. + -- Note that the Bound will be resolved later, if needed, as + -- part of the call to Make_Index (literal bounds may need to + -- be resolved to type Integer). if Nkind (Bound) = N_Integer_Literal or else Is_Entity_Name (Bound) or else Analyzed (Bound) then - Resolve (Bound, Typ); return Bound; end if; @@ -1162,10 +1165,20 @@ package body Sem_Ch5 is Make_Defining_Identifier (Loc, Chars => New_Internal_Name ('S')); + -- If the type of the discrete range is Universal_Integer, then + -- the bound's type must be resolved to Integer, so the object + -- used to hold the bound must also have type Integer. + + if Typ = Universal_Integer then + Decl_Typ := Standard_Integer; + else + Decl_Typ := Typ; + end if; + Decl := Make_Object_Declaration (Loc, Defining_Identifier => Id, - Object_Definition => New_Occurrence_Of (Typ, Loc)); + Object_Definition => New_Occurrence_Of (Decl_Typ, Loc)); Insert_Before (Parent (N), Decl); Analyze (Decl); @@ -1559,7 +1572,7 @@ package body Sem_Ch5 is Analyze (Identifier (S)); Lab := Entity (Identifier (S)); - -- If we found a label mark it as reachable. + -- If we found a label mark it as reachable if Ekind (Lab) = E_Label then Generate_Definition (Lab);