diff options
author | Robert Dewar <dewar@adacore.com> | 2014-05-21 13:26:53 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-05-21 15:26:53 +0200 |
commit | 0688dac82602c0763e0459f07b3cb4cc8f3ecba4 (patch) | |
tree | 1f2c8d0e503e716f8065664c74fc870db490da29 /gcc | |
parent | ee6208f2d5fb8527b4f2504103e7b884f28660dc (diff) | |
download | gcc-0688dac82602c0763e0459f07b3cb4cc8f3ecba4.zip gcc-0688dac82602c0763e0459f07b3cb4cc8f3ecba4.tar.gz gcc-0688dac82602c0763e0459f07b3cb4cc8f3ecba4.tar.bz2 |
layout.adb: Minor reformatting.
2014-05-21 Robert Dewar <dewar@adacore.com>
* layout.adb: Minor reformatting.
* sem_prag.adb (Analyze_Pragma, case Inspection_Point): Call
dummy procedure ip.
2014-05-21 Robert Dewar <dewar@adacore.com>
* restrict.ads (Implementation_Restriction): Add entry for
No_Fixed_IO.
* rtsfind.ads: Add entries for Fixed_IO and Decimal_IO in
Ada.[Wide_[Wide_]Text_IO.
* s-rident.ads (Restriction_Id): Add entry for No_Fixed_IO.
* sem_attr.adb (Analyze_Attribute): Disallow fixed point types
for Img, Image, Value, Wide_Image, Wide_Value, Wide_Wide_Image,
Wide_Wide_Value if restriction No_Fixed_IO is set.
* sem_util.adb (Set_Entity_Checks): Check restriction No_Fixed_IO.
From-SVN: r210710
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 18 | ||||
-rw-r--r-- | gcc/ada/layout.adb | 65 | ||||
-rw-r--r-- | gcc/ada/restrict.ads | 3 | ||||
-rw-r--r-- | gcc/ada/rtsfind.ads | 28 | ||||
-rw-r--r-- | gcc/ada/s-rident.ads | 3 | ||||
-rw-r--r-- | gcc/ada/sem_attr.adb | 58 | ||||
-rw-r--r-- | gcc/ada/sem_prag.adb | 19 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 45 |
8 files changed, 189 insertions, 50 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index c74abd0..547b327 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,23 @@ 2014-05-21 Robert Dewar <dewar@adacore.com> + * layout.adb: Minor reformatting. + * sem_prag.adb (Analyze_Pragma, case Inspection_Point): Call + dummy procedure ip. + +2014-05-21 Robert Dewar <dewar@adacore.com> + + * restrict.ads (Implementation_Restriction): Add entry for + No_Fixed_IO. + * rtsfind.ads: Add entries for Fixed_IO and Decimal_IO in + Ada.[Wide_[Wide_]Text_IO. + * s-rident.ads (Restriction_Id): Add entry for No_Fixed_IO. + * sem_attr.adb (Analyze_Attribute): Disallow fixed point types + for Img, Image, Value, Wide_Image, Wide_Value, Wide_Wide_Image, + Wide_Wide_Value if restriction No_Fixed_IO is set. + * sem_util.adb (Set_Entity_Checks): Check restriction No_Fixed_IO. + +2014-05-21 Robert Dewar <dewar@adacore.com> + * gnatcmd.adb: Minor error msg changes (no upper case letter at start). * sem_ch12.adb, sem_ch5.adb, sem_res.adb, sem_util.adb: Minor diff --git a/gcc/ada/layout.adb b/gcc/ada/layout.adb index fe8ea04..466d1ca 100644 --- a/gcc/ada/layout.adb +++ b/gcc/ada/layout.adb @@ -270,8 +270,7 @@ package body Layout is -- the Integer base type, but it is safe to reduce it to 1 at this -- stage, since we will only be loading a single storage unit. - if Is_Discrete_Type (Etype (E)) - and then not Has_Alignment_Clause (E) + if Is_Discrete_Type (Etype (E)) and then not Has_Alignment_Clause (E) then loop Abits := Abits / 2; @@ -363,13 +362,13 @@ package body Layout is -- (E - C1) + C2 = E - (C1 - C2) - -- If the type is unsigned, then only do the optimization if - -- C1 >= C2, to avoid creating a negative literal that can't be - -- used with the unsigned type. + -- If the type is unsigned then only do the optimization if C1 >= C2, + -- to avoid creating a negative literal that can't be used with the + -- unsigned type. elsif Compile_Time_Known_Value (Sinfo.Right_Opnd (L)) and then (not Is_Unsigned_Type (Etype (Sinfo.Right_Opnd (L))) - or else Expr_Value (Sinfo.Right_Opnd (L)) >= R) + or else Expr_Value (Sinfo.Right_Opnd (L)) >= R) then Rewrite_Integer (Sinfo.Right_Opnd (L), @@ -626,8 +625,8 @@ package body Layout is -- parameter rather than passing "V" directly. if Present (Comp) - and then Base_Type (Etype (Comp)) - = Base_Type (Etype (First_Formal (Ent))) + and then Base_Type (Etype (Comp)) = + Base_Type (Etype (First_Formal (Ent))) then return Make_Function_Call (Loc, @@ -755,7 +754,8 @@ package body Layout is -- Value of the current subscript range is statically known if Compile_Time_Known_Value (Lo) - and then Compile_Time_Known_Value (Hi) + and then + Compile_Time_Known_Value (Hi) then S := Expr_Value (Hi) - Expr_Value (Lo) + 1; @@ -1092,7 +1092,8 @@ package body Layout is -- Value of the current subscript range is statically known if Compile_Time_Known_Value (Lo) - and then Compile_Time_Known_Value (Hi) + and then + Compile_Time_Known_Value (Hi) then S := Expr_Value (Hi) - Expr_Value (Lo) + 1; @@ -1388,9 +1389,7 @@ package body Layout is -- not set by an explicit Object_Size attribute clause, then we reset -- the Esize to unknown, since we really don't know it. - if Unknown_Alignment (E) - and then not Has_Size_Clause (E) - then + if Unknown_Alignment (E) and then not Has_Size_Clause (E) then Set_Esize (E, Uint_0); end if; end Layout_Object; @@ -2512,12 +2511,12 @@ package body Layout is elsif AAMP_On_Target and then ((Ekind (E) = E_Access_Subprogram_Type - and then Present (Enclosing_Subprogram (E))) - or else - (Ekind (E) = E_Anonymous_Access_Subprogram_Type - and then - (not Is_Local_Anonymous_Access (E) - or else Present (Enclosing_Subprogram (E))))) + and then Present (Enclosing_Subprogram (E))) + or else + (Ekind (E) = E_Anonymous_Access_Subprogram_Type + and then + (not Is_Local_Anonymous_Access (E) + or else Present (Enclosing_Subprogram (E))))) then Init_Size (E, 2 * System_Address_Size); else @@ -2541,7 +2540,7 @@ package body Layout is if Opt.True_VMS_Target and then (Convention (E) = Convention_C - or else + or else Convention (E) = Convention_CPP) and then No (Get_Attribute_Definition_Clause (E, Attribute_Size)) and then Esize (E) = 64 @@ -2653,14 +2652,12 @@ package body Layout is -- component type is known and is a small power of 2 (8, 16, 32, 64), -- since this is what will always be used. - if Ekind (E) = E_Array_Type - and then Unknown_Component_Size (E) - then + if Ekind (E) = E_Array_Type and then Unknown_Component_Size (E) then declare CT : constant Entity_Id := Component_Type (E); begin - -- For some reasons, access types can cause trouble, So let's + -- For some reason, access types can cause trouble, So let's -- just do this for scalar types ??? if Present (CT) @@ -2700,9 +2697,7 @@ package body Layout is -- For these types, we set a corresponding alignment matching -- the size if possible, or as large as possible if not. - if Convention (E) = Convention_Ada - and then not Debug_Flag_Q - then + if Convention (E) = Convention_Ada and then not Debug_Flag_Q then Set_Composite_Alignment (E); end if; @@ -2724,9 +2719,7 @@ package body Layout is -- arrays when passed to subprogram parameters (see special test -- in Exp_Ch6.Expand_Actuals). - if not Is_Packed (E) - and then Unknown_Alignment (E) - then + if not Is_Packed (E) and then Unknown_Alignment (E) then if Known_Static_Component_Size (E) and then Component_Size (E) = 1 then @@ -2989,12 +2982,8 @@ package body Layout is if Known_Static_Esize (E) then Siz := Esize (E); - - elsif Unknown_Esize (E) - and then Known_Static_RM_Size (E) - then + elsif Unknown_Esize (E) and then Known_Static_RM_Size (E) then Siz := RM_Size (E); - else return; end if; @@ -3102,7 +3091,7 @@ package body Layout is (Unknown_Esize (Comp) or else (Known_Static_Esize (Comp) and then - Esize (Comp) = + Esize (Comp) = Calign * System_Storage_Unit)) then Align := UI_To_Int (Calign); @@ -3194,9 +3183,7 @@ package body Layout is -- For access types, do not set the alignment if the size is less than -- the allowed minimum size. This avoids cascaded error messages. - elsif Is_Access_Type (E) - and then Esize (E) < System_Address_Size - then + elsif Is_Access_Type (E) and then Esize (E) < System_Address_Size then return; end if; diff --git a/gcc/ada/restrict.ads b/gcc/ada/restrict.ads index cef3167..882cb84 100644 --- a/gcc/ada/restrict.ads +++ b/gcc/ada/restrict.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -120,6 +120,7 @@ package Restrict is No_Exception_Propagation => True, No_Exception_Registration => True, No_Finalization => True, + No_Fixed_IO => True, No_Implementation_Attributes => True, No_Implementation_Pragmas => True, No_Implicit_Conditionals => True, diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads index 5fcfb31..1f50db3 100644 --- a/gcc/ada/rtsfind.ads +++ b/gcc/ada/rtsfind.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -108,8 +108,9 @@ package Rtsfind is -- ambiguities). type RTU_Id is ( - -- Runtime packages, for list of accessible entities in each - -- package see declarations in the runtime entity table below. + + -- Runtime packages, for list of accessible entities in each package, + -- see declarations in the runtime entity table below. RTU_Null, -- Used as a null entry (will cause an error if referenced) @@ -132,6 +133,9 @@ package Rtsfind is Ada_Tags, Ada_Task_Identification, Ada_Task_Termination, + Ada_Text_IO, + Ada_Wide_Text_IO, + Ada_Wide_Wide_Text_IO, -- Children of Ada.Calendar @@ -701,6 +705,15 @@ package Rtsfind is RE_Current_Task, -- Ada.Task_Identification RO_AT_Task_Id, -- Ada.Task_Identification + RE_Decimal_IO, -- Ada.Text_IO + RE_Fixed_IO, -- Ada.Text_IO + + RO_WT_Decimal_IO, -- Ada.Wide_Text_IO + RO_WT_Fixed_IO, -- Ada.Wide_Text_IO + + RO_WW_Decimal_IO, -- Ada.Wide_Wide_Text_IO + RO_WW_Fixed_IO, -- Ada.Wide_Wide_Text_IO + RE_Integer_8, -- Interfaces RE_Integer_16, -- Interfaces RE_Integer_32, -- Interfaces @@ -1973,6 +1986,15 @@ package Rtsfind is RE_Current_Task => Ada_Task_Identification, RO_AT_Task_Id => Ada_Task_Identification, + RE_Decimal_IO => Ada_Text_IO, + RE_Fixed_IO => Ada_Text_IO, + + RO_WT_Decimal_IO => Ada_Wide_Text_IO, + RO_WT_Fixed_IO => Ada_Wide_Text_IO, + + RO_WW_Decimal_IO => Ada_Wide_Wide_Text_IO, + RO_WW_Fixed_IO => Ada_Wide_Wide_Text_IO, + RE_Integer_8 => Interfaces, RE_Integer_16 => Interfaces, RE_Integer_32 => Interfaces, diff --git a/gcc/ada/s-rident.ads b/gcc/ada/s-rident.ads index a7334c8..4f22a19 100644 --- a/gcc/ada/s-rident.ads +++ b/gcc/ada/s-rident.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -112,6 +112,7 @@ package System.Rident is No_Exception_Registration, -- GNAT No_Exceptions, -- (RM H.4(12)) No_Finalization, -- GNAT + No_Fixed_IO, -- GNAT No_Fixed_Point, -- (RM H.4(15)) No_Floating_Point, -- (RM H.4(14)) No_IO, -- (RM H.4(20)) diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 7ca8c22..968ba00 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -3627,6 +3627,16 @@ package body Sem_Attr is Resolve (E1, P_Base_Type); Check_Enum_Image; Validate_Non_Static_Attribute_Function_Call; + + -- Check restriction No_Fixed_IO. Note the check of Comes_From_Source + -- to avoid giving a duplicate message for Img expanded into Image. + + if Restriction_Check_Required (No_Fixed_IO) + and then Comes_From_Source (N) + and then Is_Fixed_Point_Type (P_Type) + then + Check_Restriction (No_Fixed_IO, P); + end if; end Image; --------- @@ -3646,6 +3656,14 @@ package body Sem_Attr is end if; Check_Enum_Image; + + -- Check restriction No_Fixed_IO + + if Restriction_Check_Required (No_Fixed_IO) + and then Is_Fixed_Point_Type (P_Type) + then + Check_Restriction (No_Fixed_IO, P); + end if; end Img; ----------- @@ -6458,6 +6476,14 @@ package body Sem_Attr is Set_Etype (N, P_Base_Type); Validate_Non_Static_Attribute_Function_Call; + + -- Check restriction No_Fixed_IO + + if Restriction_Check_Required (No_Fixed_IO) + and then Is_Fixed_Point_Type (P_Type) + then + Check_Restriction (No_Fixed_IO, P); + end if; end Value; ---------------- @@ -6498,6 +6524,14 @@ package body Sem_Attr is Check_E1; Resolve (E1, P_Base_Type); Validate_Non_Static_Attribute_Function_Call; + + -- Check restriction No_Fixed_IO + + if Restriction_Check_Required (No_Fixed_IO) + and then Is_Fixed_Point_Type (P_Type) + then + Check_Restriction (No_Fixed_IO, P); + end if; end Wide_Image; --------------------- @@ -6511,6 +6545,14 @@ package body Sem_Attr is Check_E1; Resolve (E1, P_Base_Type); Validate_Non_Static_Attribute_Function_Call; + + -- Check restriction No_Fixed_IO + + if Restriction_Check_Required (No_Fixed_IO) + and then Is_Fixed_Point_Type (P_Type) + then + Check_Restriction (No_Fixed_IO, P); + end if; end Wide_Wide_Image; ---------------- @@ -6528,6 +6570,14 @@ package body Sem_Attr is Set_Etype (N, P_Type); Validate_Non_Static_Attribute_Function_Call; + + -- Check restriction No_Fixed_IO + + if Restriction_Check_Required (No_Fixed_IO) + and then Is_Fixed_Point_Type (P_Type) + then + Check_Restriction (No_Fixed_IO, P); + end if; end Wide_Value; --------------------- @@ -6544,6 +6594,14 @@ package body Sem_Attr is Set_Etype (N, P_Type); Validate_Non_Static_Attribute_Function_Call; + + -- Check restriction No_Fixed_IO + + if Restriction_Check_Required (No_Fixed_IO) + and then Is_Fixed_Point_Type (P_Type) + then + Check_Restriction (No_Fixed_IO, P); + end if; end Wide_Wide_Value; --------------------- diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 62caba6..3060720 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -15327,7 +15327,26 @@ package body Sem_Prag is Arg : Node_Id; Exp : Node_Id; + procedure ip; + -- A dummy procedure called when pragma Inspection_Point is + -- analyzed. This is just to help debugging the front end. If + -- a pragma Inspection_Point is added to a source program, then + -- breaking on ip will get you to that point in the program. + + -------- + -- ip -- + -------- + + procedure ip is + begin + null; + end ip; + + -- Start of processing for Inspection_Point + begin + ip; + if Arg_Count > 0 then Arg := Arg1; loop diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 84570fb..afb62c1 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -15867,12 +15867,6 @@ package body Sem_Util is Set_Entity (N, Val); - -- Remaining checks are only done on source nodes - - if not Comes_From_Source (N) then - return; - end if; - -- The node to post on is the selector in the case of an expanded name, -- and otherwise the node itself. @@ -15882,6 +15876,44 @@ package body Sem_Util is Post_Node := N; end if; + -- Check for violation of No_Fixed_IO + + if Restriction_Check_Required (No_Fixed_IO) + and then + ((RTU_Loaded (Ada_Text_IO) + and then (Is_RTE (Val, RE_Decimal_IO) + or else + Is_RTE (Val, RE_Fixed_IO))) + + or else + (RTU_Loaded (Ada_Wide_Text_IO) + and then (Is_RTE (Val, RO_WT_Decimal_IO) + or else + Is_RTE (Val, RO_WT_Fixed_IO))) + + or else + (RTU_Loaded (Ada_Wide_Wide_Text_IO) + and then (Is_RTE (Val, RO_WW_Decimal_IO) + or else + Is_RTE (Val, RO_WW_Fixed_IO)))) + + -- A special extra check, don't complain about a reference from within + -- the Ada.Interrupts package itself! + + and then not In_Same_Extended_Unit (N, Val) + then + Check_Restriction (No_Fixed_IO, Post_Node); + end if; + + -- Remaining checks are only done on source nodes. Note that we test + -- for violation of No_Fixed_IO even on non-source nodes, because the + -- cases for checking violations of this restriction are instantiations + -- where the refernece in the instance has Comes_From_Source False. + + if not Comes_From_Source (N) then + return; + end if; + -- Check for violation of No_Abort_Statements, which is triggered by -- call to Ada.Task_Identification.Abort_Task. @@ -15907,6 +15939,7 @@ package body Sem_Util is Is_RTE (Val, RE_Exchange_Handler) or else Is_RTE (Val, RE_Detach_Handler) or else Is_RTE (Val, RE_Reference)) + -- A special extra check, don't complain about a reference from within -- the Ada.Interrupts package itself! |