From: Arnaud Charlet Date: Wed, 19 Feb 2014 15:04:08 +0000 (+0100) Subject: [multiple changes] X-Git-Tag: releases/gcc-4.9.0~838 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=53f697ee80c6c9bbc0bb575d4dfcb622f3a376cb;p=thirdparty%2Fgcc.git [multiple changes] 2014-02-19 Ed Schonberg * sem_ch5.adb: Inhibit iterator rewriting in ASIS mode. 2014-02-19 Arnaud Charlet * sem_ch13.adb (Analyze_Aspect_Specifications): Do not generate an error on out of range priorities if Relaxed_RM_Semantics. * sem_prag.adb (Analyze_Pragma): Ditto. 2014-02-19 Bob Duff * sem_attr.adb (Resolve_Attribute): Detect the case of F'Access where F denotes the renaming of an enumeration literal, and issue a specialized error message. From-SVN: r207906 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 09ad3eaf4f64..1fb722dd3549 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,19 @@ +2014-02-19 Ed Schonberg + + * sem_ch5.adb: Inhibit iterator rewriting in ASIS mode. + +2014-02-19 Arnaud Charlet + + * sem_ch13.adb (Analyze_Aspect_Specifications): Do not generate + an error on out of range priorities if Relaxed_RM_Semantics. + * sem_prag.adb (Analyze_Pragma): Ditto. + +2014-02-19 Bob Duff + + * sem_attr.adb (Resolve_Attribute): Detect the case of F'Access + where F denotes the renaming of an enumeration literal, and + issue a specialized error message. + 2014-02-19 Matthew Heaney * a-chtgop.ads (Checked_Index): New operation. diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 3e39d3a073aa..7e1a15eb0581 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -9692,16 +9692,27 @@ package body Sem_Attr is Error_Msg_F ("prefix of % attribute cannot be abstract", P); Set_Etype (N, Any_Type); - elsif Convention (Entity (P)) = Convention_Intrinsic then - if Ekind (Entity (P)) = E_Enumeration_Literal then - Error_Msg_F - ("prefix of % attribute cannot be enumeration literal", - P); - else - Error_Msg_F - ("prefix of % attribute cannot be intrinsic", P); - end if; + elsif Ekind (Entity (P)) = E_Enumeration_Literal then + Error_Msg_F + ("prefix of % attribute cannot be enumeration literal", + P); + Set_Etype (N, Any_Type); + -- An attempt to take 'Access of a function that renames an + -- enumeration literal. Issue a specialized error message. + + elsif Ekind (Entity (P)) = E_Function + and then Present (Alias (Entity (P))) + and then Ekind (Alias (Entity (P))) = E_Enumeration_Literal + then + Error_Msg_F + ("prefix of % attribute cannot be function renaming " & + "an enumeration literal", P); + Set_Etype (N, Any_Type); + + elsif Convention (Entity (P)) = Convention_Intrinsic then + Error_Msg_F + ("prefix of % attribute cannot be intrinsic", P); Set_Etype (N, Any_Type); end if; diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 7e2600f6a6c3..31f33962d9e7 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -1897,7 +1897,10 @@ package body Sem_Ch13 is Set_Main_Priority (Main_Unit, UI_To_Int (Expr_Value (Expr))); - else + -- Ignore pragma if Relaxed_RM_Semantics to support + -- other targets/non GNAT compilers. + + elsif not Relaxed_RM_Semantics then Error_Msg_N ("main subprogram priority is out of range", Expr); diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index c66b41603bfa..bba4477bb445 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -1727,8 +1727,11 @@ package body Sem_Ch5 is -- Do not perform this expansion in SPARK mode, since the formal -- verification directly deals with the source form of the iterator. + -- Ditto for ASIS, where the temporary amy hide the transformation + -- of a selected component into a prefixed function call. and then not GNATprove_Mode + and then not ASIS_Mode then declare Id : constant Entity_Id := Make_Temporary (Loc, 'R', Iter_Name); diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 42cb142a84ab..8e86d6144f9b 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -17871,26 +17871,28 @@ package body Sem_Prag is elsif Raises_Constraint_Error (Arg) then null; - -- Otherwise check in range + -- Otherwise check in range except if Relaxed_RM_Semantics + -- where we ignore the value if out of range. else declare Val : constant Uint := Expr_Value (Arg); - begin - if Val < 0 - or else Val > Expr_Value (Expression - (Parent (RTE (RE_Max_Priority)))) + if not Relaxed_RM_Semantics + and then + (Val < 0 + or else Val > Expr_Value (Expression + (Parent (RTE (RE_Max_Priority))))) then Error_Pragma_Arg ("main subprogram priority is out of range", Arg1); + else + Set_Main_Priority + (Current_Sem_Unit, UI_To_Int (Expr_Value (Arg))); end if; end; end if; - Set_Main_Priority - (Current_Sem_Unit, UI_To_Int (Expr_Value (Arg))); - -- Load an arbitrary entity from System.Tasking.Stages or -- System.Tasking.Restricted.Stages (depending on the -- supported profile) to make sure that one of these packages