diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 2fb275398b4..0b7f5412c06 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,19 @@ +2012-10-29 Yannick Moy + + * checks.adb (Apply_Arithmetic_Overflow_Minimized_Eliminated): + Add special case for case expression alternative. + (Is_Signed_Integer_Arithmetic_Op): Remove special case for case + expression alternative. + * exp_ch4.adb Minor reformatting. + +2012-10-29 Thomas Quinot + + * sem_elab.adb: Minor reformatting. + +2012-10-29 Bob Duff + + * sem_res.adb: Minor: Remove redundant test. + 2012-10-29 Arnaud Charlet * pprint.ads, pprint.adb, adabkend.ads, adabkend.adb, diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 061f9796f2a..406d292f09e 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -1108,7 +1108,11 @@ package body Checks is or else Nkind (P) in N_Membership_Test or else Nkind (P) in N_Op_Compare - -- We may also be a range operand in a membership test + -- This is also true for an alternative in a case expression + + or else Nkind (P) = N_Case_Expression_Alternative + + -- This is also true for a range operand in a membership test or else (Nkind (P) = N_Range and then Nkind (Parent (P)) in N_Membership_Test) @@ -6268,9 +6272,6 @@ package body Checks is when N_If_Expression | N_Case_Expression => return Is_Signed_Integer_Type (Etype (N)); - when N_Case_Expression_Alternative => - return Is_Signed_Integer_Type (Etype (Parent (N))); - when others => return False; end case; diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index ee9ce0c50f2..ebdbcdeb316 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -3877,8 +3877,8 @@ package body Exp_Ch4 is end if; -- Right operand is a subtype name and the subtype has a predicate. We - -- have to make sure predicate is checked, and for that we need to use - -- the standard N_In circuitry with appropriate types. + -- have to make sure the predicate is checked, and for that we need to + -- use the standard N_In circuitry with appropriate types. else pragma Assert (Present (Predicate_Function (Etype (Rop)))); @@ -3921,7 +3921,7 @@ package body Exp_Ch4 is -- Bnn -- end - -- A bit gruesome, but here goes. + -- A bit gruesome, but there doesn't seem to be a simpler way declare Blk : constant Node_Id := Make_Bignum_Block (Loc); @@ -3937,10 +3937,8 @@ package body Exp_Ch4 is Nin := Make_In (Loc, - Left_Opnd => - Convert_To (Base_Type (Etype (Rop)), - New_Occurrence_Of (Lnn, Loc)), - Right_Opnd => New_Occurrence_Of (Etype (Rop), Loc)); + Left_Opnd => Convert_To (TB, New_Occurrence_Of (Lnn, Loc)), + Right_Opnd => New_Occurrence_Of (T, Loc)); Set_No_Minimize_Eliminate (Nin); -- Now decorate the block diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb index be3d7c5f98d..4065eb386cc 100644 --- a/gcc/ada/sem_elab.adb +++ b/gcc/ada/sem_elab.adb @@ -1137,15 +1137,13 @@ package body Sem_Elab is -- Here we definitely have a bad instantiation - Error_Msg_NE - ("?cannot instantiate& before body seen", N, Ent); + Error_Msg_NE ("?cannot instantiate& before body seen", N, Ent); if Present (Instance_Spec (N)) then Supply_Bodies (Instance_Spec (N)); end if; - Error_Msg_N - ("\?Program_Error will be raised at run time", N); + Error_Msg_N ("\?Program_Error will be raised at run time", N); Insert_Elab_Check (N); Set_ABE_Is_Certain (N); end Check_Bad_Instantiation; @@ -1997,7 +1995,7 @@ package body Sem_Elab is then return Abandon; - -- If we have a function call, check it + -- If we have a function call, check it elsif Nkind (N) = N_Function_Call then Check_Elab_Call (N, Outer_Scope); @@ -2078,8 +2076,7 @@ package body Sem_Elab is Elab_Visited.Append (E); - -- If the call is to a function that renames a literal, no check - -- is needed. + -- If the call is to a function that renames a literal, no check needed if Ekind (E) = E_Enumeration_Literal then return; @@ -2188,12 +2185,10 @@ package body Sem_Elab is Error_Msg_NE ("?cannot instantiate& before body seen", N, Orig_Ent); else - Error_Msg_NE - ("?cannot call& before body seen", N, Orig_Ent); + Error_Msg_NE ("?cannot call& before body seen", N, Orig_Ent); end if; - Error_Msg_N - ("\?Program_Error will be raised at run time", N); + Error_Msg_N ("\?Program_Error will be raised at run time", N); Insert_Elab_Check (N); -- Call is not at outer level diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 4383754fa31..72c5725f44e 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -6115,9 +6115,7 @@ package body Sem_Res is -- Check comparison on unordered enumeration - if Comes_From_Source (N) - and then Bad_Unordered_Enumeration_Reference (N, Etype (L)) - then + if Bad_Unordered_Enumeration_Reference (N, Etype (L)) then Error_Msg_N ("comparison on unordered enumeration type?", N); end if;