diff options
Diffstat (limited to 'gcc/ada/sem_ch4.adb')
-rw-r--r-- | gcc/ada/sem_ch4.adb | 104 |
1 files changed, 54 insertions, 50 deletions
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 742e1c9afae..efc76f11398 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -3114,63 +3114,61 @@ package body Sem_Ch4 is if Present (Next_Actual (Act2)) then return; + end if; - elsif Op_Name = Name_Op_Add - or else Op_Name = Name_Op_Subtract - or else Op_Name = Name_Op_Multiply - or else Op_Name = Name_Op_Divide - or else Op_Name = Name_Op_Mod - or else Op_Name = Name_Op_Rem - or else Op_Name = Name_Op_Expon - then - Find_Arithmetic_Types (Act1, Act2, Op_Id, N); + -- Otherwise action depends on operator - elsif Op_Name = Name_Op_And - or else Op_Name = Name_Op_Or - or else Op_Name = Name_Op_Xor - then - Find_Boolean_Types (Act1, Act2, Op_Id, N); + case Op_Name is + when Name_Op_Add | + Name_Op_Subtract | + Name_Op_Multiply | + Name_Op_Divide | + Name_Op_Mod | + Name_Op_Rem | + Name_Op_Expon => + Find_Arithmetic_Types (Act1, Act2, Op_Id, N); - elsif Op_Name = Name_Op_Lt - or else Op_Name = Name_Op_Le - or else Op_Name = Name_Op_Gt - or else Op_Name = Name_Op_Ge - then - Find_Comparison_Types (Act1, Act2, Op_Id, N); + when Name_Op_And | + Name_Op_Or | + Name_Op_Xor => + Find_Boolean_Types (Act1, Act2, Op_Id, N); - elsif Op_Name = Name_Op_Eq - or else Op_Name = Name_Op_Ne - then - Find_Equality_Types (Act1, Act2, Op_Id, N); + when Name_Op_Lt | + Name_Op_Le | + Name_Op_Gt | + Name_Op_Ge => + Find_Comparison_Types (Act1, Act2, Op_Id, N); - elsif Op_Name = Name_Op_Concat then - Find_Concatenation_Types (Act1, Act2, Op_Id, N); + when Name_Op_Eq | + Name_Op_Ne => + Find_Equality_Types (Act1, Act2, Op_Id, N); - -- Is this else null correct, or should it be an abort??? + when Name_Op_Concat => + Find_Concatenation_Types (Act1, Act2, Op_Id, N); - else - null; - end if; + -- Is this when others, or should it be an abort??? + + when others => + null; + end case; -- Unary operator case else - if Op_Name = Name_Op_Subtract or else - Op_Name = Name_Op_Add or else - Op_Name = Name_Op_Abs - then - Find_Unary_Types (Act1, Op_Id, N); + case Op_Name is + when Name_Op_Subtract | + Name_Op_Add | + Name_Op_Abs => + Find_Unary_Types (Act1, Op_Id, N); - elsif - Op_Name = Name_Op_Not - then - Find_Negation_Types (Act1, Op_Id, N); + when Name_Op_Not => + Find_Negation_Types (Act1, Op_Id, N); - -- Is this else null correct, or should it be an abort??? + -- Is this when others correct, or should it be an abort??? - else - null; - end if; + when others => + null; + end case; end if; end Analyze_Operator_Call; @@ -3434,8 +3432,8 @@ package body Sem_Ch4 is -- of the high bound. procedure Check_Universal_Expression (N : Node_Id); - -- In Ada83, reject bounds of a universal range that are not - -- literals or entity names. + -- In Ada83, reject bounds of a universal range that are not literals or + -- entity names. ----------------------- -- Check_Common_Type -- @@ -5548,9 +5546,15 @@ package body Sem_Ch4 is end if; if T1 /= Standard_Void_Type - and then not Is_Limited_Type (T1) - and then not Is_Limited_Composite (T1) and then Has_Compatible_Type (R, T1) + and then + ((not Is_Limited_Type (T1) + and then not Is_Limited_Composite (T1)) + + or else + (Is_Array_Type (T1) + and then not Is_Limited_Type (Component_Type (T1)) + and then Available_Full_View_Of_Component (T1))) then if Found and then Base_Type (T1) /= Base_Type (T_F) @@ -6428,7 +6432,7 @@ package body Sem_Ch4 is begin - -- Check whether type has a specified indexing aspect. + -- Check whether type has a specified indexing aspect Func_Name := Empty; Is_Var := False; @@ -6437,7 +6441,7 @@ package body Sem_Ch4 is while Present (Ritem) loop if Nkind (Ritem) = N_Aspect_Specification then - -- Prefer Variable_Indexing, but will settle for Constant. + -- Prefer Variable_Indexing, but will settle for Constant if Get_Aspect_Id (Chars (Identifier (Ritem))) = Aspect_Constant_Indexing @@ -6523,7 +6527,7 @@ package body Sem_Ch4 is if Success then Set_Etype (Name (N), It.Typ); - -- Add implicit dereference interpretation. + -- Add implicit dereference interpretation Disc := First_Discriminant (Etype (It.Nam)); |