diff options
author | Ian Lance Taylor <iant@golang.org> | 2021-02-02 12:42:10 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2021-02-02 12:42:10 -0800 |
commit | 8910f1cd79445bbe2da01f8ccf7c37909349529e (patch) | |
tree | ba67a346969358fd7cc2b7c12384479de8364cab /gcc/ada | |
parent | 45c32be1f96ace25b66c34a84818dc5e07e9d516 (diff) | |
parent | 8e4a738d2540ab6aff77506d368bf4e3fa6963bd (diff) | |
download | gcc-8910f1cd79445bbe2da01f8ccf7c37909349529e.zip gcc-8910f1cd79445bbe2da01f8ccf7c37909349529e.tar.gz gcc-8910f1cd79445bbe2da01f8ccf7c37909349529e.tar.bz2 |
Merge from trunk revision 8e4a738d2540ab6aff77506d368bf4e3fa6963bd.
Diffstat (limited to 'gcc/ada')
262 files changed, 20508 insertions, 17152 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 5631a01..75f75ec 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,12680 +1,44 @@ -2020-11-30 Pierre-Marie de Rodat <derodat@adacore.com> +2021-01-26 Marius Hillenbrand <mhillen@linux.ibm.com> - * libgnat/s-trasym.ads: Update the list of supported platforms. + PR ada/98228 + * gcc-interface/utils.c (maybe_pad_type): Test the size of the new + packable type instead of its alignment for addressability's sake. -2020-11-30 Arnaud Charlet <charlet@adacore.com> +2021-01-25 Eric Botcazou <ebotcazou@adacore.com> - * gcc-interface/Makefile.in, gcc-interface/trans.c: Remove ^L - characters. + * gcc-interface/trans.c (make_covariant_thunk): Set the DECL_CONTEXT + of the parameters and do not set TREE_PUBLIC on the thunk. + (maybe_make_gnu_thunk): Pass the alias to the covariant thunk. + * gcc-interface/utils.c (finish_subprog_decl): Set the DECL_CONTEXT + of the parameters here... + (begin_subprog_body): ...instead of here. -2020-11-30 Arnaud Charlet <charlet@adacore.com> +2021-01-19 Eric Botcazou <ebotcazou@adacore.com> - * gcc-interface/Makefile.in (GNATLIBFLAGS): Enable checks by - default. - * libgnat/s-bitfie.ads: Suppress alignment checks. - * libgnat/s-bituti.adb: Minor reformatting. - * libgnat/s-secsta.adb (SS_Allocate): Support Size = 0. + PR ada/98740 + * gcc-interface/trans.c (add_decl_expr): Always mark TYPE_ADA_SIZE. -2020-11-30 Arnaud Charlet <charlet@adacore.com> +2021-01-14 Sebastian Huber <sebastian.huber@embedded-brains.de> - * exp_ch3.adb (Replace_Discr_Ref): Removed, no longer needed. + PR ada/98595 + * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <riscv*-*-rtems*>: Use + wraplf version of Aux_Long_Long_Float. -2020-11-30 Piotr Trojanek <trojanek@adacore.com> +2021-01-03 Eric Botcazou <ebotcazou@adacore.com> - * sem_ch5.adb (Process_Statements): Replace low-level membership - test with a high-level wrapper. - -2020-11-30 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch5.adb (Set_Assignment_Type): Combine calls to Ekind - using membership test. - (Should_Transform_BIP_Assignment): Replace assignment to a - "Result" variable with simple return statements; avoid repeated - calls to Unqual_Conv by declaring a local constant. - -2020-11-30 Piotr Trojanek <trojanek@adacore.com> - - * lib-xref.adb (Generate_Reference): Fix reference to - Analyze_Assignment. - * sem_ch5.adb (Diagnose_Non_Variable_Lhs): Reuse existing - utility function. - -2020-11-30 Eric Botcazou <ebotcazou@adacore.com> - - * contracts.adb (Check_Type_Or_Object_External_Properties): Make - sure to exclude all return objects from the SPARK legality rule - on effectively volatile variables. - * exp_ch6.adb (Expand_N_Extended_Return_Statement): Use the fast - track only when the declaration of the return object can be - dropped. - -2020-11-30 Gary Dismukes <dismukes@adacore.com> - - * einfo.ads (Is_Partial_DIC_Procedure): New function. - (Partial_DIC_Procedure): New procedure. - * einfo.adb (Is_Partial_DIC_Procedure): New function to return - whether a subprogram is a partial Default_Initial_Condition - procedure by checking the name (to avoid adding a new field). - (DIC_Procedure): Add a test that excludes partial DIC procedures - from being returned. - (Partial_DIC_Procedure): New procedure to return the partial DIC - procedure of a type, if it has one (otherwise returns Empty). - (Set_DIC_Procedure): Remove check for duplicate DIC procedures. - * exp_aggr.adb (Gen_Assign): Generate a call to the type's DIC - procedure in the case where an array component is default - initialized (due to an association with a box). - (Build_Record_Aggr_Code): For an extension aggregate, generate a - call to the ancestor type's DIC procedure (if any) when the - ancestor part is a subtype mark. For a record component - association that was specified with a box (tested for by - checking the new flag Was_Default_Init_Box_Association), - generate a call to the component type's DIC procedure (if it has - one). - * exp_ch4.adb (Expand_N_Allocator): When the allocated object is - default initialized and the designated type has a DIC aspect, - generate a call to the DIC procedure. - * exp_util.ads (Build_DIC_Call): Change the formal Obj_Id to - name Obj_Name, and change its type from Entity_Id to Node_Id - (and update comment). - (Build_DIC_Procedure_Body): Add formal Partial_DIC, remove - formal For_Freeze, and update comment accordingly. - (Build_DIC_Procedure_Declaration): Add formal Partial_DIC and - update comment. - * exp_util.adb - (Build_DIC_Call): Revised to use its Obj_Name (formerly Obj_Id) - formal directly rather than calling New_Occurrence_Of on it, to - allow arbitrary names to be passed rather than being limited to - Entity_Ids. - (Build_DIC_Procedure_Body): Call Add_Parent_DICs to generate - checks for DICs associated with any parent types, implementing - the required "additive" semantics for DICs. When building a DIC - procedure body for a partial view (when Partial_DIC is True), - call Add_Own_DIC when the type has its own DIC. In the case of - "full" DIC procedures, a call is generated to any partial DIC - procedure of the type (unless the procedure has a null body), - along with checks for any DICs inherited by the full view. - (Build_DIC_Procedure_Declaration): Add handling for partial DIC - procedures. For the suffix of a regular DIC procedure's name, - use "DIC" (instead of "Default_Initial_Condition"), and for the - suffix of a partial DIC procedure's name, use "Partial_DIC". - (Add_DIC_Check): Add the DIC pragma to the list of seen pragmas - (Pragmas_Seen). - (Add_Inherited_Tagged_DIC): Remove the formals Par_Typ, - Deriv_Typ, and Obj_Id, and add formal Expr, which denotes DIC's - expression. Remove the call to Replace_References (which is now - done in Add_Inherited_DICs). - (Add_Inherited_DICs): New procedure to locate a DIC pragma - associated with a parent type, replace its references - appropriately (such as any current instance references), and add - a check for the DIC. - (Add_Own_DIC): Add an Obj_Id formal to allow caller to pass the - _init formal of the generated DIC procedure. - (Add_Parent_DICs): New procedure to traverse a type's parents, - looking for DICs associated with those and calling - Add_Inherited_DICs to apply the appropriate DIC checks. - (Is_Verifiable_DIC_Pragma): Treat pragmas that have an Empty - first argument the same as a pragma without any arguments - (returning False for that case). - * exp_ch3.adb (Init_One_Dimension): Generate calls to the - component's DIC procedure when needed. - (Possible_DIC_Call): New function nested in Init_One_Dimension - to build a call to the array component type's DIC-checking - function when appropriate. - (Build_Array_Init_Proc): The presence of a DIC on the component - type is an additional condition for generating an init proc for - an array type. - (Build_Init_Statements): When the record component's type has a - DIC, and the component declaration does not have an - initialization expression, generate a call to the component - type's DIC procedure. - (Expand_N_Object_Declaration): Modify the call to Build_DIC_Call - to pass a new occurrence of the object's defining id rather than - the id itself. - (Freeze_Type): Only build a type's DIC procedure (if it has one) - for types that are not interfaces. - * exp_spark.adb (Expand_SPARK_N_Freeze_Type): Remove From_Freeze - actual and add a ??? comment. - (Expand_SPARK_N_Object_Declaration): Modify call to - Build_DIC_Call to pass a new occurrence of the object id rather - than the object id itself. - * sem_aggr.adb (Resolve_Record_Aggregate): Declare local flag - Is_Box_Init_By_Default and set it in cases where the component - association has a box and the component is being initialized by - default (as opposed to initialized by an initialization - expression associated with the component's declaration). - (Add_Association): If the association has a box for a component - initialized by default, the flag - Was_Default_Init_Box_Association is set on the new component - association (for later testing during expansion). - (Get_Value): Reset Is_Box_Init_By_Default to False. - * sem_ch3.adb (Build_Assertion_Bodies_For_Type): Rearrange code - to build DIC procedure bodies for a (noninterface) type that - Has_Own_DIC (for partial type views) or Has_DIC (for full type - views) as appropriate. - * sem_ch13.adb (Analyze_Aspect_Specifications, - Aspect_Default_Initial_Condition): Add an extra argument to the - DIC pragma to denote the type associated with the pragma (for - use in Build_DIC_Procedure_Body). - * sem_prag.adb (Analyze_Pragma): Allow two arguments for pragma - Default_Initial_Condition. If not already present, add an extra - argument denoting the type that the pragma is associated with. - * sem_util.adb (Propagate_DIC_Attributes): Retrieve any partial - DIC procedure associated with the type and add it to the type's - list of subprograms (Subprograms_For_Type). - * sinfo.ads (Was_Default_Init_Box_Association): New flag on - N_Component_Association nodes. Add subprograms to get and set - flag, as well as updating the documentation. - * sinfo.adb (Was_Default_Init_Box_Association): New function to - retrieve the corresponding flag (Flag14). - (Set_Was_Default_Init_Box_Association): New procedure to set the - corresponding flag (Flag14). - -2020-11-30 Arnaud Charlet <charlet@adacore.com> - - * par-ch6.adb (P_Formal_Part): Remove extra call to Scan. - * par-tchk.adb: Minor reformatting. - -2020-11-30 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-nbnbre.adb (Float_Conversions): Instantiate Conv - package only once in the body. - (Fixed_Conversions.Float_Aux): New instance. - (Fixed_Conversions.Conv_I): Likewise. - (Fixed_Conversions.Conv_U): Likewise. - (Fixed_Conversions.LLLI): New subtype. - (Fixed_Conversions.LLLU): Likewise. - (Fixed_Conversions.Too_Large): New constant. - (Fixed_Conversions.To_Big_Real): Reimplement. - (Fixed_Conversions.From_Big_Real): Likewise. - -2020-11-30 Bob Duff <duff@adacore.com> - - * exp_ch3.adb (Expand_N_Object_Declaration): Avoid crash in case - of conditional expression. - -2020-11-30 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_defined_attributes.rst (Pool_Address): - Fix pasto. - (Small_Denominator): New entry. - (Small_Numerator): Likewise. - * doc/gnat_rm/implementation_defined_characteristics.rst (3.5.9): - Relax conditions on 128-bit smalls and integer-only implementation. - * gnat_rm.texi: Regenerate. - * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Fore>: - Relax conditions on integer implementation for ordinary fixed-point - types and pass a third parameter to the routine. - <Attribute_Small_Denominator>: Raise Program_Error. - <Attribute_Small_Numerator>: Likewise. - * exp_fixd.adb (Expand_Convert_Fixed_To_Fixed): Use a scaled divide - if the numerator and denominator of the small ratio are sufficiently - small integers. - (Expand_Convert_Fixed_To_Integer): Use a scaled divide if numerator - and denominator of the small value are sufficiently small integers. - (Expand_Convert_Integer_To_Fixed): Likewise. - * exp_imgv.adb (Expand_Image_Attribute): Relax the conditions on the - integer implementation for ordinary fixed-point types. - (Expand_Value_Attribute): Likewise. - * freeze.adb (Freeze_Fixed_Point_Type): Relax conditions on 128-bit - smalls. - * sem_attr.adb (Analyze_Attribute) <Attribute_Small_Denominator>: - Check no arguments, fixed-point and set type to Universal_Integer. - <Attribute_Small_Numerator>: Likewise. - (Eval_Attribute) <Attribute_Small_Denominator>: Fold statically. - <Attribute_Small_Numerator>: Likewise. - * snames.ads-tmpl (Name_Small_Denominator): New attribute name. - (Name_Small_Numerator): Likewise. - (Attribute_Id): Add Attribute_Small_{Denominator,Numerator}. - * libgnat/a-tifiio.adb (Exact): Delete. - (Need_64): Likewise. - (OK_Get_32): New boolean constant. - (OK_Put_32): Likewise. - (OK_Get_64): Likewise. - (OK_Put_64): Likewise. - (E): Adjust. - (Get procedures): Likewise. - (Put procedures): Likewise. - * libgnat/a-tifiio__128.adb (Exact): Delete. - (Need_64): Likewise. - (Need_128): Likewise. - (OK_Get_32): New boolean constant. - (OK_Put_32): Likewise. - (OK_Get_64): Likewise. - (OK_Put_64): Likewise. - (OK_Get_128): Likewise. - (OK_Put_128): Likewise. - (E): Adjust. - (Get procedures): Likewise. - (Put procedures): Likewise. - * libgnat/a-wtfiio.adb (Exact): Delete. - (Need_64): Likewise. - (OK_Get_32): New boolean constant. - (OK_Put_32): Likewise. - (OK_Get_64): Likewise. - (OK_Put_64): Likewise. - (E): Adjust. - (Get procedures): Likewise. - (Put procedures): Likewise. - * libgnat/a-wtfiio__128.adb (Exact): Delete. - (Need_64): Likewise. - (Need_128): Likewise. - (OK_Get_32): New boolean constant. - (OK_Put_32): Likewise. - (OK_Get_64): Likewise. - (OK_Put_64): Likewise. - (OK_Get_128): Likewise. - (OK_Put_128): Likewise. - (E): Adjust. - (Get procedures): Likewise. - (Put procedures): Likewise. - * libgnat/a-ztfiio.adb (Exact): Delete. - (Need_64): Likewise. - (OK_Get_32): New boolean constant. - (OK_Put_32): Likewise. - (OK_Get_64): Likewise. - (OK_Put_64): Likewise. - (E): Adjust. - (Get procedures): Likewise. - (Put procedures): Likewise. - * libgnat/a-ztfiio__128.adb (Exact): Delete. - (Need_64): Likewise. - (Need_128): Likewise. - (OK_Get_32): New boolean constant. - (OK_Put_32): Likewise. - (OK_Get_64): Likewise. - (OK_Put_64): Likewise. - (OK_Get_128): Likewise. - (OK_Put_128): Likewise. - (E): Adjust. - (Get procedures): Likewise. - (Put procedures): Likewise. - * libgnat/s-fore_f.ads (Fore_Fixed): Adjust signature. - * libgnat/s-fore_f.adb (Fore_Fixed): Reimplement. - * libgnat/s-fofi32.ads (Fore_Fixed32): Adjust signature. - * libgnat/s-fofi64.ads (Fore_Fixed64): Likewise. - * libgnat/s-fofi128.ads (Fore_Fixed128): Likewise. - * libgnat/s-imagef.ads: Adjust description. - * libgnat/s-imagef.adb (Maxdigs): Move around. - (Set_Image_Integer): Remove assertion. - * libgnat/s-valuef.ads: Adjust description. - * libgnat/s-valuef.adb (Integer_To_Fixed): Minor tweak. - -2020-11-30 Ghjuvan Lacambre <lacambre@adacore.com> - - * doc/gnat_ugn/building_executable_programs_with_gnat.rst: - Describe -gnateb switch. - * doc/gnat_ugn/the_gnat_compilation_model.rst: Mention -gnateb - switch in configuration pragma files section. - * gnat_ugn.texi: Regenerate. - * lib-writ.adb (Write_ALI): Strip directories from configuration - files path if needed. - * opt.ads: Declare Config_Files_Store_Basename option. - * par.adb (Par): Save configuration file checksum. - * switch-c.adb (Scan_Front_End_Switches): Set - Config_Files_Store_Basename true if -gnateb is present. - -2020-11-30 Arnaud Charlet <charlet@adacore.com> - - * exp_dist.adb (RCI_Cache): Initialize. - -2020-11-30 Arnaud Charlet <charlet@adacore.com> - - * terminals.c (allocate_pty_desc): Copy one less byte since the - last byte will always be set to 0. - -2020-11-30 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_ugn/building_executable_programs_with_gnat.rst (-xdr): - Document that XDR is not supported for 128-bit integer types. - * gnat_ugn.texi: Regenerate. - * exp_strm.adb (Build_Elementary_Input_Call): Deal with types - larger than Long_Long_Integer. - (Build_Elementary_Write_Call): Likewise. - * rtsfind.ads (RE_Id): Add RE_I_LLL{I,U] and RE_W_LLL{I,U}. - (RE_Unit_Table): Add entries for them. - * libgnat/s-stratt.ads (I_LLLI): New inline function. - (I_LLLU): Likewise. - (W_LLLI): New inline procedure. - (W_LLLU): Likewise. - * libgnat/s-stratt.adb (S_LLLI): New subtype of SEA. - (S_LLLU): Likewise. - (From_LLLI): New instance of Unchecked_Conversion. - (From_LLLU): Likewise. - (To_LLLI): Likewise. - (To_LLLU): Likewise. - (I_LLLI): Implement. - (I_LLLU): Likewise. - (W_LLLI): Likewise. - (W_LLLU): Likewise. - -2020-11-30 Ed Schonberg <schonberg@adacore.com> - - * exp_ch5.adb (Expand_Iterator_Loop_Over_Container): Check the - signature of the private operation Get_Element_Access to prevent - accidental use of a user-defined homonym subprogram. - -2020-11-30 Yannick Moy <moy@adacore.com> - - * spark_xrefs.ads: Add comment for Heap that it may remain - Empty. - -2020-11-30 Pascal Obry <obry@adacore.com> - - * libgnat/g-sercom__linux.adb (Set): Fix control flags of the - serial port setting. - -2020-11-30 Pascal Obry <obry@adacore.com> - - * libgnat/g-sercom__linux.adb: Minor style fixes. - -2020-11-30 Piotr Trojanek <trojanek@adacore.com> - - * exp_util.adb (Get_Current_Value_Condition): Don't use current - value tracking in GNATprove mode. - * sem_res.adb (Resolve_Comparison_Op): Remove incomplete - special-casing for folding in GNATprove mode. - -2020-11-30 Bob Duff <duff@adacore.com> - - * errout.adb (Error_Msg_NEL): Do not call Set_Posted if errors - are being ignored. - (Error_Msg): Change Errors_Must_Be_Ignored to use the getter. - * sem_ch8.adb (Find_Direct_Name): Do not skip all the error - checks when ignoring errors, but instead do not add an entry to - the Urefs table if errors are being ignored. - * exp_ch5.adb: Minor comment fix. - -2020-11-30 Yannick Moy <moy@adacore.com> - - * sem_aggr.adb (Resolve_Array_Aggregate): Improve error message. - -2020-11-30 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/s-valuef.adb (Integer_To_Fixed): Do not modify numerator - or denominator in order to reduce the exponent. - -2020-11-30 Arnaud Charlet <charlet@adacore.com> - - * ali-util.adb (Get_File_Checksum): Remove dead code. - * exp_ch4.adb (Expand_Boolean_Operator, Expand_N_Op_Not, - Make_Boolean_Array_Op): Take Transform_Function_Array into - account. - * exp_ch6.adb (Expand_Call_Helper): Update comment. Code - cleanup. - * exp_util.adb (Build_Procedure_Form): Use new predefined name - Name_UP_RESULT. - * snames.ads-tmpl (Name_UP_RESULT): New predefined name. Code - cleanup: remove unused names from the project parser, moved to - gprbuild sources. - * xsnamest.adb: Add support for uppercase names. - -2020-11-30 Ed Schonberg <schonberg@adacore.com> - - * sem_util.adb (Enter_Name): When an inherited operation for a - local derived type is hidden by an explicit declaration of a - non-overloadable entity in the same scope, make the inherited - operation non-visible to prevent its accidental use elsewhere. - -2020-11-29 John David Anglin <danglin@gcc.gnu.org> - - PR ada/97504 - * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <hppa*-*-hpux*>: Use wraplf - version of Aux_Long_Long_Float. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/s-valuef.adb (Integer_To_Fixed): Take into account the - extra digit when scaling up the input. - * libgnat/s-valuer.adb (Scan_Decimal_Digits): Restrict previous - change to fixed-point types. - (Scan_Integral_Digits): Likewise. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * sem_res.adb (Parent_Is_Boolean): Simplify. - (Resolve_Op_Not): Reduce scope of a local variable. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * cstand.adb: Simplify with Append_New_Elmt. - * sem_util.adb: Likewise. - -2020-11-27 Arnaud Charlet <charlet@adacore.com> - - * sem_eval.adb (Fold_Shift): Fix evaluation of Shift_Right on - negative values. - -2020-11-27 Arnaud Charlet <charlet@adacore.com> - - * exp_ch6.adb (Expand_Call): Properly split - Transform_Function_Array and Modify_Tree_For_C. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * sem_eval.ads (Compile_Time_Compare): Restore parameter Diff to - be of an access type. - * sem_eval.adb (Compile_Time_Compare): Adapt body and callers. - * sem_attr.adb (Eval_Attribute): Adapt callers. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/s-valuer.adb (Scan_Decimal_Digits): Round Extra. - (Scan_Integral_Digits): Likewise. - -2020-11-27 Yannick Moy <moy@adacore.com> - - * checks.adb (Selected_Range_Checks): Adapt the condition for - applying range checks so that it is not done inside generics. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * exp_fixd.adb (Build_Double_Divide): Only use a 128-bit - division if one of the operands is larger than 64 bits. - (Build_Double_Divide_Code): Likewise. - (Build_Scaled_Divide): Likewise. - (Build_Scaled_Divide_Code): Likewise. - -2020-11-27 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-os_lib.adb (To_GM_Time): Return valid and consistent - values for Invalid_Time. - -2020-11-27 Steve Baird <baird@adacore.com> - - * snames.ads-tmpl: Define new Name_Stable_Properties Name_Id - value. - * aspects.ads, aspects.adb: Add new Aspect_Stable_Properties - enumeration literal to Aspect_Id type. Add Class_Present - parameter to Find_Aspect and related - functions (Find_Value_Of_Aspect and Has_Aspect). - * sem_util.adb (Has_Nontrivial_Precondition): Fix - previously-latent bug uncovered by adding Class_Present - parameter to Aspect.Find_Aspect. The code was wrong before, but - with the change the bug was more likely to make a user-visible - difference. - * sem_ch6.adb (Analyze_Operator_Symbol): If a string literal - like "abs" or "-" occurs in a Stable_Properties aspect - specification, then it is to be interpreted as an operator - symbol and not as a string literal. - * sem_ch13.ads: Export new Parse_Aspect_Stable_Properties - function, analogous to the existing Parse_Aspect_Aggregate - exported procedure. - * sem_ch13.adb: (Parse_Aspect_Stable_Properties): New function; - analogous to existing Parse_Aspect_Aggregate. - (Validate_Aspect_Stable_Properties): New procedure; analogous to - existing Validate_Aspect_Aggregate. Called from the same case - statement (casing on an Aspect_Id value) where - Validate_Aspect_Aggregate is called. - (Resolve_Aspect_Stable_Properties): New procedure; analogous to - existing Resolve_Aspect_Aggregate. Called from the same two case - statements (each casing on an Aspect_Id value) where - Resolve_Aspect_Aggregate is called. - (Analyze_Aspect_Specifications): Set Has_Delayed_Aspects and - Is_Delayed_Aspect attributes for Aspect_Stable_Properties aspect - specifications. - (Check_Aspect_At_End_Of_Declarations): The syntactic - "expression" for a Stable_Properties aspect specification is not - semantically an expression; it doesn't have a type. Thus, force - T to be empty in this case. - * contracts.adb (Expand_Subprogram_Contract): Add call to new - local procedure, - Expand_Subprogram_Contract.Add_Stable_Property_Contracts, which - generates Postcondition pragmas corresponding to stable property - checks. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_rm/implementation_defined_pragmas.rst: - (Assertion_Policy): Move "Default_Initial_Condition" from - ID_ASSERTION_KIND to RM_ASSERTION_KIND section. - * gnat_rm.texi: Regenerate. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_rm/implementation_defined_pragmas.rst - (Assertion_Policy): Add "Default_Initial_Condition", - "Initial_Condition" and "Subprogram_Variant". - * gnat_rm.texi: Regenerate. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Is_Valid_Assertion_Kind): Return False on - "Assertion_Policy" - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * make.adb (GNAT_Flag): Change to "-gnatg". - (Compile): Adjust comments accordingly. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch4.adb (Rewrite_Comparison): Add assertion to confirm - that evaluation folds comparisons with static operands; when - folding comparison with non-static operands, the resulting - literal is non-static. - * sem_eval.adb (Eval_Relational_Op): Refactor nested IF - statement for the special case in the THEN branch; move code for - the "general case" out of the ELSE branch. - * sem_res.adb (Resolve_Comparison_Op): Only apply a dubious - special-case for GNATprove in the GNATprove_Mode. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * sem_eval.ads (Compile_Time_Compare): Change parameter Diff - from access to mode out. - * sem_eval.adb (Compile_Time_Compare): Adapt body and callers. - * sem_attr.adb (Eval_Attribute): Adapt callers. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_N_Op_Multiply): Move down block calling - Narrow_Large_Operation if the type is Universal_Integer. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-nbnbre.adb: Remove clauses for System.Img_Real and - add them for System.Unsigned_Types. - (Float_Conversions.To_Big_Real): Reimplement. - (Float_Conversions.From_Big_Real): Likewise. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * checks.ads (Determine_Range_To_Discrete): New procedure. - * checks.adb (Apply_Scalar_Range_Check): Call it to determine - a range for the expression when the target type is discrete. - And also apply the tests for discrete types to fixed-point - types when they are treated as integers. - (Apply_Type_Conversion_Checks): Apply checks to conversions - involving fixed-point types when they are treated as integers. - (Determine_Range) <N_Type_Conversion>: Factor out code into... - (Determine_Range_To_Discrete): ...this new procedure and add - support for fixed-point types when they are treated as integers. - * einfo.ads (Type_High_Bound): Remove obsolete sentence. - (Type_Low_Bound): Likewise. - * exp_ch4.adb (Discrete_Range_Check): Remove obsolete code. - (Real_Range_Check): Likewise. - (Expand_N_Type_Conversion): In case of a no-op conversion, clear - the Do_Range_Check flag on the operand before substituting it. - Remove calls to Real_Range_Check and Discrete_Range_Check that - are not guarded by the Do_Range_Check flag, and an assertion. - * sem_res.adb (Resolve_Type_Conversion): Always apply range - checks in GNATprove mode; in normal mode, use the updated type - of the operand in the test against Universal_Fixed. Remove - obsolete code setting the Do_Range_Check flag at the end. - -2020-11-27 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Analyze_Pragma): Change "Ref Manual" to RM; - replace uses of an unnecessary "Ok" variable with RETURN - statements; replace nested IF with ELSIF. - -2020-11-27 Arnaud Charlet <charlet@adacore.com> - - * libgnarl/s-tasren.adb (Local_Complete_Rendezvous): Always call - Defer_Abort. - * libgnat/a-except.adb: Abort does not need to be deferred. - * libgnarl/s-tpobop.adb (Exceptional_Complete_Entry_Body): Abort - never needs to be undeferred here. - * exp_ch11.adb (Expand_Exception_Handlers): Remove difference - between ZCX and SJLJ. - * exp_ch9.adb (Expand_N_Asynchronous_Select): Remove different - handling for sjlj. - * exp_sel.ads, exp_sel.adb (Build_Abort_Block, - Build_Abort_Block_Handler): Ditto. - -2020-11-27 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_prag.adb (Analyze_Pragma): declare new Check_No_Return - function and call it. - -2020-11-27 Arnaud Charlet <charlet@adacore.com> - - * sem_ch12.adb (Instantiate_Object): Consistently use - New_Copy_Tree instead of New_Copy. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * exp_fixd.adb (Build_Conversion): Adjust head comment. - (Build_Divide): Likewise. - (Build_Double_Divide): Likewise. - (Build_Multiply): Likewise. - (Build_Rem): Likewise. - (Build_Scaled_Divide): Likewise. - -2020-11-27 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-genbig.ads, libgnat/s-genbig.adb (To_Bignum): New - variant taking an Unsigned_128. - * libgnat/a-nbnbin.adb (To_Big_Integer): Add support for 128 - bits signed and unsigned types. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/s-imagef.adb (Set_Image_Fixed): Pass the full value - of the quotient to Set_Image_Integer during the first round and - adjust the handling of the minus sign. - -2020-11-27 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbre.adb ("=", "<"): Fix. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/s-valuer.adb (Scan_Raw_Real): Move pragma Annotate around - and adjust its parameters. - -2020-11-27 Eric Botcazou <ebotcazou@adacore.com> - - * exp_fixd.adb (Build_Double_Divide): Use the RM size of types and - a more precise estimate for the size of the denominator. - (Build_Double_Divide_Code): Likewise. - (Build_Multiply): Use a more precise estimate for the size of the - result. - (Build_Scaled_Divide): Use the RM size of types and a more precise - estimate for the size of the numerator. - (Build_Scaled_Divide_Code): Likewise. - -2020-11-26 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - * Makefile.rtl <sparc*-sun-solaris*> (THREADSLIB): Remove. - (MISCLIB): Remove -lposix4. - <*86-*-solaris2*>: Likewise. - * libgnarl/s-osinte__solaris.ads (System.OS_Interface): Remove - -lposix4 -lthread. - -2020-11-26 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbre.adb (To_Big_Real): Do not loose precision. - -2020-11-26 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Analyze_Object_Renaming): Check for AI12-0401. - -2020-11-26 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Likewise. - (GNATRTL_128BIT_OBJS): Likewise. - (GNATRTL_128BIT_PAIRS): Add new 128-bit variants. - * cstand.adb (Create_Standard): Create Standard_Integer_128. - * doc/gnat_rm/implementation_defined_characteristics.rst: Document - new limits on 64-bit platforms in entry for 3.5.9(10). - * gnat_rm.texi: Regenerate. - * exp_attr.adb: Add with and use clauses for Urealp. - (Expand_N_Attribute_Reference) <Attribute_Fore>: Call new routines - for decimal fixed-point types and common ordinary fixed-point types. - * exp_ch4.adb (Real_Range_Check): Extend conversion trick to all - ordinary fixed-point types and use Small_Integer_Type_For. - * exp_fixd.adb: Add with and use clauses for Ttypes. - (Build_Divide): Add special case for 32-bit values and deal with - 128-bit types. - (Build_Double_Divide): Deal with 128-bit types. - (Build_Double_Divide_Code): Likewise. Do not apply conversions - before calling Build_Multiply. - (Build_Multiply): Likewise. Add special case for 32-bit values. - (Build_Scaled_Divide): Deal with 128-bit types. - (Build_Scaled_Divide_Code): Likewise. Fix size computation. Do not - apply conversions before calling Build_Multiply. - (Do_Multiply_Fixed_Fixed): Minor tweak. - (Integer_Literal): Deal with 128-bit values. - * exp_imgv.adb (Has_Decimal_Small): Delete. - (Expand_Image_Attribute): Call new routines for common ordinary - fixed-point types. - (Expand_Value_Attribute): Likewise. - (Expand_Width_Attribute): Add new expansion for fixed-point types. - * freeze.adb (Freeze_Entity): Move error checks for ordinary - fixed-point types to... - (Freeze_Fixed_Point_Type): ...here. Deal with 128-bit types and - adjust limitations for 32-bnt and 64-bit types. - * rtsfind.ads (RTU_Id): Add entries for new System_Fore, System_Img, - and System_Val units and remove them for obsolete units. - (RE_Id): Add entries for Double_Divide128, Scaled_Divide128, the new - Fore, Image, Value routines and remove them for obsolete units. - (RE_Unit_Table): Likewise. - * sem_ch3.adb (Decimal_Fixed_Point_Type_Declaration): Deal with - 128-bit types. - * stand.ads (Standard_Entity_Type): Add Standard_Integer_128. - * uintp.ads (Uint_31): New deferred constant. - (Uint_Minus_18): Likewise. - (Uint_Minus_31): Likewise. - (Uint_Minus_76): Likewise. - (Uint_Minus_127): Likewise. - * urealp.ads (Ureal_2_31): New function. - (Ureal_2_63): Likewise. - (Ureal_2_127): Likewise. - (Ureal_2_M_127): Likewise. - (Ureal_2_10_18): Likewise. - (Ureal_M_2_10_18): Likewise. - (Ureal_9_10_36): Likewise. - (Ureal_M_9_10_36): Likewise. - (Ureal_10_76): Likewise. - (Ureal_M_10_76): Likewise. - (Ureal_10_36): Delete. - (Ureal_M_10_36): Likewise. - * urealp.adb (UR_2_10_18): New variable. - (UR_9_10_36): Likewise. - (UR_10_76): Likewise. - (UR_M_2_10_18): Likewise. - (UR_M_9_10_36): Likewise. - (UR_M_10_76): Likewise. - (UR_2_31): Likewise. - (UR_2_63): Likewise. - (UR_2_127): Likewise. - (UR_2_M_127): Likewise. - (UR_10_36): Delete. - (UR_M_10_36): Likewise. - (Initialize): Initialize them. - (UR_Write): Do not use awkward Ada literal style. - (Ureal_2_10_18): New function. - (Ureal_9_10_36): Likewise. - (Ureal_10_76): Likewise. - (Ureal_2_31): Likewise. - (Ureal_2_63): Likewise. - (Ureal_2_127): Likewise. - (Ureal_2_M_127): Likewise. - (Ureal_M_2_10_18): Likewise. - (Ureal_M_9_10_36): Likewise. - (Ureal_10_76): Likewise. - (Ureal_M_10_76): Likewise. - (Ureal_10_36): Delete. - (Ureal_M_10_36): Likewise. - * libgnat/a-decima__128.ads: New file. - * libgnat/a-tideau.ads, libgnat/a-tideau.adb: Reimplement as - generic unit. - * libgnat/a-tideio.adb: Reimplement. - * libgnat/a-tideio__128.adb: New file. - * libgnat/a-tifiau.ads, libgnat/a-tifiau.adb: New generic unit. - * libgnat/a-tifiio.adb: Move bulk of implementation to s-imagef - and reimplement. - * libgnat/a-tifiio__128.adb: New file. - * libgnat/a-tiflau.adb (Get): Minor consistency fix. - (Gets): Likewise. - * libgnat/a-wtdeau.ads, libgnat/a-wtdeau.adb: Reimplement as - generic unit. - * libgnat/a-wtdeio.adb: Reimplement. - * libgnat/a-wtdeio__128.adb: New file. - * libgnat/a-wtfiau.ads, libgnat/a-wtfiau.adb: New generic unit. - * libgnat/a-wtfiio.adb: Reimplement. - * libgnat/a-wtfiio__128.adb: New file. - * libgnat/a-ztdeau.ads, libgnat/a-ztdeau.adb: Reimplement as - generic unit. - * libgnat/a-ztdeio.adb: Reimplement. - * libgnat/a-ztdeio__128.adb: New file. - * libgnat/a-ztfiau.ads, libgnat/a-ztfiau.adb: New generic unit. - * libgnat/a-ztfiio.adb: Reimplement. - * libgnat/a-ztfiio__128.adb: New file. - * libgnat/g-rannum.adb (Random_Decimal_Fixed): Use a subtype of the - appropiate size for the instantiation. - (Random_Ordinary_Fixed): Likewise. - * libgnat/s-arit32.ads, libgnat/s-arit32.adb: New support unit. - * libgnat/s-fode128.ads: New instantiation. - * libgnat/s-fode32.ads: Likewise. - * libgnat/s-fode64.ads: Likewise. - * libgnat/s-fofi128.ads: Likewise. - * libgnat/s-fofi32.ads: Likewise. - * libgnat/s-fofi64.ads: Likewise. - * libgnat/s-fore_d.ads, libgnat/s-fore_d.adb: New generic unit. - * libgnat/s-fore_f.ads, libgnat/s-fore_f.adb: Likewise. - * libgnat/s-fore.ads, libgnat/s-fore.adb: Rename into... - * libgnat/s-forrea.ads, libgnat/s-forrea.adb: ...this. - * libgnat/s-imaged.ads, libgnat/s-imaged.adb: New generic unit. - * libgnat/s-imagef.ads, libgnat/s-imagef.adb: Likewise, taken - from a-tifiio.adb. - * libgnat/s-imde128.ads: New instantiation. - * libgnat/s-imde32.ads: Likewise. - * libgnat/s-imde64.ads: Likewise. - * libgnat/s-imfi128.ads: Likewise. - * libgnat/s-imfi32.ads: Likewise. - * libgnat/s-imfi64.ads: Likewise. - * libgnat/s-imgdec.ads, libgnat/s-imgdec.adb: Delete. - * libgnat/s-imglld.ads, libgnat/s-imglld.adb: Likewise. - * libgnat/s-imgrea.adb (Set_Image_Real): Replace Sign local variable - with Minus local variable for the sake of consistency. - * libgnat/s-imguti.ads, libgnat/s-imguti.adb: New support unit. - * libgnat/s-vade128.ads: New instantiation. - * libgnat/s-vade32.ads: Likewise. - * libgnat/s-vade64.ads: Likewise. - * libgnat/s-vafi128.ads: Likewise. - * libgnat/s-vafi32.ads: Likewise. - * libgnat/s-vafi64.ads: Likewise. - * libgnat/s-valdec.ads, libgnat/s-valdec.adb: Delete. - * libgnat/s-vallld.ads, libgnat/s-vallld.adb: Likewise. - * libgnat/s-valued.ads, libgnat/s-valued.adb: New generic unit. - * libgnat/s-valuef.ads, libgnat/s-valuef.adb: Likewise. - * libgnat/s-valuei.adb: Minor rewording. - * libgnat/s-valrea.adb: Move bulk of implementation to... - * libgnat/s-valuer.ads, libgnat/s-valuer.adb: ...here. New - generic unit. - * libgnat/system-aix.ads (Max_Mantissa): Adjust. - * libgnat/system-darwin-arm.ads (Max_Mantissa): Likewise. - * libgnat/system-darwin-ppc.ads (Max_Mantissa): Likewise. - * libgnat/system-darwin-x86.ads (Max_Mantissa): Likewise. - * libgnat/system-djgpp.ads (Max_Mantissa): Likewise. - * libgnat/system-dragonfly-x86_64.ads (Max_Mantissa): Likewise. - * libgnat/system-freebsd.ads (Max_Mantissa): Likewise. - * libgnat/system-hpux-ia64.ads (Max_Mantissa): Likewise. - * libgnat/system-hpux.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-alpha.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-arm.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-hppa.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-ia64.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-m68k.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-mips.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-ppc.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-riscv.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-s390.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-sh4.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-sparc.ads (Max_Mantissa): Likewise. - * libgnat/system-linux-x86.ads (Max_Mantissa): Likewise. - * libgnat/system-lynxos178-ppc.ads (Max_Mantissa): Likewise. - * libgnat/system-lynxos178-x86.ads (Max_Mantissa): Likewise. - * libgnat/system-mingw.ads (Max_Mantissa): Likewise. - * libgnat/system-qnx-aarch64.ads (Max_Mantissa): Likewise. - * libgnat/system-rtems.ads (Max_Mantissa): Likewise. - * libgnat/system-solaris-sparc.ads (Max_Mantissa): Likewise. - * libgnat/system-solaris-x86.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-arm-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-arm-rtp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-arm.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-e500-kernel.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-e500-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-e500-rtp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-e500-vthread.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-ppc-kernel.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-ppc-ravenscar.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-ppc-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-ppc-rtp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-ppc-vthread.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-ppc.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-x86-kernel.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-x86-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-x86-rtp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-x86-vthread.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks-x86.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-aarch64-rtp-smp.ads (Max_Mantissa): - Likewise. - * libgnat/system-vxworks7-aarch64.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-arm-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-arm.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-e500-kernel.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-e500-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-e500-rtp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-ppc-kernel.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-ppc-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-ppc-rtp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-ppc64-kernel.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-ppc64-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-x86-kernel.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-x86-rtp-smp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-x86-rtp.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-x86_64-kernel.ads (Max_Mantissa): Likewise. - * libgnat/system-vxworks7-x86_64-rtp-smp.ads (Max_Mantissa): Likewise. - -2020-11-26 Liaiss Merzougue <merzougue@adacore.com> - - * libgnat/s-imgrea.ads (Image_Ordinary_Fixed_Point): Add a - remark concerning the irrelevant use of Inf and -0.0 - -2020-11-26 Arnaud Charlet <charlet@adacore.com> - - * osint-c.adb (Set_Output_Object_File_Name): Add support for - .c output file. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * lib-writ.adb, sem_ch8.adb, sem_prag.adb: Use - Is_Generic_Subprogram instead of low-level membership tests. - -2020-11-26 Gary Dismukes <dismukes@adacore.com> - - * sem_ch6.adb (Analyze_Call_And_Resolve): Reformatted a comment. - * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings): - Fixed a typo. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * sem_res.adb (Resolve_Membership_Op): Replace pragma Warnings - with pragma Assert. - -2020-11-26 Ed Schonberg <schonberg@adacore.com> - - * sem_ch6.adb (Analyze_Call_And_Resolve): Add information to the - error message on an illegal procedure call, when the illegality - is due to the presence of a component of the full view of the - target object, as well as a procedure with the same name (See RM - 4.1.3 (9.2/3)). - -2020-11-26 Ed Schonberg <schonberg@adacore.com> - - * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings): - when the restriction is a configuration pragma and specifies - No_Tasking, a global flag is set to reject task declarations, - and to prevent the construction of Master entities. The flag - must not be set if the pragma is a Restriction_Warning, in which - case task declarationns are allowed. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * libgnat/a-stzhas.adb (Wide_Wide_Hash): Instantiate inside a - wrapper function. - * libgnat/a-stzhas.ads (Wide_Wide_Hash): Likewise; remove wrong - comment, because this is indeed a RM unit, as described in Ada - RM A.4.8 (1/3). - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * sem_eval.adb (Eval_Slice): Refactor repeated calls to Prefix - with a local constant (named just like in Resolve_Slice). - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * sem_eval.adb (Eval_Slice): Emit warning not just for - constants, but for any objects. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch4.adb (Indicate_Name_And_Type): Fix whitespace in - comment. - * sem_res.adb (Resolve_Call): Remove redundant parens. - * sem_util.adb (Set_Entity_With_Checks): Remove extra call to - Set_Entity. - -2020-11-26 Bob Duff <duff@adacore.com> - - * exp_ch4.adb (Expand_Concatenate): Call Set_No_Initialization - on the N_Allocator node that is supposed to allocate on the - secondary stack. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch13.adb, exp_ch9.adb, sem_ch8.adb, sem_util.adb: Replace - a combination of Is_Protected_Type and Is_Task_Type by - Is_Concurrent_Type. - -2020-11-26 Arnaud Charlet <charlet@adacore.com> - - * libgnarl/s-tassta.adb (Task_Wrapper): Fix computation of - Pattern_Size. - -2020-11-26 Bob Duff <duff@adacore.com> - - * freeze.adb (Freeze_Array_Type): Remove propagation of - Has_Own_Invariants to the first subtype. This is a no-op, - because the current (incorrect) version of Has_Own_Invariants - calls Base_Type. - * sem_prag.adb, sem_util.adb: Pass the base type to - Set_Has_Own_Invariants. - -2020-11-26 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (Aft_Value): Adjust documentation. - (Scale_Value): Likewise. - -2020-11-26 Justin Squirek <squirek@adacore.com> - - * exp_ch4.adb (Expand_N_Type_Conversion): Use the unexpanded - operand when generating accessibility checks. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * libgnat/a-cbhase.adb (Read): Remove extra whitespace. - * libgnat/a-cbmutr.ads (Read): Likewise. - * libgnat/a-cborse.adb (Read): Likewise. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch7.adb, exp_util.adb, freeze.adb: Rewrite with - Is_Access_Object_Type. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Check_Valid_Library_Unit_Pragma): Raise - exception. - (Analyze_Pragma): Remove detection of rewritten pragmas. - -2020-11-26 Joffrey Huguet <huguet@adacore.com> - - * libgnat/a-strmap.ads: Add preconditions and postconditions to - all subprograms. - -2020-11-26 Yannick Moy <moy@adacore.com> - - * sem_res.adb (Resolve_Equality_Op): Warn when -gnatwq is used - (the default) and the problematic case is encountered. - -2020-11-26 Yannick Moy <moy@adacore.com> - - * sem_attr.adb (Analyze_Attribute): Issue a continuation message - to give proper recommendation here. - -2020-11-26 Gary Dismukes <dismukes@adacore.com> - - * exp_util.adb (Expand_Subtype_From_Expr): A typo correction, - plus other minor reformatting. - -2020-11-26 Ed Schonberg <schonberg@adacore.com> - - * sem_ch12.adb (Instantiate_Formal_Package): If previous matched - entity is overloadable, advance in the list of actuals of the - actual package, to prevent an erroneous match of two adjacent - overloadable homonyms with the same entity. - -2020-11-26 Justin Squirek <squirek@adacore.com> - - * sem_ch6.adb (First_Selector): Utility routine to return the - first selector or choice in an association. - (Check_Return_Construct_Accessibility): Modify loop to handle - named associations when iterating through discriminants. - -2020-11-26 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch12.adb: Fix casing from "Instantiation" to - "instantiation". - -2020-11-25 Ed Schonberg <schonberg@adacore.com> - - * freeze.adb (Is_Uninitialized_Aggregate): Move... - * exp_util.adb (Is_Uninitialized_Aggregate): ... here. - (Expand_Subtype_From_Expr): If the expression is an - uninitialized aggregate, capture subtype for declared object and - remove expression to suppress further superfluous expansion. - -2020-11-25 Ed Schonberg <schonberg@adacore.com> - - * sem_eval.adb (Subtypes_Statically_Compatible): Scalar types - with compatible static bounds are statically compatible if - predicates are compatible, even if they are not static subtypes. - Same for private types without discriminants. - -2020-11-25 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch11.adb (Expand_N_Raise_Statement): Use Is_Entity_Name - consistently in tests on the name of the statement. - * exp_prag.adb (Expand_Pragma_Check): In the local propagation - case, wrap the raise statement in a block statement. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch8.adb (Expand_N_Exception_Renaming_Declaration): Move - "Nam" constant after the body of a nested subprogram; change "T" - from variable to constant. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * make.adb (Scan_Make_Arg): Merge ELSIF branches for -u and -U. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_rm/implementation_defined_attributes.rst - (Has_Tagged_Values): Document based on the existing description - of Has_Access_Type and the comment for Has_Tagged_Component, - which is where frontend evaluates this attribute. - * gnat_rm.texi: Regenerate. - * sem_attr.adb (Analyze_Attribute): Merge processing of - Has_Access_Type and Has_Tagged_Component attributes. - * sem_util.adb (Has_Access_Type): Fix casing in comment. - * sem_util.ads (Has_Tagged_Component): Remove wrong (or - outdated) comment about the use of this routine to implement the - equality operator. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_Size_Attribute): Remove whitespace; - simplify with a membership test, which are now allowed in the - frontend code. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Analyze_One_Aspect): Fix inconsistent calls to - Make_Aitem_Pragma. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Check_Expr_Constants): Simplify with - Is_Named_Number. - * sem_prag.adb (Process_Convention): Likewise. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Analyze_One_Aspect): Detect aspect identifiers - with membership tests. - (Check_Aspect_At_End_Of_Declarations): Likewise. - (Freeze_Entity_Checks): Likewise; a local constant is no longer - needed. - (Is_Operational_Item): Similar simplification for attribute - identifiers. - (Is_Type_Related_Rep_Item): Likewise. - (Resolve_Iterable_Operation): Detect names with a membership - test. - (Validate_Independence): Replace repeated Ekind with a - membership test. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Analyze_One_Aspect): Replace duplicate of - Effective_Reads. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * einfo.adb: Use composite wrappers (e.g. - Is_Subprogram_Or_Entry) and membership tests where it appears to - improve clarity. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * einfo.adb (Is_Standard_Character_Type, - Is_Standard_String_Type): Simplify. - (Last_Formal): Use procedural variant of Next_Formal. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * einfo.adb: Replace "E" with Entity_Id in local object - declarations. - -2020-11-25 Steve Baird <baird@adacore.com> - - * exp_ch2.adb (Expand_Entity_Reference): A new local predicate - Is_Object_Renaming_Name indicates whether a given expression - occurs (after looking through qualified expressions and type - conversions) as the name of an object renaming declaration. If - Current_Value is available but this new predicate is True, then - ignore the availability of Current_Value. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch12.adb (Instantiate_Type): Remove extra whitespace. - (Validate_Access_Type_Instance): Remove dead (and duplicated) - code. - -2020-11-25 Gary Dismukes <dismukes@adacore.com> - - * exp_util.adb (Possible_Side_Effect_In_SPARK): Replace hyphen - with a space in "side-effect" (two instances). - -2020-11-25 Justin Squirek <squirek@adacore.com> - - * doc/gnat_rm/intrinsic_subprograms.rst (Shifts and Rotates): - Document behavior on negative numbers - * gnat_rm.texi: Regenerate. - * sem_eval.adb (Fold_Shift): Set modulus to be based on the RM - size for non-modular integer types. - -2020-11-25 Olivier Hainque <hainque@adacore.com> - - * adaint.c (__gnat_copy_attribs): Reinstate code based on utime - for timestamp processing on VxWorks 6. - -2020-11-25 Yannick Moy <moy@adacore.com> - - * exp_util.adb (Remove_Side_Effects): Only remove side-effects - in GNATprove mode when this is useful. - * sem_res.adb (Set_Slice_Subtype): Make sure in GNATprove mode - to define the Itype when needed, so that run-time errors can be - analyzed. - * sem_util.adb (Enclosing_Declaration): Correctly take into - account renaming declarations. - -2020-11-25 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/s-rannum.adb (Random_Discrete): Specifically deal with - the case where the size of the base type is larger than 64 bits. - -2020-11-25 Yannick Moy <moy@adacore.com> - - * sem_ch3.adb (Access_Type_Declaration): Set Etype before - checking for volatility compatibility. - -2020-11-25 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/g-rannum.ads (Random): New functions returning 128-bit. - * libgnat/g-rannum.adb (Random): Implement them and alphabetize. - (To_Signed): New unchecked conversion function for 128-bit. - -2020-11-25 Arnaud Charlet <charlet@adacore.com> - - * exp_ch7.adb (Build_Finalization_Master, Build_Finalizer, - Build_Object_Declarations, Make_Deep_Array_Body, - Wrap_Transient_Expression): Call Set_Debug_Info_Needed on - temporaries when Debug_Generated_Code is True. - -2020-11-25 Liaiss Merzougue <merzougue@adacore.com> - - * libgnat/s-imagei.adb - (Set_Digits): Rewrite the procedure to remove recursion. - (Image_Integer, Set_Image_Integer): Update assertions and remove - redundant ones. - * libgnat/s-imageu.adb - (Set_Image_Unsigned): Rewrite the procedure to remove recursion. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * exp_util.adb (Attribute_Constrained_Static_Value): Fix body - box. - * sem_attr.adb (Eval_Attribute): Replace repeated calls to - Attribute_Name with a captured value of the Attribute_Id; also, - remove extra parens around Is_Generic_Type. - -2020-11-25 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_prag.adb (Analyze_Pragma): Emit error on wrong argument - nkind. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * sem_attr.adb, sem_prag.adb: Use Is_Named_Number. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb, exp_util.adb: Fix style and typos in comments. - -2020-11-25 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): A variable that - is only incremented in the code has now type Nat; conversion is - now unnecessary. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Analyze_Global_Item): Call SPARK_Msg_NE with the - entity, not with its identifier. - -2020-11-24 Arnaud Charlet <charlet@adacore.com> - - * opt.ads (Generate_Asm): New flag. - * osint-c.adb (Set_Output_Object_File_Name): Accept any - extension when generating assembly. - * adabkend.adb (Scan_Compiler_Args): Recognize -S. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb, exp_ch4.adb, exp_intr.adb, sem_ch8.adb, - sem_res.adb, sem_type.adb, sem_util.adb: Reuse Is_Packed_Array. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb (Apply_Access_Check): Remove unbalanced paren. - * exp_attr.adb (Expand_N_Attribute_Reference): Fix typo in - comment. - -2020-11-24 Justin Squirek <squirek@adacore.com> - - * sem_prag.adb (Analyze_Pragma): Mark relevant pragmas as ghost - when they are within a ghost region. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * contracts.adb, freeze.adb, sem_ch12.adb, sem_prag.adb: Reuse - In_Same_List. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Is_Loop_Pragma): Avoid repeated calls to - Original_Node; remove unnecessary IF statement. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Rewrite - with a CASE statement. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Replace calls to - Sloc with a local constant Loc; remove call to - Analyze_And_Resolve and return, which is exactly what happens - anyway (and other branches in the Constrained declare block - appear to rely on analysis, resolution and returning happening - in all cases). - * sem_util.adb: Remove useless parens. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.adb (Is_Object_Reference): Delta and extension - aggregates are objects. - -2020-11-24 Ghjuvan Lacambre <lacambre@adacore.com> - - * libgnat/s-rident.ads (System.Rident): Register new restriction - IDs. - * par-ch13.adb (Get_Aspect_Specifications): Add restriction check. - * par-prag.adb (Process_Restrictions_Or_Restriction_Warnings): - Register No_Unrecognized_Aspects restriction. - * sem_prag.adb (Analyze_Pragma): Add restriction check. - * snames.ads-tmpl: Create restriction names. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * sem_attr.adb (Declared_Within): Return True for objects - declared within the attribute Loop_Entry prefix itself. - -2020-11-24 Yannick Moy <moy@adacore.com> - - * sem_ch3.adb (Process_Discriminants): Correctly set right - context for analyzing default value of discriminant. - -2020-11-24 Arnaud Charlet <charlet@adacore.com> - - * sem_type.adb (Add_One_Interp.Is_Universal_Operation): Account - for universal_access = operator. - (Disambiguate): Take into account preference on universal_access - = operator when relevant. - (Disambiguate.Is_User_Defined_Anonymous_Access_Equality): New. - -2020-11-24 Arnaud Charlet <charlet@adacore.com> - - * exp_util.adb (Is_Finalizable_Transient): Take into account return - statements containing N_Expression_With_Actions. Also clean up a - condition to make it more readable. - * exp_ch6.adb: Fix typo. - -2020-11-24 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-wtdeio.adb (TFT): Delete and adjust throughout. - * libgnat/a-wtenau.adb (TFT): Likewise. - * libgnat/a-wtfiio.adb (TFT): Likewise. - * libgnat/a-wtflio.adb (TFT): Likewise. - * libgnat/a-wtinio.adb (TFT): Likewise. - * libgnat/a-wtinio__128.adb (TFT): Likewise. - * libgnat/a-wtmoio.adb (TFT): Likewise. - * libgnat/a-wtmoio__128.adb (TFT): Likewise. - * libgnat/a-ztdeio.adb (TFT): Likewise. - * libgnat/a-ztenau.adb (TFT): Likewise. - * libgnat/a-ztfiio.adb (TFT): Likewise. - * libgnat/a-ztflio.adb (TFT): Likewise. - * libgnat/a-ztinio.adb (TFT): Likewise. - * libgnat/a-ztinio__128.adb (TFT): Likewise. - * libgnat/a-ztmoio.adb (TFT): Likewise. - * libgnat/a-ztmoio__128.adb (TFT): Likewise. - -2020-11-24 Arnaud Charlet <charlet@adacore.com> - - * sem_ch13.adb (Validate_Literal_Aspect): Add support for named - numbers and in particular overload of the Real_Literal function. - * sem_res.adb (Resolve): Add support for named numbers in - Real_Literal and Integer_Literal resolution. - * einfo.adb, einfo.ads (Related_Expression, - Set_Related_Expression): Allow E_Function. - * uintp.ads (UI_Image_Max): Bump size of buffer to avoid loosing - precision. - * sem_eval.adb: Fix typo in comment. - * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads (From_String): - Return a Valid_Big_Integer. - * libgnat/a-nbnbre.adb, libgnat/a-nbnbre.ads (From_String): New - variant taking two strings. Return a Valid_Big_Real. - -2020-11-24 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Analyze_Associations) <Explicit_Freeze_Check>: Test - that the instance is in a statement sequence instead of local scope. - (Freeze_Subprogram_Body): Use the special delayed placement with - regard to the parent instance only if its Sloc is strictly greater. - (Install_Body): Likewise. - -2020-11-24 Steve Baird <baird@adacore.com> - - * sem_ch13.adb (Validate_Literal_Aspect): Call to Base_Type - needed in order to correctly check result type of String_Literal - function when the first named subtype differs from the base - type (e.g.: - type T is range 1 .. 10 with String_Literal => ... ; - ). - -2020-11-24 Yannick Moy <moy@adacore.com> - - * sem_prag.adb (Analyze_Global_Item): Handle specially the - current instance of a PO. - * sem_util.ads (Is_Effectively_Volatile, - Is_Effectively_Volatile_For_Reading): Add parameter - Ignore_Protected. - * sem_util.adb (Is_Effectively_Volatile, - Is_Effectively_Volatile_For_Reading): Add parameter - Ignore_Protected to compute the query results ignoring protected - objects/types. - (Is_Effectively_Volatile_Object, - Is_Effectively_Volatile_Object_For_Reading): Adapt to new - signature. - -2020-11-24 Ghjuvan Lacambre <lacambre@adacore.com> - - * doc/gnat_ugn/building_executable_programs_with_gnat.rst: - Update documentation on -gnatyk. - * gnat_ugn.texi: Regenerate. - -2020-11-24 Yannick Moy <moy@adacore.com> - - * sem_ch10.adb (Analyze_Compilation_Unit): Move aspects from - body to the newly created spec. - -2020-11-24 Arnaud Charlet <charlet@adacore.com> - - * exp_ch6.adb (Add_Cond_Expression_Extra_Actual): Simplify - handling of function calls and remove bug in handling of - transient objects. Minor reformatting along the way. - -2020-11-24 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbin.adb (From_String): Implement fully. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Delta_Array_Aggregate): If the choice is - a subtype_indication then call - Resolve_Discrete_Subtype_Indication; both for choices - immediately inside array delta aggregates and inside - iterated_component_association within array delta aggregates. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * lib-load.adb, lib-writ.adb, lib.adb, par-load.adb, - rtsfind.adb, sem_ch10.adb: Use Present where possible. - -2020-11-24 Yannick Moy <moy@adacore.com> - - * sem_prag.adb (Analyze_Depends_Global): Reject Global and - Depends on null procedure. - -2020-11-24 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbre.adb (From_String): Handle properly '_' - characters. - -2020-11-24 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_Array_Aggregate, - Expand_SPARK_N_Aggregate): Remove, no longer needed. - * sem_aggr.adb (Resolve_Iterated_Component_Association): Only - remove references in the analyzed expression when generating - code and the expression needs to be analyzed anew after being - rewritten into a loop. - -2020-11-24 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_defined_characteristics.rst: Complete - entry of 3.5.9(10). - * gnat_rm.texi: Regenerate. - -2020-11-20 Maciej W. Rozycki <macro@linux-mips.org> - - * adaint.c (__gnat_number_of_cpus): Check for the presence of - _SC_NPROCESSORS_ONLN rather than a list of OS-specific macros - to decide whether to use `sysconf'. - -2020-11-20 Jakub Jelinek <jakub@redhat.com> - - PR other/97911 - * gcc-interface/Make-lang.in (ada.serial): Change from goal to a - variable. - (.PHONY): Drop ada.serial and ada.prev. - (gnat1$(exeext)): Depend on $(ada.serial) rather than ada.serial. - -2020-11-19 Eric Botcazou <ebotcazou@adacore.com> - - PR ada/97805 - * adaint.c: Include climits in C++ and limits.h otherwise. - -2020-11-19 Eric Botcazou <ebotcazou@adacore.com> - - * exp_dbug.adb (Is_Handled_Scale_Factor): Delete. - (Get_Encoded_Name): Do not call it. - * gcc-interface/decl.c (gnat_to_gnu_entity) <Fixed_Point_Type>: - Tidy up and always use a meaningful description for arbitrary - scale factors. - * gcc-interface/misc.c (gnat_get_fixed_point_type_info): Remove - obsolete block and adjust the description of the scale factor. - -2020-11-18 Jakub Jelinek <jakub@redhat.com> - - * gcc-interface/Make-lang.in (ada.serial): New goal. - (.PHONY): Add ada.serial ada.prev. - (gnat1$(exeext)): Depend on ada.prev. Call LINK_PROGRESS. - -2020-11-18 Matthias Klose <doko@ubuntu.com> - - PR ada/97859 - * Makefile.rtl (powerpc% linux%): Also match powerpc64le cpu. - -2020-11-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/gigi.h: Remove ^L characters throughout. - * gcc-interface/decl.c: Likewise. - * gcc-interface/utils.c: Likewise. - * gcc-interface/utils2.c: Likewise. - * gcc-interface/trans.c (gnat_to_gnu) <N_Allocator>: Do not explicitly - go to the base type for the Has_Constrained_Partial_View flag. - -2020-11-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (build_binary_op_trapv): Convert operands - to the result type before doing generic overflow checking. - -2020-11-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (can_be_lower_p): Remove. - (Regular_Loop_to_gnu): Add ENTRY_COND unconditionally if - BOTTOM_COND is non-zero. - -2020-11-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Constant>: In case - the constant is not being defined, get the expression in type - annotation mode only if its type is elementary. - -2020-11-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (gnat_to_gnu) <N_Op_Shift>: Also convert - GNU_MAX_SHIFT if the type of the operation has been changed. - * gcc-interface/utils.c (can_materialize_object_renaming_p): Add - pair of missing parentheses. - -2020-11-07 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/Makefile.in: Force target_cpu to powerpc if the - nominal target is powerpc64-suse-linux. - -2020-11-07 Iain Sandoe <iain@sandoe.co.uk> - - * gcc-interface/misc.c (gnat_printable_name): Change - DECL_IS_BUILTIN -> DECL_IS_UNDECLARED_BUILTIN. - -2020-10-28 Alexandre Oliva <oliva@adacore.com> - - PR ada/97504 - * Makefile.rtl (LIBGNAT_TARGET_PAIRS> <riscv*-*-*>: Use wraplf - version of Aux_Long_Long_Float. - -2020-10-27 Doug Rupp <rupp@adacore.com> - - * Makefile.rtl: Add vx7r2cert spec file to ARM, PowerPC and x86 - targets. - * vxworks7-cert-rtp-link.spec: New spec file. - -2020-10-27 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add g-spogwa object. - * libgnat/g-spogwa.adb: Fix style errors. - -2020-10-27 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_Array_Aggregate): Dedicated - routine for array aggregates; mostly reuses existing code, but - calls itself recursively for multi-dimensional array aggregates. - (Expand_SPARK_N_Aggregate): Call Expand_SPARK_Array_Aggregate to - do the actual expansion, starting from the first index of the - array type. - -2020-10-27 Ed Schonberg <schonberg@adacore.com> - - * sem_aggr.adb (Resolve_Iterated_Component_Association): new - internal subprogram Remove_References, to reset semantic - information on each reference to the index variable of the - association, so that Collect_Aggregate_Bounds can work properly - on multidimensional arrays with nested associations, and - subsequent expansion into loops can verify that dimensions of - each subaggregate are compatible. - -2020-10-27 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_prag.adb (Append_Copies): Handle N_Parameter_Associations. - -2020-10-27 Eric Botcazou <ebotcazou@adacore.com> - - * ada_get_targ.adb (Digits_From_Size): Delete. - (Width_From_Size): Likewise. - * get_targ.adb (Digits_From_Size): Likewise. - (Width_From_Size): Likewise. - * get_targ.ads (Digits_From_Size): Likewise. - (Width_From_Size): Likewise. - * ttypes.ads: Remove with clause for Get_Targ. - (Standard_Short_Short_Integer_Width): Delete. - (Standard_Short_Integer_Width): Likewise. - (Standard_Integer_Width): Likewise. - (Standard_Long_Integer_Width): Likewise. - (Standard_Long_Long_Integer_Width): Likewise. - (Standard_Long_Long_Long_Integer_Width): Likewise. - (Standard_Short_Float_Digits): Likewise. - (Standard_Float_Digits): Likewise. - (Standard_Long_Float_Digits): Likewise. - (Standard_Long_Long_Float_Digits): Likewise. - * gnat1drv.adb (Adjust_Global_Switches): Adjust. - -2020-10-27 Arnaud Charlet <charlet@adacore.com> - - * exp_ch6.adb, freeze.adb, gnat1drv.adb, opt.ads, sem_ch6.adb - (Transform_Function_Array): New flag, split from Modify_Tree_For_C. - * exp_unst.adb: Minor reformatting. - -2020-10-27 Dmitriy Anisimkov <anisimko@adacore.com> - - * libgnat/g-socpol.adb (Wait): Do not exit from loop on EINTR - error and timeout is over. - -2020-10-26 Ed Schonberg <schonberg@adacore.com> - - * exp_aggr.adb (Build_Array_Aggr_Code): If the aggregate - includes an Others_Choice in an association that is an - Iterated_Component_Association, generate a proper loop for it. - -2020-10-26 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-tifiio.adb: Add missing sign in documentation. - * libgnat/s-imgrea.ads: Minor fixes in commentary. - -2020-10-26 Pat Rogers <rogers@adacore.com> - - * doc/gnat_rm/implementation_defined_pragmas.rst: Include - "Jorvik" in pragma Profile description. - * gnat_rm.texi: Regenerate. - -2020-10-26 Bob Duff <duff@adacore.com> - - * sem_attr.adb (Check_Image_Type): Remove "|", so the compiler - will not crash. - * errout.ads: Improve comment. This has nothing to do with - -gnatQ. - -2020-10-26 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-tifiio.adb: Minor editions to documentation. - -2020-10-26 Piotr Trojanek <trojanek@adacore.com> - - * contracts.adb (Causes_Contract_Freezing): Extend condition to - match the one in Analyze_Subprogram_Body_Helper. This routine is - used both as an assertion at the very start of - Freeze_Previous_Contracts and to detect previous declaration for - which Freeze_Previous_Contracts has been executed. - -2020-10-26 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-tifiio.adb: Move around documentaton paragraph. - -2020-10-26 Piotr Trojanek <trojanek@adacore.com> - - * inline.adb (Establish_Actual_Mapping_For_Inlined_Call): Add - guard for a call to Set_Last_Assignment with the same condition - as the assertion in that routine and explain why this guard - fails in GNATprove mode. - -2020-10-26 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_defined_characteristics.rst: Adjust - the entries of 3.5.9(8) and 3.5.9(10). - * gnat_rm.texi: Regenerate. - -2020-10-26 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-tifiio.adb: Change the range of supported Small - values. - (E0, E1, E2): Adjust factors. - (Exact): Return false if the Small does not fit in 64 bits. - -2020-10-26 Dmitriy Anisimkov <anisimko@adacore.com> - - * libgnat/g-socket.adb (Wait_On_Socket): Boolean parameter - For_Read changed to Event parameter of type - GNAT.Sockets.Poll.Wait_Event_Set. Implementation is simplified - and based on call to GNAT.Sockets.Poll.Wait now. - -2020-10-26 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-tifiio.adb: Minor editions to documentation. - -2020-10-26 Yannick Moy <moy@adacore.com> - - * sem_ch12.adb (Restore_Private_Views): Do not lose the - information provided by Is_Generic_Actual_Type in GNATprove - mode. - -2020-10-26 Arnaud Charlet <charlet@adacore.com> - - * sem_warn.adb (Warn_On_Unreferenced_Entity): Suppress warning - on formal parameters of all dispatching operations. - -2020-10-26 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Delta_Array_Aggregate): Fix typos in - error message. - -2020-10-26 Olivier Hainque <hainque@adacore.com> - - * libgnat/s-dwalin.adb (Symbolic_Traceback): Always emit the hex - address at the beginning of an entry if suppression is not - requested. Consistently output a "???" for the subprogram name - when it is unknown. - -2020-10-26 Doug Rupp <rupp@adacore.com> - - * s-oscons-tmplt.c (_nfds_t): Use sizeof (unsigned long int). - -2020-10-26 Piotr Trojanek <trojanek@adacore.com> - - * par-ch4.adb (P_Iterated_Component_Association): Move code for - iterated_element_association to - Build_Iterated_Element_Association. - -2020-10-26 Yannick Moy <moy@adacore.com> - - * sem_ch12.adb (Needs_Body_Instantiated): In GNATprove mode, do - not instantiate bodies outside of the main unit. - -2020-10-26 Ed Schonberg <schonberg@adacore.com> - - * sem_aggr.adb (Resolve_Delta_Array_Aggregate): For an - association that is an iterated component association, attach - the copy of the expression to the tree prior to analysis, in - order to preserve its context. This is needed when verifying - static semantic rules that depend on context, for example that a - use of 'Old appears only within a postcondition. - -2020-10-26 Bob Duff <duff@adacore.com> - - * doc/gnat_ugn/gnat_utility_programs.rst: Document that - --no-comments-fill is now the default. - -2020-10-26 Gary Dismukes <dismukes@adacore.com> - - * sem_aggr.adb (Resolve_Extension_Aggregate): When testing for - an aggregate that is illegal due to having an ancestor type that - has unknown discriminants, add an "or else" condition testing - whether the aggregate type has unknown discriminants and that - Partial_View_Has_Unknown_Discr is also set on the ancestor type. - Extend the comment, including adding ??? about a possible - simpler test. - -2020-10-26 Bob Duff <duff@adacore.com> - - * libgnat/a-cihama.adb, libgnat/a-cohama.adb, - libgnat/a-cohase.adb (Delete): Set Position.Position, and - assert. - -2020-10-26 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Find_Direct_Name.Undefined): Handle known unit - names with 3 selectors. - -2020-10-26 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Add missing call - to Enter_Name, just like it is called for - iterated_component_association in Expand_SPARK_N_Aggregate. - -2020-10-26 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Reuse local - constant Expr and the Choice_List routine. - (Expand_SPARK_N_Aggregate): Reuse local constant Expr. - -2020-10-26 Piotr Trojanek <trojanek@adacore.com> - - * par-ch4.adb (P_Iterated_Component_Association): Fix typos in - comments. - -2020-10-26 Arnaud Charlet <charlet@adacore.com> - - * par-ch6.adb (P_Formal_Part): Ada 2020 supports scanning - aspects on formal parameters. - * doc/gnat_rm/implementation_defined_aspects.rst (Aspect - Unreferenced): Update documentation. - * gnat_rm.texi: Regenerate. - -2020-10-26 Ed Schonberg <schonberg@adacore.com> - - * freeze.adb (Freeze_Type_Refs): When an entity in an expression - function is a type, freeze the entity and not just its type, - which would be incomplete when the type is derived and/or - tagged. - -2020-10-26 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_Update_Attribute): Handle - subtype_indication just like in Expand_Delta_Array_Aggregate. - -2020-10-25 Iain Sandoe <iain@sandoe.co.uk> - - * Makefile.rtl: Add GNATRTL_128BIT_PAIRS/OBJS for 64bit - PowerPC Darwin cases. - -2020-10-23 Iain Sandoe <iain@sandoe.co.uk> - - * adaint.c: On Darwin platforms, define st_atim to - st_atimespec. Likwise st_mtim to st_mtimespec. - -2020-10-23 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (EXTRA_GNATRTL_NONTASKING_OBJS) [IA64/Linux]: Fix typo. - -2020-10-23 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (EXTRA_GNATRTL_NONTASKING_OBJS) [IA64/Linux]: Fix typo. - -2020-10-23 Alexandre Oliva <oliva@adacore.com> - - PR ada/97504 - * Makefile.rtl (LIBGNAT_TARGET_PAIRS): Select wraplf version - of Aux_Long_Long_Float for s390 and remaining sparc and - powerpc targets. - -2020-10-23 Dmitriy Anisimkov <anisimko@adacore.com> - - * Makefile.rtl (GNATRTL_SOCKETS_OBJS): New object - g-socpol$(objext) New source files noted: g-socpol.adb, - g-socpol.ads, g-socpol__dummy.adb, g-socpol__dummy.ads, - g-sopowa.adb, g-sopowa__posix.adb, g-sopowa__mingw.adb, - g-spogwa.adb, g-spogwa.ads. - * impunit.adb (Non_Imp_File_Names_95): New base filename - g-socpol in "GNAT Library Units" section for GNAT.Sockets.Poll - unit. - * libgnat/g-socket.ads, libgnat/g-socket.adb: - (Raise_Socket_Error): Moved from body to private part of - specification to use in GNAT.Sockets.Poll. - * libgnat/g-socpol.ads, libgnat/g-socpol.adb: Main unit of the - implementation. - * libgnat/g-socpol__dummy.ads, libgnat/g-socpol__dummy.adb: - Empty unit for the systems without sockets support. - * libgnat/g-spogwa.ads, libgnat/g-spogwa.adb: Generic unit - implementing sockets poll on top of select system call. - * libgnat/g-sopowa.adb (Wait): Separate implementation for - operation systems with poll system call support. - * libgnat/g-sopowa__posix.adb (Wait): Separate implementation - for POSIX select system call. - * libgnat/g-sopowa__mingw.adb (Wait): Separate implementation - for Windows select system call. - * gsocket.h (_WIN32_WINNT): Increase to 0x0600 for winsock2.h to - allow WSAPoll related definitions. - * s-oscons-tmplt.c: Fix comment next to #endif for - #if defined (__linux__) || defined (__ANDROID__) line. Include - <poll.h> for all except VxWorks and Windows. - (SIZEOF_nfds_t): New definition. - (SIZEOF_fd_type): New definition. - (SIZEOF_pollfd_events): New definition. - (POLLIN, POLLPRI, POLLOUT, POLLERR, POLLHUP, POLLNVAL): New - definitions for VxWorks to be able to emulate poll on top of - select in it. Define POLLPRI as zero on Windows as it is not - supported there. - (Poll_Linkname): New definition, because the poll system call - has different name in Windows and POSIX. - -2020-10-23 Justin Squirek <squirek@adacore.com> - - * checks.adb (Apply_Accessibility_Check): Skip checks against - the extra accessibility of a function result when in Ada 2005 - mode or earlier. - * exp_ch3.adb (Build_Initialization_Call): Modify accessibility - level calls to use Accessibility_Level. - (Expand_N_Object_Declaration): Modify accessibility level calls - to use Accessibility_Level. - * exp_ch4.adb (Expand_Allocator_Expression): Add static check - for anonymous access discriminants. Remove unneeded propagation - of accessibility actual. - (Expand_N_In): Modify accessibility level calls to use - Accessibility_Level. - (Expand_N_Type_Conversion): Modify accessibility level calls to - use Accessibility_Level. - * exp_ch5.adb (Expand_N_Assignment_Statement): Modify - accessibility level calls to use Accessibility_Level. - * exp_ch6.adb (Expand_Call_Helper): Rewrite accessibility - calculation for the extra accessibility of result actual in - function calls, and modify accessibility level calls to use - Accessibility_Level. - (Check_Against_Result_Level): Removed. - * exp_ch9.adb (Expand_N_Requeue_Statement): Add dynamic - accessibility check for requeues - * sem_attr.adb (Resolve_Attribute): Modify accessibility level - calls to use Accessibility_Level. - * sem_ch13.adb (Associate_Storage_Pool): Modify accessibility - level calls to use Accessibility_Level. - * sem_ch4.adb (Analyze_Call): Add static check for explicitly - aliased formals in function calls within return statements. - * sem_ch6.adb (Check_Return_Construct_Accessibility): Rewrite - routine to account for non-aggregate return objects. - (Generate_Minimum_Accessibility): Created. - (Analyze_Call): Modify accessibility level calls to use - Accessibility_Level. - (Analyze_Subprogram_Body_Helper): Add generation of minimum - accessibility for the extra accessibility of the function - result. - * sem_ch9.adb (Analyze_Requeue): Modify accessibility level - calls to use Accessibility_Level. - * sem_res.adb: (Check_Aliased_Parameters): Modify accessibility - level calls to use Accessibility_Level. - (Valid_Conversion): Modify accessibility level calls to use - Accessibility_Level. - * sem_util.adb, sem_util.ads (Accessibility_Level_Helper): - Renamed to Accessibility_Level, add detection for functions in - prefix notation, and add cases where to return zero when - specified. Modified to take new, more descriptive, parameters. - (Accessibility_Level): Created. - (Function_Call_Level): Removed. - (Function_Call_Or_Allocator_Level): Created to centralize the - calculation accessibility levels for function calls and - allocators. - (Static_Accessibility_Level): Removed. - (Dynamic_Accessibility_Level): Removed. - (Get_Dynamic_Accessibility): Renamed from Get_Accessibility. - (In_Return_Value): Created to determine if a given expression - contributes to the current function's return value. - (Is_Master): Created. - (Is_Explicitly_Aliased): Created - -2020-10-23 Bob Duff <duff@adacore.com> - - * doc/gnat_ugn/gnat_utility_programs.rst: Document - --no-comments-fill. - -2020-10-23 Piotr Trojanek <trojanek@adacore.com> - - * contracts.adb (Analyze_Entry_Or_Subprogram_Contract, - Analyze_Subprogram_Body_Stub_Contract): Fix missing references - to Subprogram_Variant where similar references to Contract_Cases - are present. - * sem_prag.adb (Analyze_Contract_Case, Analyze_Variant): Check - that aggregate parameter has no expressions. - (Analyze_Pragma): Replace Contract_Cases with Subprogram_Variant - in a copy-pasted comment. - -2020-10-23 Philippe Gil <gil@adacore.com> - - * libgnat/g-socket.ads: Fix comment typo. - -2020-10-23 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_defined_pragmas.rst (VFA): Remove uage - restrictions in conjunction with Atomic and Aliased. - * gnat_rm.texi: Regenerate. - * aspects.ads (Aspect_Id): Add Aspect_Full_Access_Only. - (Is_Representation_Aspect): Likewise. - (Aspect_Names): Likewise. - (Aspect_Delay): Likewise. - * einfo.ads (Is_Atomic_Or_VFA): Rename into... - (Is_Full_Access): ...this. - (Is_Volatile_Full_Access): Document new usage for Full_Access_Only. - * einfo.adb (Is_Atomic_Or_VFA): Rename into... - (Is_Full_Access): ...this. - * freeze.ads (Is_Atomic_VFA_Aggregate): Rename into... - (Is_Full_Access_Aggregate): ...this. - * freeze.adb (Is_Atomic_VFA_Aggregate): Rename into... - (Is_Full_Access_Aggregate): ...this. Adjust to above renaming. - (Freeze_Array_Type): Likewise. - (Freeze_Entity): Likewise. - * exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Likewise. - (Expand_Record_Aggregate): Likewise. - * exp_ch4.adb (Expand_N_Op_Eq): Likewise. - * exp_ch5.adb (Expand_Assign_Array): Likewise. - * exp_ch8.adb (Evaluation_Required): Likewise. - * layout.adb (Layout_Type): Likewise. - (Set_Composite_Alignment): Likewise. - * sem_aux.ads (Has_Rep_Item): Delete. - * sem_aux.adb (Has_Rep_Item): Likewise. - * sem_attr.adb (Resolve_Attribute) <Attribute_Access>: Implement - new legality rules in C.6(12). - * sem_ch12.adb (Instantiate_Object): Likewise. - * sem_res.adb (Resolve_Actuals): Likewise. - * sem_ch13.adb (Inherit_Delayed_Rep_Aspects): Deal with aspect - Full_Access_Only. - (Check_False_Aspect_For_Derived_Type): Likewise. - (Make_Pragma_From_Boolean_Aspect): Test for the presence of Expr. - Deal with aspect Full_Access_Only. - (Analyze_Aspects_At_Freeze_Point): Likewise. - (Analyze_One_Aspect): Do not set Delay_Required to true even for - Always_Delay boolean aspects if they have no expression. Force - Delay_Required to true for aspect Full_Access_Only in all cases. - Reject aspect Full_Access_Only if not in Ada 2020 mode. - (Check_Aspect_At_End_Of_Declarations): Deal with empty expression. - (Check_Aspect_At_Freeze_Point): Likewise. - (Rep_Item_Entity): Delete. - (Inherit_Aspects_At_Freeze_Point): Align handling for Bit_Order - with that for Scalar_Storage_Order. - * sem_prag.adb (Check_Atomic_VFA): Delete. - (Check_VFA_Conflicts): Likewise. - (Check_Full_Access_Only): New procedure. - (Process_Atomic_Independent_Shared_Volatile): Call to implement - the new legality checks in C.6(8/2) and mark the entity last. - (Analyze_Pragma) <Pragma_Atomic_Components>: Remove obsolete check. - * sem_util.ads (Is_Atomic_Or_VFA_Object): Rename into... - (Is_Full_Access_Object): ...this. - (Is_Subcomponent_Of_Atomic_Object): Rename into... - (Is_Subcomponent_Of_Full_Access_Object): ...this. - * sem_util.adb (Inherit_Rep_Item_Chain): Use Present_In_Rep_Item. - (Is_Atomic_Or_VFA_Object): Rename into... - (Is_Full_Access_Object): ...this. - (Is_Subcomponent_Of_Atomic_Object): Rename into... - (Is_Subcomponent_Of_Full_Access_Object): ...this and adjust. - * snames.ads-tmpl (Name_Full_Access_Only): New name of aspect. - * gcc-interface/decl.c (gnat_to_gnu_entity): Adjust for renaming. - (promote_object_alignment): Likewise. - (gnat_to_gnu_field): Likewise. Rename local variable and use - specific qualifier in error message for Volatile_Full_Access. - * gcc-interface/trans.c (lvalue_required_p): Likewise. - -2020-10-23 Arnaud Charlet <charlet@adacore.com> - - * lib-writ.ads, lib-writ.adb (Write_ALI): No longer read - existing ALI files in -gnatc mode. - -2020-10-23 Arnaud Charlet <charlet@adacore.com> - - * libgnat/g-socthi__mingw.adb (C_Select): Fix logic in code and - make it explicit that we are checking against null values before - dereferencing them. - -2020-10-23 Eric Botcazou <ebotcazou@adacore.com> - - * exp_imgv.adb (Expand_Image_Attribute): For an enumeration type - subject to pragma Discard_Names, convert 'Pos to Long_Long_Integer - before applying 'Img to the result. - -2020-10-23 Ed Schonberg <schonberg@adacore.com> - - * freeze.adb (Freeze_Type_Refs): Add guard on freezing of the - designated type of an access type appearing in the expression, - when expression includes an explicit dereference whose prefix - includes a function call. - -2020-10-23 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Handle - subtype_indication; do not apply range checks for ranges; add - comment saying that others_choices is not allowed. - -2020-10-23 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Aggregate, - Expand_SPARK_Delta_Or_Update): Expand - Iterated_Component_Association occurring within delta - aggregates. - (Expand_SPARK): Apply SPARK-specific expansion to ordinary - aggregates. - -2020-10-23 Johannes Kanig <kanig@adacore.com> - - * exp_util.adb, exp_util.ads - (Containing_Package_With_Ext_Axioms, - Has_Annotate_Pragma_For_External_Axiomatizations): Removed. - * sem_ch8.adb (Analyze_Subprogram_Renaming): Removed code - related to external axiomatizations. - * einfo.ads - (Is_Generic_Actual_Subprogram): Removed comment about external - axiomatization. - -2020-10-23 Ed Schonberg <schonberg@adacore.com> - - * sem_aggr.adb (Resolve_Aggregate): Do not call - Resolve_Container_Aggregate if compilation version is earlier - than Ada_2020. - -2020-10-23 Arnaud Charlet <charlet@adacore.com> - - * doc/gnat_rm/implementation_defined_pragmas.rst: Improve - documentation of pragma Abort_Defer. - * gnat_rm.texi: Regenerate. - -2020-10-23 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_prag.adb (Etype_Or_Dim3): New function. - (Expand_Pragma_Cuda_Execute): Use Etype_Or_Dim3 for temporary - decls. - -2020-10-23 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-fileio.adb (Open): Fix setting of Tempfile. - -2020-10-23 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_prag.adb (Get_Launch_Kernel_Arg_Type): Renamed to - Get_Nth_Arg_Type and made more generic. - (Build_Dim3_Declaration): Now builds a CUDA.Internal.Dim3 - instead of a CUDA.Vector_Types.Dim3. - (Build_Shared_Memory_Declaration): Now infers needed type from - Launch_Kernel instead of using a hard-coded type. - (Expand_Pragma_CUDA_Execute): Build additional temporaries to - store Grids and Blocks. - * rtsfind.ads: Move Launch_Kernel from public to internal - package. - -2020-10-23 Arnaud Charlet <charlet@adacore.com> - - * sem_ch4.adb (Complete_Object_Operation): Only mark entities - referenced if we are compiling the extended main unit. - * sem_attr.adb (Analyze_Attribute [Attribute_Tag]): Record a - reference on the type and its scope. - -2020-10-23 Ed Schonberg <schonberg@adacore.com> - - * freeze.adb (Is_Uninitialized_Aggregate): Recognize an array - aggregate with box initialization, scalar components, and no - component default values. - (Freeze_Entity, Check_Address_Clause): Call it, and simplify - freeze code for entity by removing useless assignment. - -2020-10-23 Javier Miranda <miranda@adacore.com> - - * sem_ch3.adb (Check_Abstract_Overriding): Subprogram renamings - cannot be overridden. - (Derive_Subprogram): Enable setting attribute - Requires_Overriding on functions with controlling access results - of record extensions with a null extension part require - overriding (AI95-00391/06). - -2020-10-23 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Delta_Array_Aggregate): Push scope of - the implicit loop before entering name of the index parameter, - not after; enter name no matter if the identifier has been - decorated before. - -2020-10-23 Gary Dismukes <dismukes@adacore.com> - - * sem_ch4.adb (Analyze_Call): In the case where the call is not - overloaded, check for a call to an abstract nondispatching - operation and flag an error. - -2020-10-23 Eric Botcazou <ebotcazou@adacore.com> - - * gnat1drv.adb (Adjust_Global_Switches): Rewrite again code enabling - or disabling the support for 128-bit integer types. - -2020-10-23 Arnaud Charlet <charlet@adacore.com> - - * alloc.ads, aspects.adb, aspects.ads, atree.adb, atree.ads, - casing.adb, casing.ads, csets.adb, csets.ads, debug.adb, debug.ads, - einfo.adb, einfo.ads, elists.adb, elists.ads, fname.adb, fname.ads, - gnatvsn.adb, gnatvsn.ads, hostparm.ads, indepsw-aix.adb, - indepsw-darwin.adb, indepsw-gnu.adb, indepsw.adb, indepsw.ads, - krunch.adb, krunch.ads, lib-list.adb, lib-sort.adb, lib.adb, lib.ads, - namet-sp.adb, namet-sp.ads, namet.adb, namet.ads, nlists.adb, - nlists.ads, opt.adb, opt.ads, output.adb, output.ads, rident.ads, - scans.adb, scans.ads, scil_ll.adb, scil_ll.ads, sem_aux.ads, - sem_aux.adb, sfn_scan.adb, sinfo.adb, sinfo.ads, sinput.adb, - sinput.ads, snames.adb-tmpl, snames.ads-tmpl, stand.ads, - stringt.adb, stringt.ads, table.adb, table.ads, types.adb, - types.ads, uintp.adb, uintp.ads, uname.adb, uname.ads, - urealp.adb, urealp.ads, vast.adb, vast.ads, widechar.adb, - widechar.ads: Update header. - -2020-10-23 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbin.adb (From_String): Take advantage of - Long_Long_Long_Integer. - * libgnat/s-genbig.ads, libgnat/s-genbig.adb (To_Bignum): New - function taking a Long_Long_Long_Integer. - -2020-10-23 Justin Squirek <squirek@adacore.com> - - * sem_util.adb (Accessibility_Call_Helper): In the selected - component case, test if a prefix is a function call and whether - the subprogram call is not being used in its entirety and use - the Innermost_Master_Scope_Depth in that case. - (Innermost_Master_Scope_Depth): Test against the node_par - instead of its identifier to avoid misattributing unnamed blocks - as not being from source. - (Function_Call_Level): Add calculation for whether a subprogram - call is initializing an object in its entirety. - (Subprogram_Call_Level): Renamed to Function_Call_Level. - -2020-10-23 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Check_External_Properties): Rewrite to match the - SPARK RM description. - -2020-10-23 Piotr Trojanek <trojanek@adacore.com> - - * contracts.adb (Check_Type_Or_Object_External_Properties): - Cleanup. - -2020-10-23 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Analyze_External_Property_In_Decl_Part): Set the - output parameter Expr_Val to the (implicit) pragma argument even - when returning early. - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (GNATRTL_128BIT_PAIRS): Add i-cexten.ads. - * debug.adb (d.H): Document new usage. - * doc/gnat_rm/representation_clauses_and_pragmas.rst (Size Clauses): - Document new limit on 64-bit platforms. - (Component_Size Clauses): Likewise. - (Pragma Pack for Arrays): Likewise. - (Pragma Pack for Records): Likewise. - (Record Representation Clauses): Likewise. - * gnat_rm.texi: Regenerate. - * gnat1drv.adb (Adjust_Global_Switches): Rewrite code enabling or - disabling the support for 128-bit integer types. - * switch-c.adb (Scan_Front_End_Switches): Do not deal with e128. - * usage.adb (Write_Switch_Char): Do not print -gnate128 switch. - * libgnat/i-cexten__128.ads: New file. - -2020-10-22 Javier Miranda <miranda@adacore.com> - - * einfo.ads (Has_Limited_View): New synthesized attribute. - * einfo.adb (Has_Limited_View): New synthesized attribute. - (Set_Limited_View): Complete assertion. - * sem_ch10.ads (Is_Visible_Through_Renamings): Make this routine - public to invoke it from Find_Expanded_Name and avoid reporting - spurious errors on renamings of limited-with packages. - (Load_Needed_Body): Moved to have this spec alphabetically - ordered. - * sem_ch10.adb (Is_Visible_Through_Renamings): Moved to library - level. - (Is_Limited_Withed_Unit): New subprogram. - * sem_ch3.adb (Access_Type_Declaration): Adding protection to - avoid reading attribute Entity() when not available. - * sem_ch8.adb (Analyze_Package_Renaming): Report error on - renamed package not visible through context clauses. - (Find_Expanded_Name): Report error on renamed package not - visible through context clauses; handle special case where the - prefix is a renaming of a (now visible) shadow package. - -2020-10-22 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_prag.adb (Get_Launch_Kernel_Arg_Type): New function. - (Build_Shared_Memory_Declaration): Use - Get_Launch_Kernel_Arg_Type. - (Build_Stream_Declaration): Use Get_Launch_Kernel_Arg_Type. - * rtsfind.ads: Remove RO_IC_Unsigned_Long_Long. - -2020-10-22 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-imenne.adb, libgnat/s-imgrea.adb: Add assertions. - -2020-10-22 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-imgrea.adb (Set_Image_Real): Update annotations. - -2020-10-22 Steve Baird <baird@adacore.com> - - * aspects.ads: Introduce the subtype Nonoverridable_Aspect_Id, - whose Static_Predicate reflects the list of nonoverridable - aspects given in Ada RM 13.1.1(18.7). - * sem_util.ads, sem_util.adb: Add two new visible subprograms, - Check_Inherited_Nonoverridable_Aspects and Is_Confirming. The - former is used to check the consistency of inherited - nonoverridable aspects from multiple sources. The latter - indicates whether two aspect specifications for a nonoverridable - aspect are confirming. Because of compatibility concerns in - compiling QGen, Is_Confirming always returns True if - Relaxed_RM_Semantics (i.e., -gnatd.M) is specified. - * sem_ch3.adb (Derived_Type_Declaration): Call new - Check_Inherited_Nonoverridable_Aspects procedure if interface - list is non-empty. - * sem_ch9.adb (Check_Interfaces): Call new - Check_Inherited_Nonoverridable_Aspects procedure if interface - list is non-empty. - * sem_ch13.adb (Analyze_Aspect_Specifications): When an explicit - aspect specification overrides an inherited nonoverridable - aspect, check that the explicit specification is confirming. - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.ads (Check_Compile_Time_Size): Adjust size limit. - -2020-10-22 Richard Kenner <kenner@adacore.com> - - * sprint.adb (pg, po, ps): Use {Push,Pop}_Output. - * treepr.adb (pl, pn): Likewise. - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_advice.rst: Minor fix. - * gnat_rm.texi: Regenerate. - -2020-10-22 Steve Baird <baird@adacore.com> - - * sem_util.adb (Is_Container_Aggregate): A new local predicates - which indicates whether a given expression is a container - aggregate. The implementation of this function is incomplete; in - the unusual case of a record aggregate (i.e., not a container - aggregate) of a type whose Aggregate aspect is specified, the - function will incorrectly return True. - (Immediate_Context_Implies_Is_Potentially_Unevaluated): Improve - handling of aggregate components. - (Is_Repeatedly_Evaluated): Test for container aggregate - components along with existing test for array aggregate - components. - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * exp_fixd.adb (Fpt_Value): Fold if-then-else with identical arms. - -2020-10-22 Ed Schonberg <schonberg@adacore.com> - - * par-ch4.adb (P_Iterated_Component_Association): If the - construct includes an iterator filter it corresponds to an - Iterated_Element_Association, so build the proper node for it. - * exp_aggr.adb (Expand_Container_Aggregate, Aggregate_Size): If - the component is an Iterated_Element_Association, treat it as - having a non-static size. - -2020-10-22 Ghjuvan Lacambre <lacambre@adacore.com> - - * scng.adb (Scan): Check if any letter of the token is - uppercase. - -2020-10-22 Justin Squirek <squirek@adacore.com> - - * sem_util.adb (Accessibility_Level_Helper): Conversions to - named access types get the level associated with the named - access type. - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (Has_Constrained_Partial_View): Add "base type" marker. - -2020-10-22 Gary Dismukes <dismukes@adacore.com> - - * einfo.adb (Has_Constrained_Partial_View): Apply Base_Type to Id. - * sem_res.adb (Resolve_Actuals.Check_Aliased_Parameter): Remove - "not Is_Generic_Type" test and call - Object_Type_Has_Constrained_Partial_View instead of - Has_Constrained_Partial_View. Improve related error message to - say "does not statically match" instead of just "does not - match". - -2020-10-22 Steve Baird <baird@adacore.com> - - * sem_util.ads, sem_util.adb: Declare and implement a new - predicate, Derivation_Too_Early_To_Inherit. This function - indicates whether a given derived type fails to inherit a given - streaming-related attribute from its parent type because the - declaration of the derived type precedes the corresponding - attribute_definition_clause of the parent. - * exp_tss.adb (Find_Inherited_TSS): Call - Derivation_Too_Early_To_Inherit instead of unconditionally - assuming that a parent type's streaming attribute is available - for inheritance by an immediate descendant type. - * sem_attr.adb (Stream_Attribute_Available): Call - Derivation_Too_Early_To_Inherit instead of unconditionally - assuming that a parent type's streaming attribute is available - for inheritance by an immediate descendant type. - * exp_attr.adb (Default_Streaming_Unavailable): A new predicate; - given a type, indicates whether predefined (as opposed to - user-defined) streaming operations for the type should be - implemented by raising Program_Error. - (Expand_N_Attribute_Reference): For each of the 4 - streaming-related attributes (i.e., Read, Write, Input, Output), - after determining that no user-defined implementation is - available (including a Stream_Convert pragma), call - Default_Streaming_Unavailable; if that call returns True, then - implement the streaming operation as "raise Program_Error;". - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * checks.adb (Apply_Float_Conversion_Check): Saturate the bounds - of the check to those of the base type of the expression. - -2020-10-22 Justin Squirek <squirek@adacore.com> - - * checks.adb (Apply_Accessibility_Check): Modify condition to - avoid flawed optimization and use Get_Accessibility over - Extra_Accessibility. - * exp_attr.adb: Remove inclusion of Exp_Ch2.adb. - * exp_ch2.adb, exp_ch2.ads (Param_Entity): Moved to sem_util. - * exp_ch3.ads (Init_Proc_Level_Formal): New function. - * exp_ch3.adb (Build_Init_Procedure): Add extra accessibility - formal for init procs when the associated type is a limited - record. - (Build_Initialization_Call): Add condition to handle propagation - of the new extra accessibility paramter actual needed for init - procs. - (Init_Proc_Level_Formal): Created to fetch a the extra - accessibility parameter associated with init procs if one - exists. - * exp_ch4.adb (Build_Attribute_Reference): Modify static check - to be dynamic. - * exp_ch6.adb (Add_Cond_Expression_Extra_Actual): Move logic - used to expand conditional expressions used as actuals for - anonymous access formals. - (Expand_Call_Helper): Remove extranious accessibility - calculation logic. - * exp_util.adb: Remove inclusion of Exp_Ch2.adb. - * par-ch3.adb (P_Array_Type_Definition): Properly set - Aliased_Present on access definitions - * sem_attr.adb (Resolve_Attribute): Replace instances for - Object_Access_Level with Static_Accessibility_Level. - * sem_ch13.adb (Storage_Pool): Replace instances for - Object_Access_Level with Static_Accessibility_Level. - * sem_ch6.adb (Check_Return_Construct_Accessibility): Replace - instances for Object_Access_Level with - Static_Accessibility_Level. - * sem_ch9.adb (Analyze_Requeue): Replace instances for - Object_Access_Level with Static_Accessibility_Level. - * sem_res.adb (Check_Aliased_Parameter, - Check_Allocator_Discrim_Accessibility, Valid_Conversion): - Replace instances for Object_Access_Level with - Static_Accessibility_Level. - * sem_util.adb, sem_util.ads (Accessibility_Level_Helper): - Created to centralize calculation of accessibility levels. - (Build_Component_Subtype): Replace instances for - Object_Access_Level with Static_Accessibility_Level. - (Defining_Entity): Add extra parameter to dictate whether an - error is raised or empty is return in the case of an irrelevant - N. - (Dynamic_Accessibility_Level): Rewritten to use - Accessibility_Level_Helper. - (Is_View_Conversion): Check membership against Etype to capture - nodes like explicit dereferences which have types but are not - expanded names or identifers. - (Object_Access_LeveL): Removed. - (Param_Entity): Moved from sem_util. - (Static_Accessibility_Level): Created as a replacement to - Object_Access_Level, it also uses Accessibility_Level_Helper for - its implementation. - * snames.ads-tmpl: Added new name for extra accessibility - parameter in init procs. - -2020-10-22 Piotr Trojanek <trojanek@adacore.com> - - * exp_prag.adb (Expand_Pragma_Contract_Cases, - Expand_Pragma_Loop_Variant): Reuse Append_New_To. - * sem_prag.adb (Analyze_Contract_Cases_In_Decl_Part): Fix typo. - (Analyze_Pre_Post_Condition): Refactor repeated calls to - Defining_Entity. - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_defined_characteristics.rst: Minor - fixes. - * gnat_rm.texi: Regenerate. - -2020-10-22 Piotr Trojanek <trojanek@adacore.com> - - * sem_warn.adb (Check_Unused_Withs): Move local variables from - to a nested procedure; Lunit is passed as a parameter to - Check_System_Aux and its type is refined from Node_Id to - Entity_Id; Cnode is now a constant. - -2020-10-22 Patrick Bernardi <bernardi@adacore.com> - - * libgnat/s-rident.ads (Profile_Info): Use a common profile - definition for Jorvik and GNAT Extended Ravenscar, using the - GNAT Extended Ravenscar definition. - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (64-bit platforms): Add GNATRTL_128BIT_PAIRS to - the LIBGNAT_TARGET_PAIRS list and also GNATRTL_128BIT_OBJS to - the EXTRA_GNATRTL_NONTASKING_OBJS list. - -2020-10-22 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_prag.adb (Process_Convention, - Process_Import_Or_Interface): Fix error message. - -2020-10-22 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_ch13.adb (Make_Aitem_Pragma): Turn into function. This - removes a side-effect on the Aitem variable. - (Analyze_Aspect_Specifications): Handle Suppress and Unsuppress - aspects differently from the Linker_Section aspect. - (Ceck_Aspect_At_Freeze_Point): Don't expect Suppress/Unsuppress - to be delayed anymore. - -2020-10-22 Ed Schonberg <schonberg@adacore.com> - - * sem_aggr.adb: (Resolve_Container_Aggregate): For an indexed - container, verify that expressions and component associations - are not both present. - * exp_aggr.adb: Code reorganization, additional comments. - (Expand_Container_Aggregate): Use Aggregate_Size for Iterated_ - Component_Associations for indexed aggregates. If present, the - default value of the formal in the constructor function is used - when the size of the aggregate cannot be determined statically. - -2020-10-22 Eric Botcazou <ebotcazou@adacore.com> - - * sem_attr.adb (Eval_Attribute): Fix oversight for Bit_Position. - -2020-10-22 Ed Schonberg <schonberg@adacore.com> - - * sem_util.ads, sem_util.adb (Check_Ambiguous_Aggregate): When a - subprogram call is found to be ambiguous, check whether - ambiguity is caused by an aggregate actual. and indicate that - it should carry a type qualification. - * sem_ch4.adb (Traverse_Hoonyms, Try_Primitive_Operation): Call - it. - * sem_res.adb (Report_Ambiguous_Argument): Call it. - -2020-10-22 Piotr Trojanek <trojanek@adacore.com> - - * sem_warn.adb (Check_One_Unit): Avoid repeated calls by using a - local variable Lunit; remove local constant Eitem, which was - identical to Lunit. - -2020-10-22 Alexandre Oliva <oliva@adacore.com> - - * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <x86*-vxworks*>: Select - nolibm and wraplf variants like other vxworks ports. - -2020-10-22 Martin Liska <mliska@suse.cz> - - PR c/94722 - * gcc-interface/utils.c (handle_no_stack_protect_attribute): - New. - (handle_stack_protect_attribute): Add error message for a - no_stack_protector function. - -2020-10-22 Alexandre Oliva <oliva@adacore.com> - - * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <lynxos178>: Rely on - Aux_Long_Float for all real types. - -2020-10-22 Alexandre Oliva <oliva@adacore.com> - - * Makefile.rtl (LIBGNAT_TARGET_PAIRS): Use Long Float-based - variant of Aux_Short_Float and Aux_Float on vxworks targets. - * libgnat/a-nashfl__wraplf.ads: New. - * libgnat/a-nuaufl__wraplf.ads: New. - -2020-10-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <sparc*-sun-solaris>: - Use wraplf version of a-nallfl. - -2020-10-22 Alexandre Oliva <oliva@adacore.com> - - * Makefile.rtl (LIBGNAT_TARGET_PAIRS): Use - a-nallfl__wraplf.ads on aarch64-* and ppc*-linux-gnu targets. - * libgnat/a-nallfl__wraplf.ads: New. - -2020-10-22 Jan Hubicka <hubicka@ucw.cz> - - * gcc-interface/trans.c: Include tree-nested.h - (walk_nesting_tree): Update for new nested function info. - -2020-10-21 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add a-llltio, a-lllwti, - a-lllzti and remove a-timoau, a-wtmoau and a-ztmoau. - (GNATRTL_128BIT_PAIRS): Add a-tiinio.adb, a-timoio.adb, a-wtinio.adb, - a-wtmoio.adb, a-ztinio.adb and a-ztmoio.adb. - * impunit.adb (Non_Imp_File_Names_95): Add a-llltio, a-lllwti and - a-lllzti. - * krunch.ads: Document trick for Ada.Long_Long_Long_Integer_*_IO. - * krunch.adb (Krunch): Add trick for Ada.Long_Long_Long_Integer_*_IO. - * libgnat/a-llltio.ads: Instantiate Ada.Text_IO.Integer_IO. - * libgnat/a-lllwti.ads: Instantiate Ada.Wide_Text_IO.Integer_IO. - * libgnat/a-lllzti.ads: Instantiate Ada.Wide_Wide_Text_IO.Integer_IO. - * libgnat/a-tigeau.ads (Load_Integer): New procedure. - * libgnat/a-tigeau.adb (Load_Integer): Likewise. - * libgnat/a-tiinau.ads, libgnat/a-tiinau.adb: Change to generic - package. - * libgnat/a-tiinio.adb: Instantiate it. - * libgnat/a-tiinio__128.adb: Likewise. - * libgnat/a-timoau.ads, libgnat/a-timoau.adb: Change to generic - package. - * libgnat/a-timoio.adb: Instantiate it. - * libgnat/a-timoio__128.adb: Likewise. - * libgnat/a-wtgeau.ads (Load_Integer): New procedure. - * libgnat/a-wtgeau.adb (Load_Integer): Likewise. - * libgnat/a-wtinau.ads, libgnat/a-wtinau.adb: Change to generic - package. - * libgnat/a-wtinio.adb: Instantiate it. - * libgnat/a-wtinio__128.adb: Likewise. - * libgnat/a-wtmoau.ads, libgnat/a-wtmoau.adb: Change to generic - package. - * libgnat/a-wtmoio.adb: Instantiate it. - * libgnat/a-wtmoio__128.adb: Likewise. - * libgnat/a-ztgeau.ads (Load_Integer): New procedure. - * libgnat/a-ztgeau.adb (Load_Integer): Likewise. - * libgnat/a-ztinau.ads, libgnat/a-ztinau.adb: Change to generic - package. - * libgnat/a-ztinio.adb: Instantiate it. - * libgnat/a-ztinio__128.adb: Likewise. - * libgnat/a-ztmoau.ads, libgnat/a-ztmoau.adb: Change to generic - package. - * libgnat/a-ztmoio.adb: Instantiate it. - * libgnat/a-ztmoio__128.adb: Likewise. - -2020-10-21 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Freeze_Subprogram_Body): Do not move the freeze - node of the package body enclosing the instance when its parent - is in the same declarative part as the freeze node of the parent. - -2020-10-21 Steve Baird <baird@adacore.com> - - * exp_ch6.adb (Insert_Post_Call_Actions): When a function's - result type requires finalization and we decide to make copy of - a call to the function and subsequently refer only to the copy, - then don't forget to finalize the original function result - object. - -2020-10-21 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-widint, - s-widthi, s-widuns, s-widuns. - (GNATRTL_128BIT_OBJS): Add s-imglllb, s-imgllli, s-imglllu, s-imglllw, - s-valllli, s-vallllu, s-widllli, s-widlllu. - * exp_imgv.adb (Expand_Image_Attribute): Deal with 128-bit types. - (Expand_Value_Attribute): Likewise. - (Expand_Width_Attribute): Likewise. - * exp_put_image.adb (Build_Elementary_Put_Image_Call): Likewise. - * krunch.adb (Krunch): Deal with s-img, s-val and s-wid prefixes. - * rtsfind.ads (RTU_Id): Add System_Img_LLLI, System_Img_LLLU, - System_Val_LLLI, System_Val_LLL, System_Wid_Int, System_Wid_LLLI, - System_Wid_LLLU, System_Wid_Uns). - (RE_Id): Add RE_Image_Long_Long_Long_Integer, - RE_Image_Long_Long_Long_Unsigned, - RE_Put_Image_Long_Long_Long_Integer, - RE_Put_Image_Long_Long_Long_Unsigned, - RE_Long_Long_Long_Unsigned, RE_Value_Long_Long_Long_Integer, - RE_Value_Long_Long_Long_Unsigned, RE_Width_Integer, - RE_Width_Long_Long_Long_Integer, RE_Width_Long_Long_Long_Unsigned, - RE_Width_Unsigned, RE_Image_Long_Long_Long_Integer, - RE_Image_Long_Long_Long_Unsigned, RE_Put_Image_Long_Long_Long_Integer, - RE_Put_Image_Long_Long_Long_Unsigned, RE_Long_Long_Long_Unsigned, - RE_Value_Long_Long_Long_Integer, RE_Value_Long_Long_Long_Unsigned, - RE_Width_Integer, RE_Width_Long_Long_Long_Integer, - RE_Width_Long_Long_Long_Unsigned, RE_Width_Unsigned. - * libgnat/s-imageb.ads, libgnat/s-imageb.adb: New generic - package. - * libgnat/s-imagei.ads, libgnat/s-imagei.adb: Likewise. - * libgnat/s-imageu.ads, libgnat/s-imageu.adb: Likewise. - * libgnat/s-imagew.ads, libgnat/s-imagew.adb: Likewise. - * libgnat/s-imgbiu.ads: Instantiate System.Image_B. - * libgnat/s-imgbiu.adb: Add pragma No_Body. - * libgnat/s-imgint.ads: Instantiate System.Image_I. - * libgnat/s-imgint.adb: Add pragma No_Body. - * libgnat/s-imgllb.ads: Instantiate System.Image_B. - * libgnat/s-imgllb.adb: Add pragma No_Body0 - * libgnat/s-imglli.ads: Instantiate System.Image_I. - * libgnat/s-imglli.adb: Add pragma No_Body. - * libgnat/s-imglllb.ads: Instantiate System.Image_B. - * libgnat/s-imgllli.ads: Instantiate System.Image_I. - * libgnat/s-imglllu.ads: Instantiate System.Image_U. - * libgnat/s-imglllw.ads: Instantiate System.Image_W. - * libgnat/s-imgllu.ads: Instantiate System.Image_U. - * libgnat/s-imgllu.adb: Add pragma No_Body. - * libgnat/s-imgllw.ads: Instantiate System.Image_W. - * libgnat/s-imgllw.adb: Add pragma No_Body. - * libgnat/s-imgrea.adb: Remove clauses for System.Unsigned_Types. - * libgnat/s-imguns.ads: Instantiate System.Image_U. - * libgnat/s-imguns.adb: Add pragma No_Body. - * libgnat/s-imgwiu.ads: Instantiate System.Image_W. - * libgnat/s-imgwiu.adb: Add pragma No_Body. - * libgnat/s-putima.ads (Long_Long_Long_Unsigned): New subtype. - (Put_Image_Long_Long_Long_Unsigned): New procedure. - * libgnat/s-putima.adb (Small): Rename to Integer_Images. - (Large): Rename to LL_Integer_Images. - (LLL_Integer_Images): New instantiation. - (Put_Image_Long_Long_Long_Integer): New renaming. - (Put_Image_Long_Long_Long_Unsigned): Likewise. - * libgnat/s-valint.ads: Instantiate System.Value_I. - * libgnat/s-valint.adb: Add pragma No_Body. - * libgnat/s-vallli.ads: Instantiate System.Value_I. - * libgnat/s-vallli.adb: Add pragma No_Body. - * libgnat/s-valllli.ads: Instantiate System.Value_I. - * libgnat/s-vallllu.ads: Instantiate System.Value_U. - * libgnat/s-valllu.ads: Instantiate System.Value_U. - * libgnat/s-valllu.adb: Add pragma No_Body. - * libgnat/s-valuei.ads, libgnat/s-valuei.adb: New generic - package. - * libgnat/s-valueu.ads, libgnat/s-valueu.adb: Likewise. - * libgnat/s-valuns.ads: Instantiate System.Value_U. - * libgnat/s-valuns.adb: Add pragma No_Body. - * libgnat/s-widint.ads: Instantiate System.Width_I. - * libgnat/s-widlli.ads: Likewise. - * libgnat/s-widlli.adb: Add pragma No_Body. - * libgnat/s-widllli.ads: Instantiate System.Width_I. - * libgnat/s-widlllu.ads: Instantiate System.Width_U. - * libgnat/s-widllu.ads: Likewise. - * libgnat/s-widllu.adb: Add pragma No_Body. - * libgnat/s-widthi.ads, libgnat/s-widthi.adb: New generic - package. - * libgnat/s-widthu.ads, libgnat/s-widthu.adb: Likewise. - * libgnat/s-widuns.ads: Instantiate System.Width_U. - -2020-10-21 Eric Botcazou <ebotcazou@adacore.com> - - * set_targ.adb (DTN): Fix oversight. - (Read_Target_Dependent_Values): Do not error out on missing - Long_Long_Long_Size entry and reuse Long_Long_Size for it. - -2020-10-21 Piotr Trojanek <trojanek@adacore.com> - - * exp_aggr.adb (Gen_Loop): Analyze copy of the expression in the - scope of the implicit loop with name of the index parameter - visible. - -2020-10-21 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (GNATRTL_128BIT_PAIRS): New variable. - (GNATRTL_128BIT_OBJS): Likewise. - (Windows): In 64-bit mode, add the former to LIBGNAT_TARGET_PAIRS and - the latter to EXTRA_GNATRTL_NONTASKING_OBJS. - (x86_64/linux): Likewise, but unconditionally. - (GNATRTL_NONTASKING_OBJS): Add s-aridou, s-exponn, s-expont, - s-exponu. - * ada_get_targ.adb (Get_Long_Long_Long_Size): New function. - * checks.adb (Apply_Arithmetic_Overflow_Strict): Use Integer_Type_For - to find an appropriate integer type; if it does not exist and the max - integer size is larger than 64, use the 128-bit arithmetic routines. - * cstand.adb (Create_Standard): Build Standard_Long_Long_Long_Integer - and its base type. Use it for Etype of Any_Integer, Any_Modular and - Any_Numeric. Use its size for Build Standard_Long_Long_Long_Unsigned - and Universal_Integer. - (Print_Standard): Print Long_Long_Long_Integer. - * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Mod>: Adjust - comment. - * exp_ch3.adb (Simple_Init_Initialize_Scalars_Type): Deal with 128-bit - types. - * exp_ch4.adb (Expand_Array_Comparison): Likewise. - (Expand_N_Op_Expon): Likewise. - (Narrow_Large_Operation): Likewise. - * exp_dbug.adb (Bounds_Match_Size): Handle 128-bit size. - * exp_fixd.adb (Build_Double_Divide_Code): Use RE_Double_Divide64. - * exp_intr.adb (Expand_Binary_Operator_Call): Handle 128-bit size. - * exp_pakd.ads (E_Array): Extend range to 127. - (Bits_Id): Fill in up to 127. - (Get_Id): Likewise. - (GetU_Id): Likewise. - (Set_Id): Likewise. - (SetU_Id): Likewise. - * exp_pakd.adb (Revert_Storage_Order): Handle 128-bit size. - * exp_util.adb (Integer_Type_For): Likewise. - (Small_Integer_Type_For): Likewise. - * fname.adb (Is_Predefined_File_Name): Do not return False for names - larger than 12 characters if they start with "s-". - * freeze.adb (Adjust_Esize_For_Alignment): Change the maximum value - to System_Max_Integer_Size. - (Check_Suspicious_Modulus): Adjust comment. - (Freeze_Entity): Likewise. - * get_targ.ads (Get_Long_Long_Long_Size): New function. - * get_targ.adb (Get_Long_Long_Long_Size): Likewise. - (Width_From_Size): Deal with 128-bit size. - * gnat1drv.adb (Adjust_Global_Switches): Deal with 128-bit types. - * impunit.adb (Get_Kind_Of_File): Bump buffer size. Accept files with - 13 characters if they start with 's'. Compare slice of Buffer. - (Not_Impl_Defined_Unit): Accept files with 13 characters if they start - with 's'. - * krunch.ads: Document length for 128-bit support units. - * krunch.adb (Krunch): Set length to 9 for 128-bit support units. - * layout.adb (Layout_Type): Use System_Max_Integer_Size as alignment - limit. - * rtsfind.ads (RTU_Id): Add System_Arith_128, - System_Compare_Array_Signed_128, System_Compare_Array_Unsigned_128, - System_Exn_LLLI, System_Exp_LLLU, System_Pack_[65..127]. - (RE_Id): Add RE_Integer_128, RE_Unsigned_128, RE_Add_With_Ovflo_Check128 - RE_Multiply_With_Ovflo_Check128, RE_Subtract_With_Ovflo_Check128, - RE_Bswap_128, RE_Compare_Array_S128, RE_Compare_Array_U128, - RE_Exn_Long_Long_Long_Integer, RE_Exp_Long_Long_Long_Integer, - RE_Exp_Long_Long_Long_Unsigned, RE_Bits_[65-127], RE_Get_[65-127], - RE_Set_[65-127], RE_IS_Is16, RE_IS_Iu16, RE_Integer_128 and - RE_Unsigned_128. Rename RE_Add_With_Ovflo_Check, RE_Double_Divide, - RE_Multiply_With_Ovflo_Check, RE_Scaled_Divide and - RE_Subtract_With_Ovflo_Check. Remove RE_IS_Iz1, RE_IS_Iz2, RE_IS_Iz4, - RE_IS_Iz8, RE_Long_Unsigned, RE_Short_Unsigned, RE_Short_Short_Unsigned - (RE_Unit_Table): Likewise. - * sem_aux.adb (Corresponding_Unsigned_Type): Deal with a size equal to - that of Standard_Long_Long_Long_Integer. - (First_Subtype): Deal with Standard_Long_Long_Long_Integer'Base. - * sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Attribute_Size>: - Check the size against powers of 2 and System_Max_Integer_Size for - objects as well. - (Set_Enum_Esize): Deal with 128-bit bounds. - * sem_ch3.adb (Set_Modular_Size): Handle 128-bit size. - (Modular_Type_Declaration): Deal with 128-bit types. - (Signed_Integer_Type_Declaration): Support derivation from - Standard_Long_Long_Long_Integer. - * sem_ch4.adb (Analyze_Mod): Handle 128-bit modulus. - * sem_intr.adb: Add with and use clauses for Ttypes. - (Check_Shift): Handle 128-bit size and modulus. - * sem_prag.adb (Analyze_Pragma) <Pragma_Initialize_Scalars>: Deal - with Signed_128 and Unsigned_128. - (Analyze_Integer_Value): Handle 128-bit size. - * sem_util.ads (Addressable): Adjust description. - * sem_util.adb (Addressable): Return true for 128 if the system - supports 128 bits. - (Set_Invalid_Binder_Values): Deal with Signed_128 and Unsigned_128. - * set_targ.ads (Long_Long_Long_Size): New variable. - * set_targ.adb (S_Long_Long_Long_Size): New constant. - (DTN): Add entry for S_Long_Long_Long_Size. - (DTV): Add entry for Long_Long_Long_Size. - (Set_Targ): Set Long_Long_Long_Size. - * snames.ads-tmpl (Name_Max_Integer_Size): New attribute name. - (Name_Signed_128): New scalar name. - (Name_Unsigned_128): Likewise. - (Scalar_Id): Adjust. - (Integer_Scalar_Id): Likewise. - (Attribute_Id): Add Attribute_Max_Integer_Size. - * stand.ads (Standard_Entity_Type): Add S_Long_Long_Long_Integer. - (Standard_Long_Long_Long_Integer): New renaming. - (Universal_Integer): Adjust description. - (Standard_Long_Long_Long_Unsigned): New variable. - * switch-c.adb (Scan_Front_End_Switches): Deal with -gnate128. - * ttypes.ads (Standard_Long_Long_Long_Integer_Size): New variable. - (Standard_Long_Long_Long_Integer_Width): Likewise. - (System_Max_Integer_Size): Turn into variable. - (System_Max_Binary_Modulus_Power): Likewise. - * uintp.ads (Uint_127): New constant. - * uintp.adb (UI_Power_2): Extednd to 128. - (UI_Power_10): Likewise. - (UI_Expon): Deal with exponent up to 128 specially. - * usage.adb (Write_Switch_Char): Print -gnate128 switch. - * libgnat/a-tifiio.adb (Put_Scaled): Call Scaled_Divide64. - * libgnat/interfac__2020.ads (Integer_128): New integer type. - (Unsigned_128): New modular type. - (Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, - Rotate_Right): New intrinsic functions operating on it. - * libgnat/s-aridou.ads, libgnat/s-aridou.adb: New generic - package. - * libgnat/s-arit64.ads, libgnat/s-arit64.adb: Instantiate - System.Arithmetic_Double. - * libgnat/s-arit128.ads, libgnat/s-arit128.adb: Likewise. - * libgnat/s-bytswa.ads: Add with clause for Interfaces, use subtypes - of unsigned types defined in Interfaces and add Bswap_128. - * libgnat/s-casi128.ads, libgnat/s-casi128.adb: New package. - * libgnat/s-caun128.ads, libgnat/s-caun128.adb: Likewise. - * libgnat/s-exnint.ads: Instantiate System.Exponn. - * libgnat/s-exnint.adb: Add pragma No_Body. - * libgnat/s-exnlli.ads: Instantiate System.Exponn. - * libgnat/s-exnlli.adb: Add pragma No_Body. - * libgnat/s-exnllli.ads: Instantiate System.Exponn. - * libgnat/s-expint.ads: Likewise. - * libgnat/s-expint.adb: Add pragma No_Body. - * libgnat/s-explli.ads: Instantiate System.Exponn. - * libgnat/s-explli.adb: Add pragma No_Body. - * libgnat/s-expllli.ads: Instantiate System.Exponn. - * libgnat/s-explllu.ads: Instantiate System.Exponu. - * libgnat/s-expllu.ads: Likewise. - * libgnat/s-expllu.adb: Add pragma No_Body. - * libgnat/s-exponn.ads, libgnat/s-exponn.adb: New generic - function. - * libgnat/s-expont.ads, libgnat/s-expont.adb: Likewise. - * libgnat/s-exponu.ads, libgnat/s-exponu.adb: Likewise. - * libgnat/s-expuns.ads, libgnat/s-expuns.adb: Likewise. - * libgnat/s-pack65.ads, libgnat/s-pack65.adb: New package. - * libgnat/s-pack66.ads, libgnat/s-pack66.adb: New package. - * libgnat/s-pack67.ads, libgnat/s-pack67.adb: New package. - * libgnat/s-pack68.ads, libgnat/s-pack68.adb: New package. - * libgnat/s-pack69.ads, libgnat/s-pack69.adb: New package. - * libgnat/s-pack70.ads, libgnat/s-pack70.adb: New package. - * libgnat/s-pack71.ads, libgnat/s-pack71.adb: New package. - * libgnat/s-pack72.ads, libgnat/s-pack72.adb: New package. - * libgnat/s-pack73.ads, libgnat/s-pack73.adb: New package. - * libgnat/s-pack74.ads, libgnat/s-pack74.adb: New package. - * libgnat/s-pack75.ads, libgnat/s-pack75.adb: New package. - * libgnat/s-pack76.ads, libgnat/s-pack76.adb: New package. - * libgnat/s-pack77.ads, libgnat/s-pack77.adb: New package. - * libgnat/s-pack78.ads, libgnat/s-pack78.adb: New package. - * libgnat/s-pack79.ads, libgnat/s-pack79.adb: New package. - * libgnat/s-pack80.ads, libgnat/s-pack80.adb: New package. - * libgnat/s-pack81.ads, libgnat/s-pack81.adb: New package. - * libgnat/s-pack82.ads, libgnat/s-pack82.adb: New package. - * libgnat/s-pack83.ads, libgnat/s-pack83.adb: New package. - * libgnat/s-pack84.ads, libgnat/s-pack84.adb: New package. - * libgnat/s-pack85.ads, libgnat/s-pack85.adb: New package. - * libgnat/s-pack86.ads, libgnat/s-pack86.adb: New package. - * libgnat/s-pack87.ads, libgnat/s-pack87.adb: New package. - * libgnat/s-pack88.ads, libgnat/s-pack88.adb: New package. - * libgnat/s-pack89.ads, libgnat/s-pack89.adb: New package. - * libgnat/s-pack90.ads, libgnat/s-pack90.adb: New package. - * libgnat/s-pack91.ads, libgnat/s-pack91.adb: New package. - * libgnat/s-pack92.ads, libgnat/s-pack92.adb: New package. - * libgnat/s-pack93.ads, libgnat/s-pack93.adb: New package. - * libgnat/s-pack94.ads, libgnat/s-pack94.adb: New package. - * libgnat/s-pack95.ads, libgnat/s-pack95.adb: New package. - * libgnat/s-pack96.ads, libgnat/s-pack96.adb: New package. - * libgnat/s-pack97.ads, libgnat/s-pack97.adb: New package. - * libgnat/s-pack98.ads, libgnat/s-pack98.adb: New package. - * libgnat/s-pack99.ads, libgnat/s-pack99.adb: New package. - * libgnat/s-pack100.ads, libgnat/s-pack100.adb: New package. - * libgnat/s-pack101.ads, libgnat/s-pack101.adb: New package. - * libgnat/s-pack102.ads, libgnat/s-pack102.adb: New package. - * libgnat/s-pack103.ads, libgnat/s-pack103.adb: New package. - * libgnat/s-pack104.ads, libgnat/s-pack104.adb: New package. - * libgnat/s-pack105.ads, libgnat/s-pack105.adb: New package. - * libgnat/s-pack106.ads, libgnat/s-pack106.adb: New package. - * libgnat/s-pack107.ads, libgnat/s-pack107.adb: New package. - * libgnat/s-pack108.ads, libgnat/s-pack108.adb: New package. - * libgnat/s-pack109.ads, libgnat/s-pack109.adb: New package. - * libgnat/s-pack110.ads, libgnat/s-pack110.adb: New package. - * libgnat/s-pack111.ads, libgnat/s-pack111.adb: New package. - * libgnat/s-pack112.ads, libgnat/s-pack112.adb: New package. - * libgnat/s-pack113.ads, libgnat/s-pack113.adb: New package. - * libgnat/s-pack114.ads, libgnat/s-pack114.adb: New package. - * libgnat/s-pack115.ads, libgnat/s-pack115.adb: New package. - * libgnat/s-pack116.ads, libgnat/s-pack116.adb: New package. - * libgnat/s-pack117.ads, libgnat/s-pack117.adb: New package. - * libgnat/s-pack118.ads, libgnat/s-pack118.adb: New package. - * libgnat/s-pack119.ads, libgnat/s-pack119.adb: New package. - * libgnat/s-pack120.ads, libgnat/s-pack120.adb: New package. - * libgnat/s-pack121.ads, libgnat/s-pack121.adb: New package. - * libgnat/s-pack122.ads, libgnat/s-pack122.adb: New package. - * libgnat/s-pack123.ads, libgnat/s-pack123.adb: New package. - * libgnat/s-pack124.ads, libgnat/s-pack124.adb: New package. - * libgnat/s-pack125.ads, libgnat/s-pack125.adb: New package. - * libgnat/s-pack126.ads, libgnat/s-pack126.adb: New package. - * libgnat/s-pack127.ads, libgnat/s-pack127.adb: New package. - * libgnat/s-rannum.ads (Random): New function returning 128-bit. - * libgnat/s-rannum.adb (Random): Implement it. - * libgnat/s-scaval.ads: Add with clause for Interfaces, use subtypes - of unsigned types defined in Interfaces. - * libgnat/s-scaval.adb: Add use clause for Interfaces. - * libgnat/s-scaval__128.ads, libgnat/s-scaval__128.adb: New - package. - * libgnat/s-unstyp.ads (Long_Long_Long_Unsigned): New modular type. - (Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, - Rotate_Right): New intrinsic functions operating on it. - -2020-10-21 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_defined_characteristics.rst: Add - Long_Long_Long_Integer to the list of predefined integer types. - * gnat_rm.texi: Regenerate. - -2020-10-21 Yannick Moy <moy@adacore.com> - - * ada_get_targ.adb (Width_From_Size): Add case for 128 bits. - Reorder declarations in the same order as get_targ.adb to - facilitate diffs. - -2020-10-21 Piotr Trojanek <trojanek@adacore.com> - - * exp_aggr.adb (Expand_N_Aggregate): Refactor repeated calls to - Etype (N). - (Build_Array_Aggr_Code): Fix whitespace. - -2020-10-21 Dmitriy Anisimkov <anisimko@adacore.com> - - * adaint.c (__gnat_file_time): Use regular arithmetic instead of - __builtin_*_overflow routines if GCC version 4 or less and - compiler is g++. - -2020-10-21 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Array_Aggregate): Use Choice_List, which - internally calls either Choice or Discrete_Choices, depending on - the context. - -2020-10-21 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Iterated_Component_Association): Use - existing defining identifier for index parameter. - -2020-10-21 Javier Miranda <miranda@adacore.com> - - * exp_ch9.adb (Build_Task_Activation_Call): Do not generate a - call to activate tasks if we are within the scope of a protected - type and pragma Detect_Blocking is active. - -2020-10-21 Liaiss Merzougue <merzougue@adacore.com> - - * libgnat/s-carsi8.adb (Compare_Array_S8): Add pragma Assert to - avoid warning concerning Left_Len and RighLen value regarding - Bytes_Compared_As_Words. - * libgnat/s-carun8.adb (Compare_Array_U8): Likewise. - * libgnat/s-geveop.adb (Binary_Operation, Unary_Operation): Add - pragma Assert concerning divide by 0 warning. - * libgnat/s-imgcha.adb (Image_Character): Code update to prevent - constant operation warning. - (Image_Character): Add pragma Assert concerning the unchecked - String size. - * libgnat/s-imgdec.adb - (Round): Upate loop code to prevent warning concerning - Digs'First access. - (Round): Add pragma assert. - (Set): Add pragma Assert for the unchecked string size. - (Set_Digits): Add pragma Assert for the input range. - (Set_Decimal_Digits): Add pragma Assert. - (Set_Blank_And_Sign): Add pragma Assert for the input range. - * libgnat/s-arit64.adb (DoubleDivide): Add pragma Assert - concerning Du /= 0. - (Multiply_With_Ovflo_Check): Add pragma Annotate to avoid - warning concerning unsigned -> signed conversion. - * libgnat/s-imguns.adb (Set_Image_Unsigned): Add pragma Assert - to prevent overflow check warning. Add pragma Assert for - controlling S'First = 1. - * libgnat/s-imgrea.adb (Image_Floating_Point, Set, Set_Digs, - Set_Special_Fill, Convert_Integer): Add pragma Annotate to - prevent overflow check warning. - (Set_Image_Real): Add pragma Annotate to avoid dead code warning - on float check. Add pragma Assert to prevent overflow check - warning. - * libgnat/s-imgwiu.adb (Set_Digits, Set_Image_Width_Unsigned): - Add pragma assert to prevent overflow check warning. - * libgnat/s-imgllu.adb (Set_Image_Long_Long_Unsigned): Add - pragma assert to prevent overflow check warning. - * libgnat/s-imgint.adb (Set_Digits): Add Assert for input - constraint and to prevent overflow check warning, create - Non_Positive subtype, and change the T parameter as Non_Positive - instead Integer. - (Set_Image_Integer): Add pragma assert to prevent overflow check - warning. - * libgnat/s-imglli.adb (Set_Digits): Add Assert for input - constraint and to prevent overflow check warning, create - Non_Positive subtype, and change the T parameter as Non_Positive - instead Integer. - (Set_Image_Long_Long_Integer): Add pragma assert to prevent - overflow check warning. - * libgnat/s-fatgen.adb (Decompose, Pred, Succ): Add pragma - Annotate to prevent dead code due to invalid float check. - * libgnat/s-imenne.adb (Image_Enumeration_8, - Image_Enumeration_16, Image_Enumeration_32): Add pragma Assert - to prevent overflow check warning. Add Names_Index subtype for - restricting Index_table content. - -2020-10-21 Gary Dismukes <dismukes@adacore.com> - - * exp_ch6.adb (Insert_Post_Call_Actions): Test for - N_Explicit_Dereference as part of the existing test for function - calls. - -2020-10-21 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (Check_Strict_Alignment): Do not set the flag for - a bit-packed array type, even if it is a by-reference type. - -2020-10-21 Dmitriy Anisimkov <anisimko@adacore.com> - - * adaint.c (__gnat_file_time): New routine. - (__gnat_copy_attribs): Copy timestamps in nanoseconds. - * libgnat/a-direct.adb (C_Modification_Time): Bind to - __gnat_file_time. - (Modification_Time): Call to C_Modification_Time. - -2020-10-21 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Iterated_Component_Association): - Expression's copy and now has the same parent as the original - expression. - (Resolve_Array_Aggregate): Add ??? comment about a still - existing minor issue that led to discovery of the above crash. - -2020-10-21 Javier Miranda <miranda@adacore.com> - - * sem_ch12.adb (Install_Parents_Of_Generic_Context): Simplify - functionality; collect and install parents of generic child - package. - (Remove_Parents_Of_Generic_Context): Code cleanup. - (Instantiate_Package_Body): Hide parents of generic context from - visibility before installing the parent instance; restore their - visibility when the instance is analyzed - -2020-10-21 Doug Rupp <rupp@adacore.com> - - * libgnarl/s-osinte__lynxos178e.ads: Remove -mthreads switch. - -2020-10-21 Patrick Bernardi <bernardi@adacore.com> - - * env.c (__gnat_setenv): call setenv for VxWorks 7 kernel mode. - (__gnat_environ): envGet takes an int instead of a NULL pointer. - (__gnat_unsetenv): call unsetenv for VxWorks 7 kernel mode. - (__gnat_clearenv): use __gnat_unsetenv to clear environment - variables. - -2020-10-21 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Freeze_Subprogram_Body): Call - Package_Freeze_Node to retrieve the freeze node for the - enclosing body of the generic. - -2020-10-21 Justin Squirek <squirek@adacore.com> - - * exp_ch6.adb (Expand_Call_Helper): Modify calls to - Add_Extra_Actual to use Extra_Accessibility instead of - Get_Accessibility for the EF parameter. - -2020-10-21 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch6.adb (Expand_Actuals): Whitespace cleanup. - * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Make minimum - accessibility a constant object. - -2020-10-21 Patrick Bernardi <bernardi@adacore.com> - - * env.c (__gnat_environ): For VxWorks kernel simply return the - result of the envGet call. Do this for VxWorks 6 and 7 as they - both support the same API. - -2020-10-21 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_ch7.adb (Build_Finalizer): Disable warnings on referenced - entity. - -2020-10-21 Piotr Trojanek <trojanek@adacore.com> - - * einfo.ads, sem_ch3.adb, sem_util.adb: Fix comments. - -2020-10-21 Javier Miranda <miranda@adacore.com> - - * sem_ch3.adb (Build_Derived_Type): Propagate convention of - class-wide parent. - -2020-10-21 Claire Dross <dross@adacore.com> - - * libgnat/a-cofove.adb (Copy): Add explanation in case of - Capacity_Error. - (Insert_Space): Raise Capacity_Error if the new length is - greater than the capacity. - (Reserve_Capacity): Raise Capacity_Error instead of - Constraint_Error. - -2020-10-20 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Constrain_Decimal, Constrain_Enumeration, - Constrain_Float, Constrain_Integer, Constrain_Ordinary_Fixed): - Refine parameter type from Node_Id to Entity_Id. - -2020-10-20 Piotr Trojanek <trojanek@adacore.com> - - * sprint.adb (po): Set Dump_Freeze_Null to False; align colons. - (ps): Likewise. - -2020-10-20 Ed Schonberg <schonberg@adacore.com> - - * sinfo.ads, sinfo.adb: The flag Box_Present can appear in - Iterated_Element_Association nodes. - * sem_aggr.adb (Resolve_Aggregate): Call - Resolve_Container_Aggregate when type of context has - corresponding aspect. - * sem_type.adb (Covers): In Ada_2020 an aggregate is compatible - with a type that carries the corresponding aspect. - * exp_ch3.adb (Make_Controlling_Function_Wrappers): Do not - create declarations and bodies for inherited primitive functions - of null extensions that dispatch on result, when current scope - includes an immediately visible non-overloadable homonym of the - function. - * libgnat/a-cborse.adb, libgnat/a-cborse.ads, - libgnat/a-cbhase.ads, libgnat/a-cbhase.adb, - libgnat/a-cborma.adb, libgnat/a-cborma.ads, - libgnat/a-cbhama.adb, libgnat/a-cbhama.ads, - libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads, - libgnat/a-convec.ads, libgnat/a-ciorse.ads, - libgnat/a-cihase.ads, libgnat/a-cihase.adb, - libgnat/a-ciorma.ads, libgnat/a-cihama.ads, - libgnat/a-cihama.adb, libgnat/a-cidlli.ads, - libgnat/a-cidlli.adb, libgnat/a-coinve.adb, - libgnat/a-cobove.adb, libgnat/a-cobove.ads, - libgnat/a-convec.adb, libgnat/a-coinve.ads, - libgnat/a-coorse.ads, libgnat/a-cohase.adb, - libgnat/a-cohase.ads, libgnat/a-coorma.ads, - libgnat/a-cohama.adb, libgnat/a-cohama.ads, - libgnat/a-cdlili.ads: Add primitive function Empty for use in - aspect Aggregate, and add corresponding body or expression - function. - -2020-10-20 Arnaud Charlet <charlet@adacore.com> - - * aspects.adb (Has_Aspect_Specifications_Flag): Add - N_Parameter_Specification. - * par-ch13.adb (Aspect_Specifications_Present): Also handle case - of an unknown aspect on the last formal parameter (terminated by - a Tok_Right_Paren). Minor reformatting. - * par-ch6.adb (P_Formal_Part): Scan aspects on formal - parameters. - * par.adb: Fix typos. - * sem_ch6.adb (Process_Formals): Add processing of aspects and - in particular Unreferenced aspect for now. - * sinfo.ads: Allow ASPECT_SPECIFICATIONS on a - PARAMETER_SPECIFICATION. - * doc/gnat_rm/implementation_defined_aspects.rst - (Aspect Unreferenced): Update documentation. - * gnat_rm.texi: Regenerate. - -2020-10-20 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.ads, sem_util.adb (Get_Accessibility): Refine result - type from Node_Id to Entity_Id. - -2020-10-20 Piotr Trojanek <trojanek@adacore.com> - - * einfo.adb, exp_attr.adb, sem_ch13.adb, sem_util.adb: Use - Is_Formal where possible. - -2020-10-20 Steve Baird <baird@adacore.com> - - * sem_util.ads: Declare a new package, Old_Attr_Util, which in - turn declares two more packages, Conditional_Evaluation and - Indirect_Temps. Conditional_Evaluation provides a predicate for - deciding whether a given 'Old attribute reference is eligible - for conditional evaluation and, in the case where it is - eligible, a function that constructs the Boolean-valued - condition that is to be evaluated at run time in deciding - whether to evaluate the attribute prefix. Indirect_Temps - provides support for declaring a temporary which is only - initialized conditionally; more specifically, an access type and - a variable of that type are declared (unconditionally) and then - the variable is (conditionally) initialized with an allocator. - The existence of the access type and the pointer variable is - hidden from clients, except that a predicate, - Is_Access_Type_For_Indirect_Temp, is provided for identifying - such access types. This is needed because we want such an access - type to be treated like a "normal" access type (specifically - with respect to finalization of allocated objects). Other parts - of the compiler treat access types differently if - Comes_From_Source is False, or if the secondary stack storage - pool is used; this predicate is used to disable this special - treatment. - * sem_attr.adb (Uneval_Old_Msg): Improve message text to reflect - Ada202x changes. - (Analyze_Attribute): A previously-illegal 'Old attribute - reference is accepted in Ada2020 if it is eligible for - conditional evaluation. - * sem_res.adb (Valid_Conversion): Do not treat a rewritten 'Old - attribute like other rewrite substitutions. This makes a - difference, for example, in the case where we are generating the - expansion of a membership test of the form "Saooaaat'Old in - Named_Access_Type"; in this case Valid_Conversion needs to - return True (otherwise the expansion will be False - see the - call site in exp_ch4.adb). - * exp_attr.adb (Expand_N_Attribute_Reference): When expanding a - 'Old attribute reference, test for the case where the reference - is eligible for conditional evaluation. In that case, use the - new "indirect temporary" mechanism provided by Sem_Util. - * exp_prag.adb - (Expand_Attributes_In_Consequence.Expand_Attributes): If - Sem_Util.Indirect_Temp_Needed indicates that there could be - correctness problems associated with the old expansion scheme - for dealing with 'Old attributes in contract cases consequences, - then we use the new "indirect temporary" mechanism provided by - Sem_Util instead. We do not want to do this unconditionally. - * sem_util.adb: Provide a body for the new Old_Attr_Util - package. Further work is needed in several areas for - correctness: - - The function Is_Repeatedly_Evaluated does not deal with - container aggregates yet. - - The function Is_Known_On_Entry does not deal with interactions - with the Global aspect. - Each area where more work is needed is indicated with a "???" - comment in the code; a more detailed description can be found - there. Some optimization opportunties are similarly indicated - with a "???" comment. - * exp_ch3.adb (Freeze_Type): In deciding whether to generate - expansion for the list controller of an access type, take the - predicate Is_Access_Type_For_Indirect_Temp into account. If the - predicate yields True, then generate the expansion. - * exp_util.adb (Build_Allocate_Deallocate_Proc): We don't - normally finalize allocated objects that are allocated on the - secondary stack. Add an exception to this rule if the predicate - Is_Access_Type_For_Indirect_Temp yields True. As a result of - this exception, we have to deal with the fact that gigi expects - a different parameter profile if we are using the secondary - stack pool; the Pool and Alignment parameters must be omitted in - this case. - -2020-10-20 Javier Miranda <miranda@adacore.com> - - * sem_ch12.adb (Install_Parents_Of_Generic_Context, - Remove_Parents_Of_Generic_Context): New subprograms. - (Instantiate_Package_Body): Adding assertions to ensure that - installed parents are properly removed. - -2020-10-20 Claire Dross <dross@adacore.com> - - * sem_attr.adb (Analyze_Attribute): Emit a warning on 'Update - when Warn_On_Obsolescent_Feature is set to True. - -2020-10-20 Richard Kenner <kenner@adacore.com> - - * gnat_cuda.adb (Build_Register_Function_Call): Make procedure - call instead of function, rename to - Build_Register_Procedure_Call. - (Build_CUDA_Init_Proc): Make procedure call instead of function. - -2020-10-20 Justin Squirek <squirek@adacore.com> - - * exp_ch6.adb (Expand_Branch): Properly anticipate expansion of - conditional expressions producing object declarations in - addition to assignment statements, and rename formal. - -2020-10-20 Yannick Moy <moy@adacore.com> - - * errout.adb (Write_Source_Code_Line): Adopt display closer to - GCC format. - (Output_Messages): Deal specially with info messages. - * erroutc.adb (Prescan_Message): Fix bug leading to check - messages being considered as error messages in pretty output - mode. - -2020-10-20 Justin Squirek <squirek@adacore.com> - - * exp_ch6.adb (Expand_Call_Helper): Properly handle the case - where the condition of a conditional expression has been - optimized out when calculating the value of an extra - accessibility parameter. - -2020-10-20 Bob Duff <duff@adacore.com> - - * doc/gnat_ugn/gnat_utility_programs.rst: Change "_" to "-". - -2020-10-20 Arnaud Charlet <charlet@adacore.com> - - * sem_aggr.adb (Resolve_Aggregate): Warn on not fully - initialized box aggregate. - * sem_aggr.ads: Fix typo. - * sem_res.adb (Resolve_Actuals): Fix typo in error message - format marking it incorrectly as a continuation message. - * sem_elab.adb (Check_Internal_Call_Continue): Similarly, add - missing primary message in case of a call to an actual generic - subprogram. - * sem_warn.adb (Check_References): Do not warn on read but never - assigned variables if the type is partially initialized. - * libgnat/a-except.ads, libgnat/a-ststun.ads, - libgnat/g-sechas.ads, libgnat/a-cbdlli.ads, - libgnat/a-cfdlli.ads, libgnat/a-cobove.ads, - libgnat/a-cohata.ads, libgnat/a-crbltr.ads, - libgnat/a-cbmutr.ads, libgnat/a-crdlli.ads, - libgnat/a-cbsyqu.ads: Address new warning. - * doc/gnat_ugn/building_executable_programs_with_gnat.rst: - Update doc on -gnatwv. - * gnat_ugn.texi: Regenerate. - -2020-10-20 Gary Dismukes <dismukes@adacore.com> - - * sem_ch6.adb (Analyze_Expression_Function): Mark static - expression functions as inlined. - -2020-10-20 Arnaud Charlet <charlet@adacore.com> - - * contracts.adb (Is_Prologue_Renaming): This function was - missing support for E_Constant which can also be generated in - protected objects. - -2020-10-20 Arnaud Charlet <charlet@adacore.com> - - * bindgen.adb (Gen_Bind_Env_String): Generate Ada 2012 compatible - strings. Code cleanup. - -2020-10-20 Yannick Moy <moy@adacore.com> - - * sem_util.adb, sem_util.ads: Comment fix. - -2020-10-20 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Check_Constrained_Object): Suppress discriminant - checks when the type has default discriminants and comes from - expansion of a "for of" loop. - -2020-10-20 Bob Duff <duff@adacore.com> - - * atree.ads: Make Default_Node a constant. Remove the - modification of Comes_From_Source, and use a separate flag for - that. Change Sloc to 0; it always overwritten, and never left - as the No_Location value. - (Print_Statistics): Move to spec so we can call it from - gnat1drv. - (Num_Nodes): Rename to clarify that this is approximate. - Correct comment: nodes and entities are never deleted, the count - is never decremented, and this is not used by Xref. - (Initialize): Correct comment: Error_List is not created here. - Other minor naming and comment changes. - * atree.adb (Extend_Node, New_Copy, New_Entity, New_Node): - Streamline these. Simplify and improve efficiency. Move code - from Allocate_Initialize_Node to these, where it can be executed - unconditionally. Take advantage of automatic zeroing of the - Nodes table. - (Allocate_Initialize_Node): Remove this. It was an efficiency - bottleneck, and somewhat complicated, because it was called from - 4 places, and had all sorts of conditionals to check where it - was called from. Better to move most of that code to the call - sites, where it can be executed (or not) unconditionally. - (Allocate_New_Node): New procedure to partly replace - Allocate_Initialize_Node (called from just 2 of those 4 places). - (Comes_From_Source_Default): New flag written/read by - Set_Comes_From_Source_Default/Get_Comes_From_Source_Default. - This allows us to make Default_Node into a constant with - all-zeros value. - (Set_Paren_Count_Of_Copy): New procedure to avoid duplicated - code. - (Report): New procedure to encapsulate the call to the reporting - procedure. - (Atree_Private_Part): We now need a body for this package, to - contain package body Nodes. - (Approx_Num_Nodes_And_Entities): Was Num_Nodes. For efficiency, - compute the answer from Nodes.Last. That way we don't need to - increment a counter on every node creation. Other minor naming - and comment changes. - * gnat1drv.adb: Call Atree.Print_Statistics if -gnatd.A switch - was given. Add comment documenting the new order dependency (we - must process the command line before calling Atree.Initialize). - * debug.adb: Document -gnatd.A. - * einfo.adb, sinfo.adb: Remove useless Style_Checks pragmas. - * nlists.ads (Allocate_List_Tables): Inline makes node creation - a little faster. - * nlists.adb (Initialize): Remove local constant E, which didn't - seem to add clarity. - * treepr.adb (Print_Init): Use renamed - Approx_Num_Nodes_And_Entities function. - * types.ads: Change the Low and High bounds as described above. - * types.h: Change Low and High bounds to match types.ads. - * sem_ch8.adb, namet.adb, namet.ads: Move the computation of - Last_Name_Id from sem_ch8 to namet, and correct it to not assume - Name_Ids are positive. - * ali.adb, ali-util.adb, bindo-writers.adb, exp_dist.adb, - fmap.adb, fname-uf.adb, osint.adb: Fix various hash functions to - avoid assuming the various ranges are positive. Note that "mod" - returns a nonnegative result when the second operand is - positive. "rem" can return negative values in that case (in - particular, if the first operand is negative, which it now is). - * switch-c.adb: Allow switch -gnaten to control the value of - Nodes_Size_In_Meg. - * doc/gnat_ugn/building_executable_programs_with_gnat.rst: - Remove traling whitespaces. - * opt.ads (Nodes_Size_In_Meg): New Variable. - -2020-10-20 Eric Botcazou <ebotcazou@adacore.com> - - * exp_util.adb (Remove_Side_Effects): Always generate a renaming - that is handled by the front-end in the case of an indexed or a - selected component whose prefix has a nonstandard representation. - -2020-10-20 Pat Rogers <rogers@adacore.com> - - * doc/gnat_rm/the_gnat_library.rst: Add Ada.Task_Initialization. - * gnat_rm.texi: Regenerate. - -2020-10-20 Yannick Moy <moy@adacore.com> - - * errout.adb: (Error_Msg-Internal): Pass the location for a line - insertion if any in the message. - (Output_Messages: Add display of source code lines if -gnatdF is - set. - (Write_Source_Code_Line): Code clean up. - * erroutc.adb (Prescan_Message): Apply prescan for continuation - lines when -gnatdF is set, and record presence of line - insertion. - * erroutc.ads (Has_Insertion_Line): New global for prescan. - (Error_Msg_Object): Add field to record line insertion if - present. - * errutil.adb (Error_Msg): Pass no location for Insertion_Sloc. - -2020-10-20 Arnaud Charlet <charlet@adacore.com> - - * exp_ch5.adb (Expand_N_Case_Statement): Do not generate - validity check when possible. - -2020-10-20 Ed Schonberg <schonberg@adacore.com> - - * exp_aggr.adb (Expand_Iterated_Component): Reorganize code to - ensure that Loop_Id is properly initialized on all paths, and - remove code duplication. - -2020-10-20 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Analyze_Subtype_Declaration): Propagate predicate - function to full view of the created type as well, if it was - created. - -2020-10-20 Arnaud Charlet <charlet@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Merge handling of - Simple_Storage_Pool and Storage_Pool. - -2020-10-20 Piotr Trojanek <trojanek@adacore.com> - - * aspects.ads: Introduce Subprogram_Variant aspect with the - following properties: GNAT-specific, with mandatory expression, - not a representation aspect, never delayed. - * contracts.adb (Expand_Subprogram_Contract): Mention new aspect - in the comment. - (Add_Contract_Item): Support addition of pragma - Subprogram_Variant to N_Contract node. - (Analyze_Entry_Or_Subprogram_Contract): Mention new aspect in - the comment; add pragma Subprogram_Variant to N_Contract node. - (Build_Postconditions_Procedure): Adapt call to - Insert_Before_First_Source_Declaration, which is now reused in - expansion of new aspect. - (Process_Contract_Cases_For): Also process Subprogram_Variant, - which is stored in N_Contract node together with Contract_Cases. - * contracts.ads (Analyze_Entry_Or_Subprogram_Contract): Mention - new aspect in the comment. - (Analyze_Entry_Or_Subprogram_Body_Contract): Likewise. - * einfo.adb (Get_Pragma): Support retrieval of new pragma. - * einfo.ads (Get_Pragma): Likewise. - * exp_ch6.adb (Check_Subprogram_Variant): New routine for - emitting call to check Subprogram_Variant expressions at run - time. - (Expand_Call_Helper): Check Subprogram_Variant expressions at - recursive calls. - * exp_prag.adb (Make_Op): Moved from expansion of pragma - Loop_Variant to Exp_Util, so it is now reused for expansion of - pragma Subprogram_Variant. - (Process_Variant): Adapt call to Make_Op after moving it to - Exp_Util. - (Expand_Pragma_Subprogram_Variant): New routine. - * exp_prag.ads (Expand_Pragma_Subprogram_Variant): Likewise. - * exp_util.adb (Make_Variant_Comparison): Moved from Exp_Prag - (see above). - * exp_util.ads (Make_Variant_Comparison): Likewise. - * inline.adb (Remove_Aspects_And_Pragmas): Handle aspect/pragma - Subprogram_Variant just like similar contracts. - * par-prag.adb (Prag): Likewise. - * sem.adb (Insert_Before_First_Source_Declaration): Moved from - Contracts (see above). - * sem.ads (Insert_Before_First_Source_Declaration): Likewise. - * sem_ch12.adb: Mention new aspect in the comment about - "Implementation of Generic Contracts", just like similar aspects - are mentioned there. - * sem_ch13.adb (Insert_Pragma): Mention new aspect in the - comment, because this routine is now used for Subprogram_Variant - just like for other similar aspects. - (Analyze_Aspect_Specifications): Mention new aspect in comments; - it is handled just like aspect Contract_Cases. - (Check_Aspect_At_Freeze_Point): Do not expect aspect - Subprogram_Variant just like we don't expect aspect - Contract_Cases. - * sem_prag.adb (Ensure_Aggregate_Form): Now also used for pragma - Subprogram_Variant, so update comment. - (Analyze_Pragma): Add initial checks for pragma - Subprogram_Variant. - (Analyze_Subprogram_Variant_In_Decl_Part): New routine with - secondary checks on the new pragma. - (Sig_Flags): Handle references within pragma Subprogram_Variant - expression just like references in similar pragma - Contract_Cases. - (Is_Valid_Assertion_Kind): Handle Subprogram_Variant just like - other similar contracts. - * sem_prag.ads (Analyze_Subprogram_Variant_In_Decl_Part): New - routine. - * sem_res.adb (Same_Or_Aliased_Subprograms): Moved to Sem_Util, - so it can be reused for detection of recursive calls where - Subprogram_Variant needs to be verified. - * sem_util.adb (Is_Subprogram_Contract_Annotation): Handle new - Subprogram_Variant annotation just like other similar - annotations. - (Same_Or_Aliased_Subprograms): Moved from Sem_Res (see above). - * sem_util.ads (Is_Subprogram_Contract_Annotation): Mention new - aspect in the comment. - (Same_Or_Aliased_Subprograms): Moved from Sem_Res (see above). - * sinfo.ads (N_Contract): Document handling of - Subprogram_Variant. - * snames.ads-tmpl: Add name for the internally generated - procedure with checks for Subprogram_Variant expression, name - for the new aspect and new pragma corresponding to aspect - Subprogram_Variant. - -2020-10-20 Piotr Trojanek <trojanek@adacore.com> - - * exp_util.ads: Reorder declaration. - -2020-10-19 Ed Schonberg <schonberg@adacore.com> - - * par-ch4.adb: (P_Aggregate_Or_Paren_Expr): Recognize - Iterated_Element_Component. - (P_Iterated_Component_Association): Rebuild node as an Iterated_ - Element_Association when Key_Expression is present, and attach - either the Loop_Parameter_Specification or the - Iterator_Specification to the new node. - * sem_aggr.adb: (Resolve_Container_Aggregate): - Resolve_Iterated_Association handles bota Iterated_Component_ - and Iterated_Element_Associations, in which case it analyzes and - resoles the orresponding Key_Expression. - * exp_aggr.adb (Expand_Iterated_Component): If a Key_Expression - is present, use it as the required parameter in the call to the - insertion routine for the destination container aggregate. Call - this routine for both kinds of Iterated_Associations. - -2020-10-19 Arnaud Charlet <charlet@adacore.com> - - * exp_ch4.adb (Expand_Concatenate): Enable needed range checks. - -2020-10-19 Bob Duff <duff@adacore.com> - - * exp_ch6.adb (Make_Build_In_Place_Call_In_Object_Declaration): - Set the Warnings_Off flag on the pointer object used in the - expansion of iterators and similar. - -2020-10-19 Eric Botcazou <ebotcazou@adacore.com> - - * Makefile.rtl (PowerPC/Linux): Use s-taspri__posix.ads instead - of s-taspri__posix-noaltstack.ads for s-taspri.ads. - -2020-10-19 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Add_Call): Remove excessive condition and - unnecessary call to Set_Has_Predicates. - -2020-10-19 Yannick Moy <moy@adacore.com> - - * debug.adb: Use debug switch -gnatdF for this alternative - display of messages. - * errout.adb (Output_Messages): Alternative display when -gnatdF - is used. - * erroutc.adb (Output_Msg_Text): Likewise. - -2020-10-19 Arnaud Charlet <charlet@adacore.com> - - * sem_ch6.adb (Check_Untagged_Equality): Check for AI12-0352. - -2020-10-19 Ed Schonberg <schonberg@adacore.com> - - * exp_ch6.adb (Add_View_Conversion_Invariants): Do not insert - generated invariant checks when the call is a function call. - These tests are properly inserted in the code in procedure - Insert_Post_Call_Actions, which takes care of finding the proper - insertion point for the checks. - (Insert_Post_Call_Actions): Add question marks to indicate - possible gap in handling function calls that appear as aggregate - components. - -2020-10-19 Arnaud Charlet <charlet@adacore.com> - - * contracts.adb (Process_Preconditions_For): Do not exclude - instances. - * sem_ch4.adb (Analyze_Quantified_Expression): Disable spurious - warning on internally generated variables. - -2020-10-19 Ghjuvan Lacambre <lacambre@adacore.com> - - * debug.adb: Document -gnatd_c flag as being used for CUDA. - * gnat_cuda.ads: New file. - * gnat_cuda.adb: New file. - * rtsfind.ads: Add Interfaces_C_Strings package and - RE_Fatbin_Wrapper, RE_Register_Fat_Binary, - RE_Register_Fat_Binary_End, RE_Register_Function, RE_Chars_Ptr, - RE_New_Char_Array entities. - * rtsfind.adb: Create new Interfaces_C_Descendant subtype, - handle it. - * sem_ch7.adb (Analyze_Package_Body_Helper): Call CUDA init - procedure. - * sem_prag.adb (Analyze_Pragma): Call Add_Cuda_Kernel procedure. - * gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add gnat_cuda.o. - -2020-10-19 Bob Duff <duff@adacore.com> - - * ghost.adb (Whole_Object_Ref): New function to compute the name - of the whole object. - (Mark_And_Set_Ghost_Assignment): Rewrite to use - Whole_Object_Ref. We need to partly analyze the left-hand side - in order to distinguish expanded names and record components. - * lib-xref.ads, lib-xref.adb (Deferred_References): Move table - to body, and add Defer_Reference to update the table, avoiding - duplicates. - (Generate_Reference): Avoid duplicates. - * sem_ch8.ads, sem_ch8.adb (Find_Direct_Name): Remove _OK - parameters, which are no longer needed. Ignore errors in - Ignore_Errors mode. - * sem_util.ads, sem_util.adb (Preanalyze_Without_Errors): Make - this public, so we can call it from Ghost. - * errout.ads, scng.adb, sem_prag.adb: Minor. - -2020-10-19 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Check if type - depends on discriminant. - -2020-10-19 Bob Duff <duff@adacore.com> - - * libgnat/a-coinve.adb, libgnat/a-cidlli.adb (Put_Image): Call - Iterate. - -2020-10-19 Arnaud Charlet <charlet@adacore.com> - - * sem_aggr.adb (Resolve_Record_Aggregate): Properly apply - subtype constraints when using a Default_Value. - * freeze.adb: Fix typo. - -2020-10-19 Yannick Moy <moy@adacore.com> - - * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Fix bug - where a call to Error_Msg_N leads to crash due to - Error_Msg_Name_1 being removed by the call, while a subsequent - call to Error_Msg_N tries to use it. The variable - Error_Msg_Name_1 should be restored prior to the next call. Also - add checking for the new rules. - -2020-10-19 Arnaud Charlet <charlet@adacore.com> - - * checks.adb (Apply_Type_Conversion_Checks): Minor code clean - up. - * exp_ch4.adb (Discrete_Range_Check): Optimize range checks. - Update comments. - (Expand_N_Type_Conversion): Generate range check when rewriting - a type conversion if needed. Add assertion. - * exp_ch6.adb (Expand_Simple_Function_Return): Minor code clean - up. - * sem_res.adb (Resolve_Type_Conversion): Apply range check when - needed. Update comments. - -2020-10-19 Yannick Moy <moy@adacore.com> - - * libgnat/a-textio.ads: Update top-level comment. - -2020-10-19 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Analyze_Contract_Cases_In_Decl_Part): Fix typo. - -2020-10-19 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch6.adb (Expand_Actuals): Simplify condition for by-copy - types. - -2020-10-19 Yannick Moy <moy@adacore.com> - - * errout.ads: Add comment regarding lack of preservation of - Errout state across successive calls to the API. - -2020-10-19 Bob Duff <duff@adacore.com> - - * exp_put_image.adb (Build_Elementary_Put_Image_Call): Use the - base type to recognize various cases of access types. - * libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads, libgnat/a-cbhama.adb, - libgnat/a-cbhama.ads, libgnat/a-cbhase.adb, libgnat/a-cbhase.ads, - libgnat/a-cbmutr.adb, libgnat/a-cbmutr.ads, libgnat/a-cborma.adb, - libgnat/a-cborma.ads, libgnat/a-cborse.adb, libgnat/a-cborse.ads, - libgnat/a-cdlili.adb, libgnat/a-cdlili.ads, libgnat/a-cidlli.adb, - libgnat/a-cidlli.ads, libgnat/a-cihama.adb, libgnat/a-cihama.ads, - libgnat/a-cihase.adb, libgnat/a-cihase.ads, libgnat/a-cimutr.adb, - libgnat/a-cimutr.ads, libgnat/a-ciorma.adb, libgnat/a-ciorma.ads, - libgnat/a-ciormu.adb, libgnat/a-ciormu.ads, libgnat/a-ciorse.adb, - libgnat/a-ciorse.ads, libgnat/a-coboho.adb, libgnat/a-coboho.ads, - libgnat/a-cobove.adb, libgnat/a-cobove.ads, libgnat/a-cohama.adb, - libgnat/a-cohama.ads, libgnat/a-cohase.adb, libgnat/a-cohase.ads, - libgnat/a-coinho.adb, libgnat/a-coinho.ads, - libgnat/a-coinho__shared.adb, libgnat/a-coinho__shared.ads, - libgnat/a-coinve.adb, libgnat/a-coinve.ads, libgnat/a-comutr.adb, - libgnat/a-comutr.ads, libgnat/a-coorma.adb, libgnat/a-coorma.ads, - libgnat/a-coormu.adb, libgnat/a-coormu.ads, libgnat/a-coorse.adb, - libgnat/a-coorse.ads, libgnat/a-strunb.adb, libgnat/a-strunb.ads, - libgnat/a-strunb__shared.adb, libgnat/a-strunb__shared.ads: - Implement Put_Image attibute. - * libgnat/a-stteou.ads, libgnat/s-putima.ads, - libgnat/a-stouut.ads, libgnat/a-stoubu.adb: Make - Ada.Strings.Text_Output, Ada.Strings.Text_Output.Utils, and - System.Put_Images Pure, so they can be with'ed by Pure units - that should have Put_Image defined. - * libgnat/a-stouut.adb: Add missing column adjustments, and - remove a redundant one. - * libgnat/s-putima.adb (Put_Arrow): New routine to print an - arrow. Avoids adding a with clause to some containers. - -2020-10-19 Bob Duff <duff@adacore.com> - - * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Require matching - parens or brackets. - * par.adb, par-tchk.adb (T_Right_Bracket): New procedure to give - an error on missing ]. - -2020-10-19 Javier Miranda <miranda@adacore.com> - - * sem_ch8.adb (Find_Direct_Name): Do not trust in the decoration - of the Entity attribute in constants associated with - discriminals of protected types. - -2020-10-19 Gary Dismukes <dismukes@adacore.com> - - * sem_disp.adb (Check_Dispatching_Context): When the enclosing - subprogram is abstract, bypass early return if the call is - tag-indeterminate, to continue with the later error checking. - -2020-10-19 Javier Miranda <miranda@adacore.com> - - * sem_ch7.adb (Uninstall_Declarations): Uninstall the - declaration of a subtype declaration defined in the private part - of a package. - -2020-10-19 Arnaud Charlet <charlet@adacore.com> - - * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Simplify code since - we are always under -gnatX if we encounter a Tok_Left_Bracket. - * scng.adb (Scan): [] is an aggregate under -gnatX and a wide - character otherwise. - -2020-10-19 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch6.adb (Expand_Call_Helper): Cleanup. - -2020-10-19 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch6.adb (Is_Direct_Deep_Call): Refine type from Node_Id to - Entity_Id. - -2020-10-19 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch6.adb (May_Fold): Detect all operators, i.e. both binary - and unary ones. - -2020-10-19 Piotr Trojanek <trojanek@adacore.com> - - * inline.adb (Expand_Inlined_Call): Simplify repeated calls to - Nkind. - -2020-10-18 Alexandre Oliva <oliva@adacore.com> - - * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Compile Ada.Numerics - child units Aux_Generic_Float, Aux_Long_Long_Float, Aux_Long_Float, - Aux_Float, Aux_Short_Float, Aux_Compat, and Aux_Linker_Options. - (X86_TARGET_PAIRS): Drop dummy body for Aux. Use x86 version - of Aux_Compat. - (X86_64_TARGET_PAIRS): Likewise. - (LIBGNAT_TARGET_PAIRS): On VxWorks, select the nolibm - variants. Drop the darwin version of Aux. Drop the redundant - libc-x86 numaux variants on x86* kfreebsd variants. - * libgnat/a-nagefl.ads: New Aux_Generic_Float. - * libgnat/a-naliop.ads: New Aux_Linker_Options. - * libgnat/a-naliop__nolibm.ads: New. - * libgnat/a-nallfl.ads: New Aux_Long_Long_Float. - * libgnat/a-nalofl.ads: New Aux_Long_Float. - * libgnat/a-nuaufl.ads: New Aux_Float. - * libgnat/a-nashfl.ads: New Aux_Short_Float. - * libgnat/a-ngcefu.adb (Exp): Factor out the Im (X) passed to - Sin and Cos in the Complex variant too. - * libgnat/a-ngcoty.adb: Switch to Aux_Generic_Float. Drop - redundant conversions. - * libgnat/a-ngelfu.adb: Likewise. - * libgnat/a-nuauco.ads: New Aux_Compat. - * libgnat/a-nuauco__x86.ads: New. - * libgnat/a-numaux.ads: Replace with Compat wrapper. - * libgnat/a-numaux__darwin.adb: Remove. - * libgnat/a-numaux__darwin.ads: Remove. - * libgnat/a-numaux__dummy.adb: Remove. - * libgnat/a-numaux__libc-x86.ads: Remove. - * libgnat/a-numaux__vxworks.ads: Remove. - -2020-10-16 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb, exp_aggr.adb, exp_attr.adb, exp_ch6.adb, - freeze.adb, sem_aggr.adb, sem_attr.adb, sem_ch13.adb, - sem_ch13.ads, sem_ch6.adb, sem_eval.adb, sem_util.adb: Fix style - and typos. - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - * sem_cat.adb (Is_Primary): Handle N_Range properly. - -2020-10-16 Ghjuvan Lacambre <lacambre@adacore.com> - - * elists.ads (New_Elmt_List): New functions. - * elists.adb (New_Elmt_List): New functions. - * exp_prag.adb: Add dependency on Elists. - (Expand_Pragma_CUDA_Execute): New function. - (Expand_N_Pragma): Add call to Expand_Pragma_CUDA_Execute. - * rtsfind.ads: Add CUDA.Internal, CUDA.Runtime, System.C - packages and RE_Push_Call_Configuration, - RE_Pop_Call_Configuration, RE_Launch_Kernel, RO_IC_Unsigned, - RO_IC_Unsigned_Long_Long entities. - * rtsfind.adb: Extend Interfaces_Descendant to include - Interfaces_C. - -2020-10-16 Bob Duff <duff@adacore.com> - - * par-ch4.adb (P_Name): Allow Tok_Left_Bracket in two places to - call P_Qualified_Expression. We don't need to modify other - places that call P_Qualified_Expression, because a - qualified_expression is a name in Ada 2012 and higher, so P_Name - is the right place. The parser already parses aggregates with - brackets; we just need to allow that in qualified expressions. - -2020-10-16 Javier Miranda <miranda@adacore.com> - - * sem_ch12.adb (Check_Generic_Child_Unit): When the child unit - is a renaming of a generic child unit then traverse the scope - containing the renaming declaration to locate the instance of - its parent. Otherwise the parent is not installed and the - frontend cannot process the instantiation. - -2020-10-16 Bob Duff <duff@adacore.com> - - * libgnat/a-numeri.ads: Remove the greek letter. - -2020-10-16 Ed Schonberg <schonberg@adacore.com> - - * exp_imgv.adb (Expand_Image_Attribute): Refine previous patch - to use root type (and not base type) on enumeration types. - -2020-10-16 Ed Schonberg <schonberg@adacore.com> - - * exp_imgv.adb (Expand_Image_Attribute): Use the base type - instead of the root type when type of object is private. Remove - Ada_2020 guard, because it has been checked during prior - analysis. Use Underlying_Type in all cases, as it is a no-op on - types that are not private. - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - * aspects.ads, snames.ads-tmpl: Add support for - Exclusive_Functions aspect. - * sem_ch13.adb (Analyze_Aspect_Specifications): Ditto. - * exp_ch9.adb (Build_Protected_Subprogram_Body): Take aspect - Exclusive_Functions into account. - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - * gcc-interface/Make-lang.in: Update dependencies on system.ads, - add gnatbind switch -t to avoid timestamp inconsistencies during - build. - * libgnat/system.ads: Move... - * gcc-interface/system.ads: ... here. - -2020-10-16 Gary Dismukes <dismukes@adacore.com> - - * sem_eval.adb (Subtypes_Statically_Match): Retrieve - discriminant constraints from the two types via new function - Original_Discriminant_Constraint rather than - Discriminant_Constraint. - (Original_Discriminant_Constraint): New function to locate the - nearest explicit discriminant constraint associated with a type - that may possibly have inherited a constraint from an ancestor - type. - -2020-10-16 Bob Duff <duff@adacore.com> - - * exp_ch6.adb (Expand_Simple_Function_Return): Remove obsolete - comment and code. - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - PR ada/95953 - * libgnat/a-suenco.adb (Convert): Fix handling of third UTF-8 - byte. - -2020-10-16 Steve Baird <baird@adacore.com> - - * exp_util.adb (Is_Related_To_Func_Return): Cope with the case - where the FE introduces a type conversion. - -2020-10-16 Chris Martin <cmartin@adacore.com> - - * sem_util.ads, sem_util.adb (Is_Access_Variable): New function. - (Is_Synchronized_Object): Call new function when determining if - a constant can be regarded as synchronized. - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - * exp_ch6.adb (Make_Build_In_Place_Call_In_Object_Declaration): - Call Set_BIP_Initialization_Call systematically. - * exp_ch7.adb (Process_Transient_In_Scope): Take - BIP_Initialization_Call into account to decide where to insert - the Hook. - -2020-10-16 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.adb (Is_View_Conversion): Detect qualified types. - * sem_util.ads (Is_Actual_In_Out_Parameter): Fix style in - comment. - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - * scil_ll.adb, sem_scil.adb: Update assertions. - -2020-10-16 Ed Schonberg <schonberg@adacore.com> - - * sem_attr.adb (Min_Max): Handle the case where attribute - name (qualified by required type) appears as the reducer of a - 'Reduce attribute reference. - (Resolve_Attribute) <Reduce>: Handle properly the presence of a - procedure or an attribute reference Min/Max as a reducer. - * exp_attr.adb (Expand_Attribute_Reference) <Reduce>: New - subprogram Build_Stat, to construct the combining statement - which appears in the generated loop for Reduce, and which is - either a function call when the reducer is a function or an - attribute, or a procedure call when reducer is an appropriate - procedure. BuilD_Stat is used both when the prefix of 'Reduce - is a value sequence and when it is an object - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - * exp_ch4.adb (Expand_Concatenate): Allocate result of string - concatenation on secondary stack when relevant. - -2020-10-16 Ed Schonberg <schonberg@adacore.com> - - * sem_res.adb (Resolve_Declare_Expression): Retrieve the created - block entity that is the scope of the local declarations, from - either a local object declaration or an object renaming - declaration. The block entity does not have an explicit - declaration, but appears as the scope of all locally declared - objects. - -2020-10-16 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/system-aix.ads: Likewise. - * libgnat/system-darwin-arm.ads: Likewise. - * libgnat/system-darwin-ppc.ads: Likewise. - * libgnat/system-darwin-x86.ads: Likewise. - * libgnat/system-djgpp.ads: Likewise. - * libgnat/system-dragonfly-x86_64.ads: Likewise. - * libgnat/system-freebsd.ads: Likewise. - * libgnat/system-hpux-ia64.ads: Likewise. - * libgnat/system-hpux.ads: Likewise. - * libgnat/system-linux-alpha.ads: Likewise. - * libgnat/system-linux-arm.ads: Likewise. - * libgnat/system-linux-hppa.ads: Likewise. - * libgnat/system-linux-ia64.ads: Likewise. - * libgnat/system-linux-m68k.ads: Likewise. - * libgnat/system-linux-mips.ads: Likewise. - * libgnat/system-linux-ppc.ads: Likewise. - * libgnat/system-linux-riscv.ads: Likewise. - * libgnat/system-linux-s390.ads: Likewise. - * libgnat/system-linux-sh4.ads: Likewise. - * libgnat/system-linux-sparc.ads: Likewise. - * libgnat/system-linux-x86.ads: Likewise. - * libgnat/system-lynxos178-ppc.ads: Likewise. - * libgnat/system-lynxos178-x86.ads: Likewise. - * libgnat/system-mingw.ads: Likewise. - * libgnat/system-qnx-aarch64.ads: Likewise. - * libgnat/system-rtems.ads: Likewise. - * libgnat/system-solaris-sparc.ads: Likewise. - * libgnat/system-solaris-x86.ads: Likewise. - * libgnat/system-vxworks-arm-rtp-smp.ads: Likewise. - * libgnat/system-vxworks-arm-rtp.ads: Likewise. - * libgnat/system-vxworks-arm.ads: Likewise. - * libgnat/system-vxworks-e500-kernel.ads: Likewise. - * libgnat/system-vxworks-e500-rtp-smp.ads: Likewise. - * libgnat/system-vxworks-e500-rtp.ads: Likewise. - * libgnat/system-vxworks-e500-vthread.ads: Likewise. - * libgnat/system-vxworks-ppc-kernel.ads: Likewise. - * libgnat/system-vxworks-ppc-ravenscar.ads: Likewise. - * libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise. - * libgnat/system-vxworks-ppc-rtp.ads: Likewise. - * libgnat/system-vxworks-ppc-vthread.ads: Likewise. - * libgnat/system-vxworks-ppc.ads: Likewise. - * libgnat/system-vxworks-x86-kernel.ads: Likewise. - * libgnat/system-vxworks-x86-rtp-smp.ads: Likewise. - * libgnat/system-vxworks-x86-rtp.ads: Likewise. - * libgnat/system-vxworks-x86-vthread.ads: Likewise. - * libgnat/system-vxworks-x86.ads: Likewise. - * libgnat/system-vxworks7-aarch64-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-aarch64.ads: Likewise. - * libgnat/system-vxworks7-arm-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-arm.ads: Likewise. - * libgnat/system-vxworks7-e500-kernel.ads: Likewise. - * libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-e500-rtp.ads: Likewise. - * libgnat/system-vxworks7-ppc-kernel.ads: Likewise. - * libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-ppc-rtp.ads: Likewise. - * libgnat/system-vxworks7-ppc64-kernel.ads: Likewise. - * libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-x86-kernel.ads: Likewise. - * libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-x86-rtp.ads: Likewise. - * libgnat/system-vxworks7-x86_64-kernel.ads: Likewise. - * libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise. - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl, gnat1drv.adb, expander.adb - doc/gnat_rm/implementation_defined_pragmas.rst, - doc/gnat_ugn/building_executable_programs_with_gnat.rst, - doc/gnat_ugn/the_gnat_compilation_model.rst, exp_ch5.ads, - exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_util.adb, - exp_util.ads, libgnarl/s-osinte__aix.adb, - libgnarl/s-osinte__android.adb, libgnarl/s-osinte__darwin.adb, - libgnarl/s-osinte__gnu.adb, libgnarl/s-osinte__hpux-dce.adb, - libgnarl/s-osinte__lynxos178.adb, libgnarl/s-osinte__posix.adb, - libgnarl/s-osinte__qnx.adb, libgnarl/s-osinte__rtems.adb, - libgnarl/s-osinte__solaris.adb, libgnarl/s-osinte__vxworks.adb, - libgnarl/s-osinte__x32.adb, libgnarl/s-solita.adb, - libgnarl/s-taasde.adb, libgnarl/s-taprob.adb, - libgnarl/s-taprop__dummy.adb, libgnarl/s-taprop__hpux-dce.adb, - libgnarl/s-taprop__linux.adb, libgnarl/s-taprop__mingw.adb, - libgnarl/s-taprop__posix.adb, libgnarl/s-taprop__qnx.adb, - libgnarl/s-taprop__solaris.adb, libgnarl/s-taprop__vxworks.adb, - libgnarl/s-tarest.adb, libgnarl/s-tasini.adb, - libgnarl/s-taskin.adb, libgnarl/s-taspri__dummy.ads, - libgnarl/s-taspri__hpux-dce.ads, libgnarl/s-taspri__lynxos.ads, - libgnarl/s-taspri__mingw.ads, - libgnarl/s-taspri__posix-noaltstack.ads, - libgnarl/s-taspri__posix.ads, libgnarl/s-taspri__solaris.ads, - libgnarl/s-taspri__vxworks.ads, libgnarl/s-tassta.adb, - libgnarl/s-tasuti.adb, libgnarl/s-tposen.adb, - libgnat/a-except.adb, libgnat/a-except.ads, - libgnat/s-dwalin.adb, libgnat/s-dwalin.ads, - libgnat/s-mastop.ads, libgnat/s-soflin.adb, - libgnat/s-stalib.adb, libgnat/s-stalib.ads, - libgnat/s-stchop.adb, libgnat/s-stchop.ads, - libgnat/s-stchop__limit.ads, libgnat/s-traceb.ads, - libgnat/s-traent.adb, libgnat/s-traent.ads, - libgnat/s-trasym.adb, libgnat/s-trasym.ads, - libgnat/s-trasym__dwarf.adb, opt.adb, opt.ads, par-prag.adb, - sem_prag.adb, snames.ads-tmpl, switch-c.adb, targparm.adb, - targparm.ads, usage.adb: Remove support for -gnatP and pragma - Polling. - * gnat_ugn.texi: Regenerate. - * libgnat/a-excpol.adb, libgnat/a-excpol__abort.adb: Removed. - -2020-10-16 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Array_Type_Declaration): Create itype with unique - name. - -2020-10-16 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Analyze_Object_Declaration): Limit scope of a - local object by hiding it from local subprograms; simplify - nested if-then-if-then condition for an Ada 83 restriction. - (Array_Type_Declaration): Confirm with assertion when the else - branch is executed. - (Find_Type_Of_Object): Simplify membership test with a subtype - range. - -2020-10-16 Yannick Moy <moy@adacore.com> - - * sem_prag.adb (Analyze_Global_In_Decl_Part): Update check to - reject volatile object for reading. - * sem_res.adb (Resolve_Actuals, Resolve_Entity_Name): Update - check to reject volatile object for reading. - * sem_util.adb, sem_util.ads - (Check_Nonvolatile_Function_Profile, - Has_Effectively_Volatile_Profile): Detect use of volatile object - for reading. - (Has_Enabled_Property): Accept constants as well. - (Is_Effectively_Volatile_For_Reading): New function based on - existing Is_Effectively_Volatile. - (Is_Effectively_Volatile_Object_For_Reading): Adapted from the - existing Is_Effectively_Volatile_Object, using a shared - implementation in Is_Effectively_Volatile_Object_Shared. - -2020-10-16 Gary Dismukes <dismukes@adacore.com> - - * exp_ch7.adb (Check_Unnesting_In_Decls_Or_Stmts): In the case - of an if-statement, call Unnest_If_Statement to determine - whether there are nested subprograms in any of the statement - lists of the "if" parts that require a wrapping procedure to - handle possible up-level refeferences. - (Unnest_Block): Call Check_Unnesting_In_Handlers to do unnesting - of subprograms in exception handlers of the block statement. - (Unnest_If_Statement): New procedure to traverse the parts of an - if-statement and create wrapper procedures as needed to - encapsulate nested subprograms that may make up-level - references. - (Check_Stmts_For_Subp_Unnesting): New support procedure in - Unnest_If_Statement to traverse a statement list looking for - top-level subprogram bodies that require wrapping inside a - procedure (via Unnest_Statement_List) as well as possibly having - other statements (block, loop, if) that may themselves require - an unnesting transformation (via - Check_Unnesting_In_Decls_Or_Stmts). - (Unnest_Statement_List): New support procedure to traverse the - statements of a statement list that contains subprogram bodies - at the top level and replace the statement list with a wrapper - procedure body encapsulating the statements and a call to the - procedure. - -2020-10-16 Arnaud Charlet <charlet@adacore.com> - - * sem_prag.adb (Check_OK_Stream_Convert_Function): Check for - abstract subprograms. - -2020-10-16 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_rm/standard_and_implementation_defined_restrictions.rst - (No_Local_Timing_Events): Package Timing_Events is a child of - Ada.Real_Time, not of Ada. - * gnat_rm.texi: Regenerate. - -2020-10-16 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_defined_attributes.rst: Document the - new Max_Integer_Size attribute. - * gnat_rm.texi: Regenerate. - * exp_attr.adb (Get_Integer_Type): Call Small_Integer_Type_For. - (Expand_N_Attribute_Reference) <Attribute_Pred>: Replace selection - code with call to Integer_Type_For. - <Attribute_Succ>: Likewise. - <Attribute_Val>: Likewise. - <Attribute_Valid>: Likewise. - <Attribute_Max_Integer_Size>: Raise Program_Error. - * exp_ch3.adb (Expand_Freeze_Enumeration_Type): Replace selection - code with call to Integer_Type_For. - (Simple_Init_Initialize_Scalars_Type): Use Long_Long_Unsigned and - System_Max_Integer_Size to size the largest integer type. - * exp_pakd.adb (Compute_Linear_Subscript): Minor tweak. - (Create_Packed_Array_Impl_Type): Use Small_Integer_Type_For. - * exp_util.ads (Integer_Type_For): New function. - (Small_Integer_Type_For): Likewise. - * exp_util.adb (Adjust_Condition): Use Integer_Type_For. - (Component_May_Be_Bit_Aligned): Use System_Max_Integer_Size. - (Integer_Type_For): New function. - (Small_Integer_Type_For): Likewise. - (Matching_Standard_Type): Use Small_Integer_Type_For. - (Needs_Constant_Address): Replace 64 with System_Max_Integer_Size. - * freeze.adb (Set_Small_Size): Likewise. - (Size_Known): Likewise. - (Check_Suspicious_Modulus): Likewise. - (Check_Large_Modular_Array): Likewise. - (Freeze_Entity): Likewise. - * layout.adb (Layout_Type): Likewise. - * sem_aggr.adb: Add with and use clauses for Ttypes. - (Resolve_Aggregate): Replace 64 with System_Max_Integer_Size. - * sem_attr.ads (Attribute_Impl_Def): Add Attribute_Max_Integer_Size. - * sem_attr.adb (Analyze_Attribute) <Attribute_Max_Integer_Size>: New - (Eval_Attribute): Likewise. - * sem_ch13.adb (Adjust_Record_For_Reverse_Bit_Order): Change max - scalar size to System_Max_Integer_Size. - (Check_Array_Type): Replace 64 with System_Max_Integer_Size and - remove superfluous test. - (OK_Component): Likewise. - * sem_ch5.adb: Add with and use clauses for Ttypes. - (Analyze_Assignment): Replace 64 with System_Max_Integer_Size. - * snames.ads-tmpl (Name_Max_Integer_Size): New attribute name. - (Attribute_Id): Add Attribute_Max_Integer_Size. - * ttypes.ads (System_Max_Integer_Size): New constant. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * sem_ch10.adb (Install_With_Clause): Fix implementation of Ada - 2005 AI-262 by taking into account generic packages. Minor - reformatting. - * libgnat/a-cbhase.ads, libgnat/a-cbhase.adb: Remove use clause - on runtime unit spec. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * einfo.ads, einfo.adb (Scope_Depth_Value, - Set_Scope_Depth_Value): Add assertions on valid nodes and update - documentation accordingly. - (Write_Field22_Name): Sync with change in Scope_Depth_Value. - * sem_ch8.adb (Find_Direct_Name): Fix call to Scope_Depth_Value. - -2020-10-15 Javier Miranda <miranda@adacore.com> - - * sem_prag.adb (Analyze_Pragma): Adding semantic support of - Standard to Default_Storage_Pool. - * freeze.adb (Freeze_Entity): If pragma Default_Storage_Pool - applies and it is set to Standard then use the global pool as - the associated storage pool of the access type. - -2020-10-15 Javier Miranda <miranda@adacore.com> - - * exp_ch6.ads (Might_Have_Tasks): Update documentation. - * exp_ch6.adb (Might_Have_Tasks): Return also true when the type - has tasks. - (Make_Build_In_Place_Call_In_Allocator): Code cleanup. - * exp_ch3.adb (Ensure_Activation_Chain_And_Master, - Expand_N_Full_Type_Declaration, Expand_N_Object_Declaration): - Code cleanup. - -2020-10-15 Steve Baird <baird@adacore.com> - - * checks.adb (Apply_Predicate_Check): Generate "infinite - recursion" warning message even if run-time predicate checking - is disabled. - * exp_ch6.adb (Expand_Simple_Function_Return): In testing - whether the returned expression is a function call, look for the - case where the call has been transformed into a dereference of - an access value that designates the result of a function call. - * sem_ch3.adb (Analyze_Object_Declaration): Legality checking - for a static expression is unaffected by assertion policy (and, - in particular, enabling/disabling of subtype predicates. To get - the right legality checking, we need to call - Check_Expression_Against_Static_Predicate for a static - expression even if predicate checking is disabled for the given - predicate-bearing subtype. On the other hand, we don't want to - call Make_Predicate_Check unless predicate checking is enabled. - * sem_ch7.adb (Uninstall_Declarations.Preserve_Full_Attributes): - Preserve the Predicates_Ignored attribute. - * sem_eval.adb (Check_Expression_Against_Static_Predicate): - Previously callers ensured that this procedure was only called - if predicate checking was enabled; that is no longer the case, - so predicates-disabled case must be handled. - * sem_prag.adb (Analyze_Pragma): Fix bug in setting - Predicates_Ignored attribute in Predicate pragma case. - -2020-10-15 Ed Schonberg <schonberg@adacore.com> - - * freeze.adb (Freeze_Fixed_Point_Type): Do not scale the bounds - of a declared subtype using the 'Small of the type; this is - done during resolution of the bound itself, unlike what is done - for the bounds of the base type, which are used to determine its - required size. Previous code performed this scaling twice, - leading to meaningless values for such a subtype. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.adb (Bad_Predicated_Subtype_Use): Emit an - unconditional error, not a conditional warning. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Process_Subtype): Combine guards for - Null_Exclusion_Present in May_Have_Null_Exclusion; use this - combined guard when checking AI-231. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Process_Subtype): Sync May_Have_Null_Exclusion - with assertion in Null_Exclusion_Present; clarify the scope of - local variables. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Analyze_Subtype_Declaration): Fix style. - (Make_Index): Refactor to avoid repeated detection of subtype - indication; add comment. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Is_Acceptable_Dim3): Use Is_RTE to not pull CUDA - package unless necessary; rename local Tmp variable; iterate - with procedural Next. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Array_Type_Declaration): Refine type of a local - variable. - (Make_Index): Simplify to avoid assignment with a type entity - and then backtracking by reassigning to Empty; remove excessive - whitespace. - * sem_ch9.adb (Analyze_Entry_Body): Remove extra parens. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Access_Subprogram_Declaration): Remove extra - parens. - (Make_Index): Remove excessive calls to Is_Type. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * sem_util.adb (Enter_Name): Remove unnecessary conditions in - Enter_Name that come from the beginning of times. - -2020-10-15 Bob Duff <duff@adacore.com> - - * exp_ch6.adb (Expand_Simple_Function_Return): Remove DSP part - of comment, and reformat. - -2020-10-15 Boris Yakobowski <yakobowski@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Do not expand - 'Initialized in CodePeer mode. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * sem_ch12.adb (Reset_Entity): Protect against malformed tree. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * sem_ch13.adb (Add_Predicates): Prevent analyzing twice the - same pragma in case an inner package references the type with a - predicate (as opposed to defining the type). - -2020-10-15 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/a-cfinve.adb (Int): Use subtype of Long_Long_Integer. - * libgnat/a-cofove.adb (Int): Likewise. - * libgnat/a-cgcaso.adb (T): Likewise. - * libgnat/a-cogeso.adb (T): Likewise. - * libgnat/g-debpoo.ads (Byte_Count): Use Long_Long_Integer'Size. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch12.adb: Replace list of N_Defining_... enumerations with - N_Entity. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.ads, sem_ch3.adb (Make_Index): Refined type of - parameter. - (Constrain_Index): Likewise. - (Array_Type_Declaration): Refine type of a local counter - variable; remove a trivially useless initialization. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Analyze_Subtype_Declaration): Recognize both - identifiers and expanded names; use high-level Is_Scalar_Type - instead of low-level membership test. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * sem_eval.adb (Eval_Intrinsic_Call, Fold_Shift): Add support - for Shift_Right_Arithmetic and for signed integers. - * exp_ch4.adb (Expand_N_Op_Rotate_Left, - Expand_N_Op_Rotate_Right, Expand_N_Op_Shift_Left, - Expand_N_Op_Shift_Right_Arithmetic): Minor reformatting and code - cleanup to ensure a consistent handling. Update comments and add - assertion. - -2020-10-15 Bob Duff <duff@adacore.com> - - * sem_ch13.adb (Visible_Component): Enable this code for task - and protected types, as well as record and private types. - * sem_ch13.ads (Replace_Type_References_Generic): Update - comment. Move the efficiency comment into the body, because - it's about the implementation. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * par-ch13.adb (Get_Aspect_Specifications): Generate a warning - rather than an error on unknown aspects unless -gnatd2 is used. - (Aspect_Specifications_Present): Improve detection of unknown - aspects. - * debug.adb (Debug_Flag_2): Update document. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * sem_res.adb (Resolve_Call): Do not try to inline intrinsic - calls. - -2020-10-15 Ed Schonberg <schonberg@adacore.com> - - * exp_aggr.adb (Expand_N_Aggregate): A record aggregate requires - a non-private type. - * sem_ch13.adb (Valid_Assign_Indexed): New subprogram local to - Resolve_Aspect_Aggregate, to handle the case when the - corresponding name appearing in the aspect specification for an - indexed aggregate is an overloaded operation. - * libgnat/a-convec.ads, libgnat/a-convec.adb, - libgnat/a-coinve.ads, libgnat/a-coinve.adb, - libgnat/a-cobove.ads, libgnat/a-cobove.adb, - libgnat/a-cdlili.ads, libgnat/a-cdlili.adb, - libgnat/a-cbdlli.ads, libgnat/a-cbdlli.adb, - libgnat/a-cohama.ads, libgnat/a-cihama.ads, - libgnat/a-cbhama.ads, libgnat/a-cborma.ads, - libgnat/a-ciorma.ads, libgnat/a-coorma.ads, - libgnat/a-cihase.ads, libgnat/a-cohase.ads, - libgnat/a-cbhase.ads, libgnat/a-cborse.ads, - libgnat/a-ciorse.ads, libgnat/a-coorse.ads: Add Ada_2020 aspect - Aggregate to types declared in standard containers, as well as - new subprograms where required. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * libgnat/g-arrspl.ads, libgnat/g-arrspl.adb (Create, - First_Cursor, Advance, Has_Element): New. - -2020-10-15 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl: Add target pair for interfac.ads. - * libgnat/interfac.ads: Add a comment. - * libgnat/interfac__2020.ads: New, used for bootstrap purposes. - * sem_util.adb (Is_Static_Function): Always return False for pre - Ada 2020 to e.g. ignore the Static aspect in Interfaces for - Ada < 2020. - -2020-10-15 Piotr Trojanek <trojanek@adacore.com> - - * exp_util.adb (Remove_Side_Effects): Move special-casing for - GNATprove to be applied to all object declarations. - -2020-10-12 Alexandre Oliva <oliva@adacore.com> - - * libgnat/a-ngelfu.ads (Sin, Cos): Make the single-argument - functions inline. - -2020-10-11 Alexandre Oliva <oliva@adacore.com> - - * libgnat/a-numaux.ads: Make all imports Intrinsic. - * libgnat/a-numaux__darwin.ads: Likewise. - * libgnat/a-numaux__libc-x86.ads: Likewise. - * libgnat/a-numaux__vxworks.ads: Likewise. - -2020-09-28 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (Subprogram_Body_to_gnu): Set the end locus - of body and declaration earlier. - -2020-09-28 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (maybe_saturate_size): Add ALIGN parameter - and round down the result to ALIGN. - (gnat_to_gnu_entity): Adjust calls to maybe_saturate_size. - -2020-09-14 Jakub Jelinek <jakub@redhat.com> - - * gcc-interface/trans.c (gigi): Adjust build_optimization_node - caller. - -2020-09-12 Eric Botcazou <ebotcazou@adacore.com> - - * fe.h: Fix pilot error in previous change. - * gcc-interface/gigi.h (enum standard_datatypes): Add ADT_mulv128_decl. - (mulv128_decl): New macro. - (get_target_long_long_long_size): Declare. - * gcc-interface/decl.c (gnat_to_gnu_entity): Use a maximum size of - 128 bits for discrete types if Enable_128bit_Types is true. - * gcc-interface/targtyps.c: Include target.h. - (get_target_long_long_long_size): New function. - * gcc-interface/trans.c (gigi): Initialize mulv128_decl if need be. - (build_binary_op_trapv): Call it for 128-bit multiplication. - * gcc-interface/utils.c (make_type_from_size): Enforce a maximum - size of 128 bits if Enable_128bit_Types is true. - -2020-09-12 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (lvalue_for_aggr_p) <N_Object_Declaration>: - Return false unconditionally. - -2020-09-12 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (gnat_to_gnu) <N_Object_Declaration>: Clear - the SLOC of the expression of a tag. - -2020-09-12 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Only give - a warning for the overlay of an aliased array with an unconstrained - nominal subtype if the address is absolute. - -2020-09-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/utils.c (type_has_variable_size): New function. - (create_field_decl): In the packed case, also force byte alignment - when the type of the field has variable size. - -2020-09-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/misc.c (get_array_bit_stride): Return TYPE_ADA_SIZE - for record and union types. - -2020-09-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/misc.c (gnat_get_fixed_point_type): Bail out only - when the GNAT encodings are specifically used. - -2020-09-11 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Only - create extra subtypes for discriminants if the RM size of the base - type of the index type is lower than that of the index type. - -2020-09-10 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (set_rm_size): Do not take into account the - Value_Size clause if it is not for the entity itself. - -2020-09-10 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (build_subst_list): For a definition, make - sure to instantiate the SAVE_EXPRs generated by the elaboration of - the constraints in front of the elaboration of the type itself. - -2020-09-10 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/misc.c: Include tree-pass.h. - (internal_error_function): Call emergency_dump_function. - -2020-09-03 Arnaud Charlet <charlet@adacore.com> - - * fe.h, opt.ads (Enable_128bit_Types): New. - * stand.ads (Standard_Long_Long_Long_Integer, - S_Long_Long_Long_Integer): New. - -2020-09-03 Arnaud Charlet <charlet@adacore.com> - - * sem_util.ads, sem_util.adb (Get_Fullest_View): New procedure. - * exp_unst.adb (Check Static_Type): Do all processing on fullest - view of specified type. - -2020-08-27 Martin Liska <mliska@suse.cz> - - * gcc-interface/trans.c (gigi): Set exact argument of a vector - growth function to true. - (Attribute_to_gnu): Likewise. - -2020-07-27 Alexandre Oliva <oliva@adacore.com> - - * switch.adb (Is_Internal_GCC_Switch): Revert accidental - reintroduction of auxbase and auxbase-strip. - -2020-07-27 Javier Miranda <miranda@adacore.com> - - * sem_res.adb (Resolve_Actuals): Restrict the check on matching - aliased components to view conversions of array types that are - not placed in an instance. In such case at runtime an object is - created. - * sem_util.ads (Is_Actual_In_Out_Parameter, Is_View_Conversion): - New subprograms. - * sem_util.adb (Is_Actual_In_Out_Parameter, Is_View_Conversion): - New subprograms. - -2020-07-27 Arnaud Charlet <charlet@adacore.com> - - * lib-xref.adb (Generate_Reference): Protect against malformed - tree in case of severe errors. - * sem_ch8.adb (Add_Implicit_Operator): Ditto. - -2020-07-27 Arnaud Charlet <charlet@adacore.com> - - * opt.ads (Ada_Version_Runtime): Set to Ada_2020. - * sem_ch3.adb (Analyze_Subtype_Declaration): Propagate - Is_Independent flag to subtypes. - * libgnarl/s-taprop__linux.adb: Adapt to Ada 2020 warning. - * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads, - libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb, - libgnat/a-nbnbre.ads, libgnat/a-stobbu.adb, - libgnat/a-stobbu.ads, libgnat/a-stobfi.adb, - libgnat/a-stobfi.ads, libgnat/a-stoubu.adb, - libgnat/a-stoubu.ads, libgnat/a-stoufi.adb, - libgnat/a-stoufi.ads, libgnat/a-stoufo.adb, - libgnat/a-stoufo.ads, libgnat/a-stouut.adb, - libgnat/a-stouut.ads, libgnat/a-strsto.ads, - libgnat/a-ststbo.adb, libgnat/a-ststbo.ads, - libgnat/a-ststun.adb, libgnat/a-ststun.ads, - libgnat/a-stteou.ads, libgnat/s-aoinar.ads, - libgnat/s-aomoar.ads, libgnat/s-atopex.ads, - libgnat/s-putaim.adb, libgnat/s-putaim.ads, - libgnat/s-putima.adb, libgnat/s-putima.ads: Remove pragma - Ada_2020, now redundant. - -2020-07-27 Justin Squirek <squirek@adacore.com> - - * exp_ch6.adb (Expand_Call_Helper): Modify addition of the extra - accessibility parameter to take into account the extra - accessibility of formals within the calling subprogram. - -2020-07-27 Bob Duff <duff@adacore.com> - - * exp_imgv.adb (Expand_Image_Attribute): Add Root_Type, so - constrained subtypes work. - -2020-07-27 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_prag.adb (Arg1, Arg2, Arg3): Removed. - (Arg_N): New function. - -2020-07-27 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Analyze_Object_Renaming): Allow values in Ada - 2020 mode. - -2020-07-27 Arnaud Charlet <charlet@adacore.com> - - * sem_res.adb (Resolve_Actuals): Refine 6.4.1 rules as per - AI12-0377. - -2020-07-27 Bob Duff <duff@adacore.com> - - * errout.ads, errout.adb (Error_Msg_Ada_2020_Feature): New - procedure analogous to Error_Msg_Ada_2012_Feature. - * sem_attr.adb (Analyze_Image_Attribute): Use - Error_Msg_Ada_2012_Feature and Error_Msg_Ada_2020_Feature to - indicate that Object'Image is allowed in Ada 2012, and that - 'Image is allowed for any type in Ada 2020. - -2020-07-27 Dmitriy Anisimkov <anisimko@adacore.com> - - * libgnat/a-strunb.adb (Sum, Mul, Saturated_Sum, Saturated_Mul): - New routines. Use them when resulting string size more that - length of the strings in parameters. - (Unbounded_Slice): Use "- 1" instead of "+ 1" in opposite side - of condition to avoid overflow. - * libgnat/a-strunb__shared.adb (Sum, Mul): New routines. - (Allocate): New routine with 2 parameters. Use routine above - when resulting string size more that length of the strings in - parameters. - (Aligned_Max_Length): Do not try to align to more than Natural'Last. - (Unbounded_Slice): Use "- 1" instead of "+ 1" in opposite side - of condition to avoid overflow. - -2020-07-27 Arnaud Charlet <charlet@adacore.com> - - * sem_attr.adb (Resolve_Attribute): Remove dead code. - -2020-07-27 Arnaud Charlet <charlet@adacore.com> - - * aspects.adb, atree.adb, atree.ads, checks.adb, contracts.adb, - einfo.adb, errout.adb, exp_aggr.adb, exp_attr.adb, exp_cg.adb, - exp_ch11.adb, exp_ch2.adb, exp_ch3.adb, exp_ch4.adb, - exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_ch9.adb, - exp_dbug.adb, exp_disp.adb, exp_intr.adb, exp_pakd.adb, - exp_prag.adb, exp_put_image.adb, exp_smem.adb, exp_tss.adb, - exp_unst.adb, exp_util.adb, freeze.adb, ghost.adb, gnat1drv.adb, - inline.adb, lib-writ.adb, lib-xref-spark_specific.adb, - lib-xref.adb, namet.adb, namet.ads, nlists.adb, par-ch10.adb, - par-ch2.adb, par-ch3.adb, par-ch4.adb, par-ch5.adb, par-ch6.adb, - par-prag.adb, par-util.adb, par_sco.adb, pprint.adb, - repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb, sem.adb, - sem_aggr.adb, sem_attr.adb, sem_aux.adb, sem_cat.adb, - sem_ch10.adb, sem_ch11.adb, sem_ch12.adb, sem_ch13.adb, - sem_ch3.adb, sem_ch4.adb, sem_ch5.adb, sem_ch6.adb, sem_ch7.adb, - sem_ch8.adb, sem_ch9.adb, sem_dim.adb, sem_disp.adb, - sem_dist.adb, sem_elab.adb, sem_elim.adb, sem_eval.adb, - sem_intr.adb, sem_mech.adb, sem_prag.adb, sem_res.adb, - sem_scil.adb, sem_type.adb, sem_util.adb, sem_warn.adb, - sinfo.adb, sinfo.ads, sprint.adb, styleg.adb, tbuild.adb, - treepr.adb (Nkind_In, Nam_In, Ekind_In): Removed, replaced by - membership tests. - -2020-07-27 Gary Dismukes <dismukes@adacore.com> - - * sem_prag.adb (Analyze_Pragma, Pragma_Max_Entry_Queue_Length): - Refine error message to indicate that the pragma must apply to - an entry declaration, not just an entry. - -2020-07-27 Javier Miranda <miranda@adacore.com> - - * exp_ch6.adb (Make_Build_In_Place_Iface_Call_In_Allocator): - Revert previous patch, and add a missing type conversion to - displace the pointer to the allocated object to reference the - target dispatch table. - -2020-07-27 Javier Miranda <miranda@adacore.com> - - * sem_res.adb (Resolve_Actuals): Restore restrictive check on - view conversions which required matching value of - Has_Aliased_Components of formals and actuals. Required to avoid - the regression of ACATS b460005. - -2020-07-27 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Instantiate_Package_Body): Add commentary for a - nesting issue with parent handling and private view switching. - (Switch_View): Do not skip specific private-dependent subtypes. - -2020-07-27 Patrick Bernardi <bernardi@adacore.com> - - * Makefile.rtl: Remove X86_TARGET_PAIRS for x86-lynx178elf. - -2020-07-27 Ed Schonberg <schonberg@adacore.com> - - * sem_ch13.adb (Analyze_Address_Specification_Clause): Do not - emit a warning when a constant declaration in a generic unit - overlays a generic In_Parameter. - -2020-07-27 Gary Dismukes <dismukes@adacore.com> - - * sem_ch3.adb (Check_Abstract_Overriding): Remove Scope - comparison test from test related to initial implementation of - AI12-0042, plus remove the related ??? comment. - (Derive_Subprogram): Add test requiring that the type extension - appear in the visible part of its enclosing package when - checking the overriding requirement of 7.3.2(6.1/4), as - clarified by AI12-0382. - -2020-07-27 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference) Extend - existing workaround to 'Pos. - -2020-07-27 Bob Duff <duff@adacore.com> - - * libgnat/s-rannum.ads, libgnat/s-rannum.adb: Add Put_Image. - This will be inherited by the language-defined packages - Ada.Numerics.Discrete_Random and Ada.Numerics.Float_Random. - * libgnat/a-convec.ads, libgnat/a-convec.adb: Add Put_Image. - * libgnat/s-putima.ads: Add pragma Preelaborate, so this can be - imported into containers packages. - * libgnat/s-putima.adb: Move Digit to private part; otherwise - reference to Base is illegal in Preelaborate generic. - * exp_put_image.adb (Build_Record_Put_Image_Procedure): Use the - base type. - -2020-07-23 Arnaud Charlet <charlet@adacore.com> - - * aspects.ads: Declare CUDA_Global as aspect. - * einfo.ads: Use Flag118 for the Is_CUDA_Kernel flag. - (Set_Is_CUDA_Kernel): New function. - (Is_CUDA_Kernel): New function. - * einfo.adb (Set_Is_CUDA_Kernel): New function. - (Is_CUDA_Kernel): New function. - * par-prag.adb (Prag): Ignore Pragma_CUDA_Execute and - Pragma_CUDA_global. - * rtsfind.ads: Define CUDA.Driver_Types.Stream_T and - CUDA.Vector_Types.Dim3 entities - * rtsfind.adb: Define CUDA_Descendant subtype. - (Get_Unit_Name): Handle CUDA_Descendant packages. - * sem_prag.ads: Mark CUDA_Global as aspect-specifying pragma. - * sem_prag.adb (Analyze_Pragma): Validate Pragma_CUDA_Execute and - Pragma_CUDA_Global. - * snames.ads-tmpl: Define Name_CUDA_Execute and Name_CUDA_Global. - -2020-07-23 Arnaud Charlet <charlet@adacore.com> - - * sem_ch13.ads (Same_Representation): Renamed as - Has_Compatible_Representation because now the order of the arguments - are taken into account; its formals are also renamed as Target_Type - and Operand_Type. - * sem_ch13.adb (Same_Representation): Renamed and moved to place the - routine in alphabetic order. - * sem_attr.adb (Prefix_With_Safe_Accessibility_Level): New subprogram. - (Resolve_Attribute): Check that the prefix of attribute Access - does not have a value conversion of an array type. - * sem_res.adb (Resolve_Actuals): Remove restrictive check on view - conversions which required matching value of Has_Aliased_Components of - formals and actuals. - * exp_ch4.adb (Handle_Changed_Representation): Update call to - Same_Representation. - (Expand_N_Type_Conversion): Update call to Same_Representation. - * exp_ch5.adb (Change_Of_Representation): Update call to - Same_Representation. - * exp_ch6.adb (Add_Call_By_Copy_Code): Update call to - Same_Representation. - (Expand_Actuals): Update call to Same_Representation. - (Expand_Call_Helper): Update call to Same_Representation. - -2020-07-23 Arnaud Charlet <charlet@adacore.com> - - * output.ads (Push_Output, Pop_Output): New procedures. - * output.adb (FD_Array, FD_Stack, FD_Stack_Idx): New type and vars. - (Push_Output, Pop_Output): New procedures. - -2020-07-16 Javier Miranda <miranda@adacore.com> - - * exp_ch3.adb (Expand_N_Full_Type_Declaration): Ensure a _master - declaration on limited types that might have tasks. - * exp_ch9.adb (Build_Master_Renaming): For private types, if we - are processing declarations in the private part, ensure that - master is inserted before its full declaration; otherwise the - master renaming may be inserted in the public part of the - package (and hence before the declaration of its _master - variable). - -2020-07-16 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Analyze_Subprogram_Renaming): A renames-as-body - freezes the expression of any expression function that it - renames. - -2020-07-16 Ed Schonberg <schonberg@adacore.com> - - * sem_aggr.adb (Resolve_Container_Aggregate): Add semantic - checks for indexed aggregates, including component associations - and iterated component associations. - * exp_aggr.adb (Expand_Iterated_Component): New subprogram, - subsidiary of Expand_Container_Aggreggate, used for positional, - named, and indexed aggregates. - (Aggregate_Size): New subprogram to precompute the size of an - indexed aggregate prior to call to allocate it. - (Expand_Range_Component): New subprogram so generate loop for a - component association given by a range or a subtype name in an - indexed aggregate. - -2020-07-16 Bob Duff <duff@adacore.com> - - * bindo-diagnostics.adb (Output_Invocation_Related_Suggestions): - Use Cumulative_Restrictions.Set, because Restriction_Active only - works at compile time. - -2020-07-16 Bob Duff <duff@adacore.com> - - * gnatbind.adb (Gnatbind): For No_Tasks_Unassigned_To_CPU, check - that CPU has been set on the main subprogram. - (Restriction_Could_Be_Set): Don't print - No_Tasks_Unassigned_To_CPU if it would violate the - above-mentioned rule. Up to now, all restrictions were checked - by the compiler, with the binder just checking for consistency. - But the compiler can't know which subprogram is the main, so - it's impossible to check this one at compile time. - * restrict.ads, restrict.adb: Misc refactoring. Change Warning - to Warn, for consistency, since most already use Warn. - (Set_Restriction): New convenience routine. - * sem_ch13.adb (Attribute_CPU): Check - No_Tasks_Unassigned_To_CPU. - * sem_prag.adb (Pragma_CPU): Check No_Tasks_Unassigned_To_CPU. - Misc refactoring. - * tbuild.ads, tbuild.adb (Sel_Comp): New functions for building - selected components. - -2020-07-16 Eric Botcazou <ebotcazou@adacore.com> - - * impunit.adb (Non_Imp_File_Names_95): Remove duplicate entry. - -2020-07-16 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl: replace a-numaux__x86.ads by - a-numaux__libc-x86.ads and a-numaux__x86.adb by - a-numaux__dummy.adb. - * libgnat/a-numaux__x86.ads, libgnat/a-numaux__x86.adb: Removed. - * libgnat/a-numaux__dummy.adb: New. - -2020-07-16 Ed Schonberg <schonberg@adacore.com> - - * sem_ch12.adb (Load_Parent_Of_Generic): If an ancestor is an - instance whose source appears within a formal package of the - current unit, there is no body of the ancestor needed to - complete the current generic compilation. - -2020-07-16 Doug Rupp <rupp@adacore.com> - - * libgnat/s-thread__ae653.adb (taskVarAdd): Defunct, so remove. - (Current_ATSD): Make it a TLS variable. - (OK): Move to package scope. - (System.Storage_Elements): Import and Use. - -2020-07-16 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch9.adb (Expand_N_Accept_Statement): Set Parent of the - created block entity to the created block statement. - -2020-07-16 Arnaud Charlet <charlet@adacore.com> - - * scng.adb (Scan): Detect wide characters not in NFKC. - * libgnat/a-chahan.adb, libgnat/a-chahan.ads, - libgnat/a-wichha.adb, libgnat/a-wichha.ads, - libgnat/a-wichun.adb, libgnat/a-wichun.ads, - libgnat/a-zchhan.adb, libgnat/a-zchhan.ads, - libgnat/a-zchuni.adb, libgnat/a-zchuni.ads (Is_NFKC): New. - * libgnat/s-utf_32.ads, libgnat/s-utf_32.adb (Is_UTF_32_NFKC): - New. - -2020-07-16 Bob Duff <duff@adacore.com> - - * libgnat/s-rident.ads (Restriction_Id): Add - No_Tasks_Unassigned_To_CPU. - -2020-07-16 Bob Duff <duff@adacore.com> - - * exp_aggr.adb (Max_Aggregate_Size): Use the small size of 64 - when copying is needed (for example, for the initialization of a - local variable, and for assignment statements). Use the larger - size when static allocation can be done without copying. - -2020-07-16 Bob Duff <duff@adacore.com> - - * libgnat/s-rident.ads (No_Dynamic_CPU_Assignment): New - restriction. Add it to all relevant profiles. - * sem_ch13.adb (Attribute_CPU): Check No_Dynamic_CPU_Assignment - restriction. - (Attribute_CPU, Attribute_Dispatching_Domain, - Attribute_Interrupt_Priority): Remove error checks -- these are - checked in the parser. - * sem_prag.adb (Pragma_CPU): Check No_Dynamic_CPU_Assignment - restriction. We've got a little violation of DRY here. - * sem.ads, sem_ch3.ads: Minor comment fix. - -2020-07-16 Gary Dismukes <dismukes@adacore.com> - - * sem_ch4.adb (Try_Container_Indexing): When the prefix type is - an access type, change it to the designated type, change the - prefix to an explicit dereference, and emit a ?d? warning for - the implicit dereference. Include a ??? comment questioning - whether this is the right context in which to perform the - implicit dereferencing. - -2020-07-16 Arnaud Charlet <charlet@adacore.com> - - * sem_ch13.adb (Validate_Literal_Aspect): Ensure that the - parameter is not aliased. Minor reformatting. - * sem_util.adb (Statically_Names_Object): Update comment. - -2020-07-16 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_case.adb (Build_Choice): Set Is_Static_Expression flag. - (Lit_Of): Update specification to mention Is_Static_Expression - flag. - * sem_ch13.adb (Membership_Entry): Check for N_Others_Choice. - -2020-07-16 Bob Duff <duff@adacore.com> - - * sem_ch6.adb (Null_Exclusions_Match): New function to check - that the null exclusions match, including in the case addressed - by this AI. - (Check_Conformance): Remove calls to Comes_From_Source - when calling Null_Exclusions_Match. These are not - needed, as indicated by an ancient "???" comment. - -2020-07-16 Justin Squirek <squirek@adacore.com> - - * exp_ch4.adb (Expand_N_Type_Conversion): Remove flawed test for - whether "statically deeper" accessibility rules apply to a given - target type and instead use the new routine - Statically_Deeper_Relation_Applies. - (Statically_Deeper_Relation_Applies): Created to centralize the - calculation of whether a target type within a conversion must - have static accessibility checks. - * sem_ch13.adb (Check_One_Function): Minor comment revision. - -2020-07-16 Eric Botcazou <ebotcazou@adacore.com> - - * fe.h (Is_OK_Static_Expression): Delete. - * sem_eval.ads (Is_OK_Static_Expression): Remove WARNING note. - -2020-07-16 Justin Squirek <squirek@adacore.com> - - * einfo.adb, einfo.ads (Is_Named_Access_Type): Created for - readability. - * sem_ch6.adb (Check_Return_Construct_Accessibility): Add - special cases for formals. - * sem_util.adb (Object_Access_Level): Add handling of access - attributes and named access types in the general case. - -2020-07-16 Piotr Trojanek <trojanek@adacore.com> - - * sem_case.adb (Build_Choice): Simplify. - -2020-07-16 Arnaud Charlet <charlet@adacore.com> - - * frontend.adb: Disable Initialize_Scalars on runtime files. - -2020-07-16 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_ch3.adb (Analyze_Object_Declaration): Add - Comes_From_Source call. - -2020-07-16 Javier Miranda <miranda@adacore.com> - - * exp_attr.adb (Expand_Access_To_Protected_Op): Initialize - variable Sub to Empty to avoid false positive reported by - Codepeer. - -2020-07-16 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Note_Redundant_Use): Add missing warning tag. - Do not check for redundant use clauses in predefined units to avoid - misleading warnings that may occur as part of a rtsfind load. - -2020-07-16 Javier Miranda <miranda@adacore.com> - - * exp_attr.adb (Has_By_Protected_Procedure_Prefixed_View): New - subprogram. - (Expand_Access_To_Protected_Op): Adding support for prefixed - class-wide view with By_Protected_Procedure convention. - * sem_attr.adb (Get_Convention): New subprogram. - (Get_Kind): Adapted to use Get_Convention. - * sem_ch4.adb (Try_By_Protected_Procedure_Prefixed_View): New - subprogram. - (Analyze_Selected_Component): Invoke - Try_By_Protected_Procedure_Prefixed_View. - * sem_util.ads (Is_By_Protected_Procedure): New subprogram. - * sem_util.adb (Is_By_Protected_Procedure): New subprogram. - -2020-07-16 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-ststop.ads: Fix typo. - * libgnat/s-ststop.adb (Read, Write): Fix block number - computation to avoid overflows in case of large strings. - -2020-07-16 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-genbig.adb ("**"): Remove capacity limit check. - Improve code by using an extended return. - (Normalize): Perform capacity limit check here instead which is - the centralized place where (potentially large) big integers are - allocated. - -2020-07-16 Gary Dismukes <dismukes@adacore.com> - - * exp_ch4.adb (Expand_N_Type_Conversion): Handle the case of - applying an invariant check for a conversion to a class-wide - type whose root type has a type invariant, when the conversion - appears within the immediate scope of the type and the - expression is of a specific tagged type. - * sem_ch3.adb (Is_Private_Primitive): New function to determine - whether a primitive subprogram is a private operation. - (Check_Abstract_Overriding): Enforce the restriction imposed by - AI12-0042 of requiring overriding of an inherited nonabstract - private operation when the ancestor has a class-wide type - invariant and the ancestor's private operation is visible. - (Derive_Subprogram): Set Requires_Overriding on a subprogram - inherited from a visible private operation of an ancestor to - which a Type_Invariant'Class expression applies. - -2020-07-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.adb (Find_Overlaid_Entity): Fix style in comment. - (Note_Possible_Modification): Simplify repeated calls to Ekind. - -2020-07-15 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb (Flatten): Adjust description. - (Convert_To_Positional): Remove obsolete ??? comment and use - Compile_Time_Known_Value in the final test. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * par-ch4.adb (P_Iterated_Component_Association): Extended to - recognzize the similar Iterated_Element_Association. This node - is only generated when an explicit Key_Expression is given. - Otherwise the distinction between the two iterated forms is done - during semantic analysis. - * sinfo.ads: New node N_Iterated_Element_Association, for - Ada202x container aggregates. New field Key_Expression. - * sinfo.adb: Subprograms for new node and newn field. - * sem_aggr.adb (Resolve_Iterated_Component_Association): Handle - the case where the Iteration_Scheme is an - Iterator_Specification. - * exp_aggr.adb (Wxpand_Iterated_Component): Handle a component - with an Iterated_Component_Association, generate proper loop - using given Iterator_Specification. - * exp_util.adb (Insert_Axtions): Handle new node as other - aggregate components. - * sem.adb, sprint.adb: Handle new node. - * tbuild.adb (Make_Implicit_Loop_Statement): Handle properly a - loop with an Iterator_ specification. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-stposu.adb (Allocate_Any_Controlled): Fix logic in - lock/unlock. - -2020-07-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.adb (Is_Object_Reference): Return True on - N_Target_Name. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): Add proper - handling of Aspect_Predicate_Failure, consistent with - Check_Aspect_At_Freeze_Point. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * sem_ch13.adb (Check_Aspect_Too_Late): Mention -gnat2020 switch - in error message. - -2020-07-15 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (Delayed Freezing and Elaboration): Adjust description. - * freeze.adb (Freeze_Object_Declaration): Likewise. - * sem_ch3.adb (Delayed_Aspect_Present): Likewise. Do not return - true for Alignment. - * sem_ch13.adb (Analyze_Aspect_Specifications): Do not always delay - for Alignment. Moreover, for Alignment and various Size aspects, - do not delay if the expression is an attribute whose prefix is the - Standard package. - -2020-07-15 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch6.adb (Requires_Atomic_Or_Volatile_Copy): Return false - inside an initialization procedure. - -2020-07-15 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_util.adb (Is_Renaming): Add ekind checks. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * doc/gnat_ugn/gnat_utility_programs.rst: Remove doc on obsolete - tools. - * gnat_ugn.texi: Regenerate. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * sem_res.adb (Resolve_Type_Conversion): Protect against null - entity. Add proper tag for -gnatwr warning. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * sem_ch6.adb (Analyze_Procedure_Call): Detect use of operators - in a procedure call. - * sem_util.adb: Minor edit. - -2020-07-15 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Apply scalar - range checks against the base type of an index type, not against - the index type itself. - -2020-07-15 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (Delayed Freezing and Elaboration): Minor tweaks. - Document the discrepancy between the aspect and the non-aspect - cases for alignment settings in object declarations. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * exp_ch3.adb (Freeze_Type): Remove warning in expander, - replaced by a corresponding error in sem_ch13.adb. Replace - RTE_Available by RTU_Loaded to avoid adding unnecessary - dependencies. - * sem_ch13.adb (Associate_Storage_Pool): New procedure. - (Analyze_Attribute_Definition_Clause - [Attribute_Simple_Storage_Pool| Attribute_Storage_Pool]): Call - Associate_Storage_Pool to add proper legality checks on - subpools. - -2020-07-15 Yannick Moy <moy@adacore.com> - - * libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads, - libgnat/a-cbhama.adb, libgnat/a-cbhama.ads, - libgnat/a-cbhase.adb, libgnat/a-cbhase.ads, - libgnat/a-cbmutr.adb, libgnat/a-cbmutr.ads, - libgnat/a-cborma.adb, libgnat/a-cborma.ads, - libgnat/a-cborse.adb, libgnat/a-cborse.ads, - libgnat/a-cbprqu.adb, libgnat/a-cbprqu.ads, - libgnat/a-cbsyqu.adb, libgnat/a-cbsyqu.ads, - libgnat/a-cdlili.adb, libgnat/a-cdlili.ads, - libgnat/a-cidlli.adb, libgnat/a-cidlli.ads, - libgnat/a-cihama.adb, libgnat/a-cihama.ads, - libgnat/a-cihase.adb, libgnat/a-cihase.ads, - libgnat/a-cimutr.adb, libgnat/a-cimutr.ads, - libgnat/a-ciorma.adb, libgnat/a-ciorma.ads, - libgnat/a-ciormu.adb, libgnat/a-ciormu.ads, - libgnat/a-ciorse.adb, libgnat/a-ciorse.ads, - libgnat/a-cohama.adb, libgnat/a-cohama.ads, - libgnat/a-cohase.adb, libgnat/a-cohase.ads, - libgnat/a-coinve.adb, libgnat/a-coinve.ads, - libgnat/a-comutr.adb, libgnat/a-comutr.ads, - libgnat/a-convec.adb, libgnat/a-convec.ads, - libgnat/a-coorma.adb, libgnat/a-coorma.ads, - libgnat/a-coormu.adb, libgnat/a-coormu.ads, - libgnat/a-coorse.adb, libgnat/a-coorse.ads: Add SPARK_Mode => - Off. - -2020-07-15 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch3.adb (Delayed_Aspect_Present): Fix oversight in loop. - * freeze.adb (Freeze_Object_Declaration): Use Declaration_Node - instead of Parent for the sake of consistency. - -2020-07-15 Javier Miranda <miranda@adacore.com> - - * sem_attr.adb (Resolve_Attribute): Resolve overloaded - N_Selected_Component prefix of 'Access. Required to handle - overloaded prefixed view of protected subprograms. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * doc/gnat_ugn/about_this_guide.rst: Remove old section and - update for Ada 202x. - * doc/gnat_ugn/getting_started_with_gnat.rst: Add a system - requirements section. Remove obsolete section and minimal - rewording on the getting started section. - * gnat_ugn.texi: Regenerate. - -2020-07-15 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch5.adb (Expand_Assign_Array): Use short-circuit operator - (style). - * sem_res.adb (Resolve_Indexed_Component): Fix style in comment. - * sem_util.adb (Is_Effectively_Volatile_Object): Handle slices - just like indexed components; handle qualified expressions and - type conversions lie in Is_OK_Volatile_Context. - (Is_OK_Volatile_Context): Handle qualified expressions just like - type conversions. - -2020-07-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Atomic_Components): Simplify with Ekind_In. - (Complex_Representation): Fix type of E_Id, which just like when - for pragma Atomic_Components will hold an N_Identifier node, not - an entity. - * sem_util.adb (Is_Effectively_Volatile): Refactor to avoid - unnecessary computation. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * inline.adb, inline.ads - (Inline_Static_Expression_Function_Call): Renamed - Inline_Static_Function_Call. - * sem_ch13.adb (Analyze_Aspect_Static): Allow static intrinsic - imported functions under -gnatX. - * sem_util.ads, sem_util.adb (Is_Static_Expression_Function): - Renamed Is_Static_Function. - (Is_Static_Expression_Function_Call): Renamed - Is_Static_Function_Call. - * sem_ch6.adb, sem_elab.adb, sem_res.adb: Update calls to - Is_Static_Function*. - * sem_eval.adb (Fold_Dummy, Eval_Intrinsic_Call, Fold_Shift): - New. - (Eval_Call): Add support for intrinsic calls, code refactoring. - (Eval_Entity_Name): Code refactoring. - (Eval_Logical_Op): Update comment. - (Eval_Shift): Call Fold_Shift. Update comments. - * par-prag.adb (Par [Pragma_Extensions_Allowed]): Set - Ada_Version to Ada_Version_Type'Last to handle - Extensions_Allowed (On) consistently. - * opt.ads (Extensions_Allowed): Update documentation. - * sem_attr.adb: Update comment. - * doc/gnat_rm/implementation_defined_pragmas.rst: Update - documentation of Extensions_Allowed. - * gnat_rm.texi: Regenerate. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * sem_aggr.adb (Resolve_Iterated_Component_Association): Ensure - Typ is never accessed uninitialized. - -2020-07-15 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_rm/representation_clauses_and_pragmas.rst: Fix typo. - * gnat_rm.texi: Regenerate. - * libgnat/s-secsta.ads (Memory_Alignment): Likewise. - -2020-07-15 Gary Dismukes <dismukes@adacore.com> - - * exp_ch6.adb: Add a comma and fix a typo (machinary => - machinery) in comment. - * exp_aggr.adb: Reformat, fix capitalization, and add a couple - of commas in a comment. Adjust columns in several code - fragments. - * sem_aggr.adb: Reformat and add a comma in a comment. - -2020-07-15 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch9.adb (Expand_N_Timed_Entry_Call): Use the Sloc of - the delay statement in the expansion. - -2020-07-15 Ed Schonberg <schonberg@adacore.com> - - * sem_aggr.adb (Resolve_Iterated_Component_Association): New - procedure, internal to Resolve_Container_Aggregate, to complete - semantic analysis of Iterated_Component_Associations. - * exp_aggr.adb (Expand_Iterated_Component): New procedure, - internal to Expand_Container_Aggregate, to expand the construct - into an implicit loop that performs individual insertions into - the target aggregate. - -2020-07-15 Justin Squirek <squirek@adacore.com> - - * exp_ch6.adb (Make_Build_In_Place_Call_Allocator): Normalize - the associated node for internally generated objects to be like - their SOAAT counter-parts. - -2020-07-15 Arnaud Charlet <charlet@adacore.com> - - * libgnat/g-socket.adb (Wait_On_Socket): Fix potentially - uninitialized variable. - -2020-07-10 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch8.adb (Find_Direct_Name): Fix code to match the comment. - -2020-07-10 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Address>: - Issue an unconditional warning for an overlay that changes the - scalar storage order. - -2020-07-10 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch8.adb (Is_Actual_Parameter): Fix processing when parent - is a procedure call statement; extend comment. - -2020-07-10 Bob Duff <duff@adacore.com> - - * sem_res.adb (Resolve_Expression_With_Actions): Check the rules - of AI12-0368, and mark the declare expression as static or known - at compile time as appropriate. - * sem_ch4.adb: Minor reformatting. - * libgnat/a-stoufo.ads, libgnat/a-stoufo.adb: Allow up to 9 - replacement parameters. I'm planning to use this in the test - case for this ticket. - -2020-07-10 Ed Schonberg <schonberg@adacore.com> - - * exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Create a - proper signature when the access type denotes a parameterless - subprogram. - * exp_ch6.adb (Expand_Call): Handle properly a parameterless - indirect call when the corresponding access type has contracts. - -2020-07-10 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb - (Convert_To_Positional): Add Dims local variable - and pass it in calls to Is_Flat and Flatten. - (Check_Static_Components): Pass Dims in call to - Is_Static_Element. - (Nonflattenable_Next_Aggr): New predicate. - (Flatten): Add Dims parameter and Expr local variable. Call - Nonflattenable_Next_Aggr in a couple of places. In the case - when an Others choice is present, check that the element is - either static or a nested aggregate that can be flattened, - before disregarding the replication limit for elaboration - purposes. Check that a nested array is flattenable in the case - of a multidimensional array in any position. Remove redundant - check in the Others case and pass Dims in call to - Is_Static_Element. Use Expr variable. - (Is_Flat): Change type of Dims parameter from Int to Nat. - (Is_Static_Element): Add Dims parameter. Replace tests on - literals with call to Compile_Time_Known_Value. If everything - else failed and the dimension is 1, preanalyze the expression - before calling again Compile_Time_Known_Value on it. Return - true for null. - (Late_Expansion): Do not expand further if the assignment to the - target can be done directly by the back end. - -2020-07-10 Arnaud Charlet <charlet@adacore.com> - - * osint-c.adb (Set_File_Name): Preserve casing of file. - * osint.adb (File_Names_Equal): New. - (Executable_Name): Use File_Equal instead of - Canonical_Case_File_Name. - -2020-07-10 Pascal Obry <obry@adacore.com> - - * libgnat/g-socket.adb (Wait_On_Socket): Fix memory leaks and - file descriptor leaks. A memory leak was created each time the - routine was called without a selector (Selector = Null). Also, - in case of exception in the routine a memory leak and descriptor - leak was created as the created file selector was not closed. - -2020-07-10 Pascal Obry <obry@adacore.com> - - * libgnat/g-socket.adb: Minor style fixes. - -2020-07-10 Javier Miranda <miranda@adacore.com> - - * sem_util.adb - (Immediate_Context_Implies_Is_Potentially_Unevaluated): New - subprogram. - (Is_Potentially_Unevaluated): Do not stop climbing the tree on - the first candidate subexpression; required to handle nested - expressions. - -2020-07-10 Gary Dismukes <dismukes@adacore.com> - - * exp_aggr.adb, exp_spark.adb, sem_ch13.ads, sem_ch13.adb, - snames.ads-tmpl: Minor reformatting and typo fixes. - -2020-07-10 Yannick Moy <moy@adacore.com> - - * sem_util.adb (Has_Enabled_Property): Add handling of - non-variable objects. - -2020-07-10 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Check_Completion): Refactor chained - if-then-elsif-... statement to be more like a case - statement (note: we can't simply use case statement because of - Is_Intrinsic_Subprogram in the first condition). - -2020-07-10 Piotr Trojanek <trojanek@adacore.com> - - * einfo.ads (E_Protected_Object): Enumeration literal removed. - * lib-xref.ads (Xref_Entity_Letters): Remove reference to - removed literal. - * sem_ch3.adb (Check_Completion): Likewise. - * sem_util.adb (Has_Enabled_Property): Likewise. - -2020-07-10 Arnaud Charlet <charlet@adacore.com> - - * exp_aggr.adb (Max_Aggregate_Size): Use small limit for - aggregate inside subprograms. - * sprint.adb (Sprint_Node_Actual [N_Object_Declaration]): Do not - print the initialization expression if the No_Initialization - flag is set. - * sem_util.ads, sem_util.adb (Predicate_Enabled): New. - * exp_ch4.adb (Expand_N_Type_Conversion): Code cleanup and apply - predicate check consistently. - * exp_ch6.adb (Expand_Actuals.By_Ref_Predicate_Check): Ditto. - * sem_ch3.adb (Analyze_Object_Declaration): Ditto. - * exp_ch3.adb (Build_Assignment): Revert handling of predicate - check for allocators with qualified expressions, now handled in - Freeze_Expression directly. - * sem_aggr.adb: Fix typos. - * checks.adb: Code refactoring: use Predicate_Enabled. - (Apply_Predicate_Check): Code cleanup. - * freeze.adb (Freeze_Expression): Freeze the subtype mark before - a qualified expression on an allocator. - * exp_util.ads, exp_util.adb (Within_Internal_Subprogram): - Renamed Predicate_Check_In_Scope to clarify usage, refine - handling of predicates within init procs which should be enabled - when the node comes from source. - * sem_ch13.adb (Freeze_Entity_Checks): Update call to - Predicate_Check_In_Scope. - -2020-07-10 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_Array_Comparison): Reformat. - (Expand_Concatenate): Use standard size values directly and use - Standard_Long_Long_Unsigned instead of RE_Long_Long_Unsigned. - (Expand_Modular_Op): Use Standard_Long_Long_Integer in case the - modulus is larger than Integer. - (Expand_N_Op_Expon): Use standard size value directly. - (Narrow_Large_Operation): Use Uint instead of Nat for sizes and - use a local variable for the size of the type. - (Get_Size_For_Range): Return Uint instead of Nat. - (Is_OK_For_Range): Take Uint instead of Nat. - -2020-07-10 Javier Miranda <miranda@adacore.com> - - * exp_ch6.adb (Make_Build_In_Place_Iface_Call_In_Allocator): - Build the internal anonymous access type using as a reference - the designated type imposed by the context (instead of using the - return type of the called function). - -2020-07-10 Yannick Moy <moy@adacore.com> - - * sem_res.adb (Resolve_Actuals): Protect call to - Is_Valued_Procedure. - -2020-07-10 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Process_Discriminants): Revert recent change to - location of Set_Ekind; detect effectively volatile discriminants - by their type only. - -2020-07-10 Joffrey Huguet <huguet@adacore.com> - - * libgnat/a-nbnbin.ads, libgnat/a-nbnbre.ads: Add global - contract (Global => null) to all functions. - -2020-07-10 Ed Schonberg <schonberg@adacore.com> - - * aspects.ads: Add Aspect_Aggregate. - * exp_aggr.adb (Expand_Container_Aggregate): Expand positional - container aggregates into separate initialization and insertion - operations. - * sem_aggr.ads (Resolve_Container_Aggregate): New subprogram. - * sem_aggr.adb (Resolve_Container_Aggregate): Parse aspect - aggregate, establish element types and key types if present, and - resolve aggregate components. - * sem_ch13.ads (Parse_Aspect_Aggregate): Public subprogram used - in validation, resolution and expansion of container aggregates - * sem_ch13.adb - (Parse_Aspect_Aggregate): Retrieve names of primitives specified - in aspect specification. - (Validate_Aspect_Aggregate): Check legality of specified - operations given in aspect specification, before nane - resolution. - (Resolve_Aspect_Aggregate): At freeze point resolve operations - and verify that given operations have the required profile. - * sem_res.adb (Resolve): Call Resolve_Aspect_Aggregate if aspect - is present for type. - * snames.ads-tmpl: Add names used in aspect Aggregate: Empty, - Add_Named, Add_Unnamed, New_Indexed, Assign_Indexed. - -2020-07-10 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-shabig.o. - * libgnat/s-shabig.ads: New file to share definitions. - * libgnat/s-genbig.ads, libgnat/s-genbig.adb: Reorganized to - make it more generic and flexible in terms of memory allocation - and data structure returned. - (To_String): Moved to System.Generic_Bignums to allow sharing - this code. - (Big_And, Big_Or, Big_Shift_Left, Big_Shift_Right): New. - * libgnat/s-bignum.adb, libgnat/s-bignum.ads: Adapt to new - System.Generic_Bignums spec. - * libgnat/a-nbnbin.adb: Likewise. - (To_String): Moved to System.Generic_Bignums to allow sharing - this code. - * libgnat/a-nbnbre.adb (Normalize): Fix handling of Num = 0 - leading to an exception. - -2020-07-10 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (Freeze_Expr_Types): Replace call to Find_Aspect - with call to Find_Value_Of_Aspect and adjust accordingly. - -2020-07-10 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.adb (Write_Field24_Name): Handle E_Loop_Parameter. - * freeze.adb (Freeze_Expr_Types): Freeze the iterator type used as - Default_Iterator of the name of an N_Iterator_Specification node. - -2020-07-10 Eric Botcazou <ebotcazou@adacore.com> - - * checks.adb (Determine_Range): Deal with Min and Max attributes. - * exp_ch6.adb (Expand_Call_Helper): When generating code to pass - the accessibility level to the caller in the case of an actual - which is an if-expression, also remove the nodes created after - the declaration of the dummy temporary. - * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use Natural as - the type of the minimum accessibility level object. - -2020-07-10 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Process_Discriminants): Set Ekind of the - processed discriminant entity before passing to - Is_Effectively_Volatile, which was crashing on a failed - assertion. - * sem_prag.adb (Analyze_External_Property_In_Decl_Part): Prevent - call to No_Caching_Enabled with entities other than variables, - which was crashing on a failed assertion. - (Analyze_Pragma): Style cleanups. - * sem_util.adb (Is_Effectively_Volatile): Enforce comment with - an assertion; prevent call to No_Caching_Enabled with entities - other than variables. - (Is_Effectively_Volatile_Object): Only call - Is_Effectively_Volatile on objects, not on types. - (No_Caching_Enabled): Enforce comment with an assertion. - -2020-07-10 Yannick Moy <moy@adacore.com> - - * debug.adb: Update comments to free usage of -gnatdF. - -2020-07-10 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Refactored from - Expand_SPARK_N_Attribute_Reference; rewrite into N_Aggregate or - N_Delta_Aggregate depending on what is being rewritten. - (Expand_SPARK_N_Delta_Aggregate): New routine to expand - delta_aggregate. - (Expand_SPARK_N_Attribute_Reference): Call the refactored - routine. - -2020-07-10 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Fix - expansion of attribute Update. - -2020-07-10 Arnaud Charlet <charlet@adacore.com> - - * sem.adb (Walk_Library_Items): Fix handling of Ghost units. - -2020-07-08 Eric Botcazou <ebotcazou@adacore.com> - - * tracebak.c [generic implementation]: Add pragma GCC diagnostic - to disable warning about __builtin_frame_address. - -2020-07-08 Dmitriy Anisimkov <anisimko@adacore.com> - - * socket.c [_WIN32] (__gnat_minus_500ms): Parentheses around && - operations. Remove notes about TN in comment. - -2020-07-08 Eric Botcazou <ebotcazou@adacore.com> - - * adaint.h (__gnat_expect_portable_execvp): Fix prototype. - (__gnat_expect_poll): Likewise. - * expect.c [_WIN32]: Include adaint.h file. - (__gnat_waitpid): Remove useless variable. - (__gnat_expect_portable_execvp): Add ATTRIBUTE_UNUSED on parameter. - * raise-gcc.c [SEH] (__gnat_personality_v0): Add ATTRIBUTE_UNUSED. - * socket.c [_WIN32] (__gnat_getservbyport): Add ATTRIBUTE_UNUSED on - a couple of parameters. - (__gnat_gethostbyname): Likewise. - (__gnat_gethostbyaddr): Likewise. - (__gnat_getservbyname): Likewise. - (__gnat_last_socket_in_set): Use variables local to loops. - (__gnat_socket_ioctl): Cast 3rd parameter to proper type if _WIN32. - (__gnat_inet_pton): Cast 2nd parameter to proper type if _WIN32. - * sysdep.c (__gnat_localtime_tzoff): Remove superfluous test. - * terminals.c [_WIN32]: Include io.h file. - (is_gui_app): Remove useless variables and fix unsigned comparison. - (nt_spawnve): Add ATTRIBUTE_UNUSED on first parameter. Initialize a - local variable and remove others that are useless. Add missing cast - (__gnat_setup_child_communication): Remove useless variable and call - Use proper formatting string in call to sprintf. - (__gnat_setup_parent_communication): Cast to proper type. - (find_child_console): Fix prototype and remove useless variable. - (find_process_handle): Likewise. - (_gnat_interrupt_process): Move to after __gnat_interrupt_pid. - (__gnat_reset_tty): Add ATTRIBUTE_UNUSED on parameter, remove return - (__gnat_setup_winsize): Add ATTRIBUTE_UNUSED on all parameters. - -2020-07-08 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_N_Allocator): In the subtype mark case, do - not apply constraint checks if the No_Initialization flag is set. - -2020-07-08 Javier Miranda <miranda@adacore.com> - - * exp_ch9.adb - (Build_Class_Wide_Master): Insert the declaration of _Master - before its use; required to avoid assertion failure in the - backend. - -2020-07-08 Arnaud Charlet <charlet@adacore.com> - - * libgnat/i-cexten.ads (long_long, unsigned_long_long): Now - subtypes of Interfaces.C types. - * libgnat/a-calcon.ads, libgnat/a-calcon.adb - (To_Unix_Nano_Time): Use Interfaces.C.long_long instead of - Interfaces.C.Extensions.long_long. - -2020-07-08 Vasiliy Fofanov <fofanov@adacore.com> - - * debug.adb: Document new switch. - * exp_ch6.adb (Warn_BIP): New function that warns if the switch - is on. Call it from Make_Build_In_Place_* functions. Warn_BIP - is not needed in Make_Build_In_Place_Iface_*, because those call - Make_Build_In_Place_Call_In_Object_Declaration or similar. - -2020-07-08 Piotr Trojanek <trojanek@adacore.com> - - * erroutc.adb (Matches): Fix comments. - -2020-07-08 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (Has_Decl_In_List): New predicate to check that an - entity is declared in a list of nodes. - (Freeze_Expression): Use it to deal with Expression_With_Actions, - short-circuit expression, if- and case-expression and ensure that - the freeze node is put onto their Actions list if the entity is - declared locally. - -2020-07-08 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (In_Expanded_Body): Return true for the body of a - generated predicate function. - -2020-07-08 Gary Dismukes <dismukes@adacore.com> - - * sem_attr.adb: Remove hyphens in comments, plus minor code - reformatting. - * sem_ch13.adb: Fix typo (that => than). - * sem_util.adb: Add hyphen in comment ("class-wide"). - -2020-07-08 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (Freeze_Array_Type): Add comment on implementation - choice for byte-packed array types. - -2020-07-08 Piotr Trojanek <trojanek@adacore.com> - - * sem_attr.adb (Analyze_Attribute): Correct prefix of 'Result - this prefix is a generic function but the enclosing aspect or - pragma is attached to its instance. - * sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Analyze - generic subprogram formal parameters (including the implicit - result of a generic function) and only then analyse its aspects, - because with Relaxed_Initialization the aspect expression might - refer to those formal parameters. - * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Accept - aspect on generic subprograms; install formal parameters of a - generic subprogram but not formal parameters of the generic unit - itself (the previous code was inspired by aspects Post and - Depends, where both kinds of formals are allowed). - * sem_util.ads (Enter_Name): Fix name of a subprogram referenced - in comment. - -2020-07-08 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Call - Analyze_Aspect_Specifications after setting Ekind of the - analyzed entity. - * sem_ch13.adb (Analyze_Aspect_Yield): Remove minimal decoration - of generic subprograms. - -2020-07-08 Arnaud Charlet <charlet@adacore.com> - - * sem_prag.adb (Process_Inline): Check for duplicate - pragma+aspect Inline. Minor code cleanup. - (Check_Duplicate_Pragma): Add warning for duplicate - pragma [No_]Inline under -gnatwr. - * sinfo.ads, sinfo.adb (Next_Rep_Item): Allow N_Null_Statement - which can appear when a pragma is rewritten. - * sem_util.ads, sem_util.adb, bindo-writers.adb: Fix bad - copy/paste now flagged. - * libgnat/s-mmap.ads: Remove redundant pragma Inline. - -2020-07-08 Ed Schonberg <schonberg@adacore.com> - - * sem_util.adb (Build_Class_Wide_Clone_Body): Update entities to - refer to the right spec. - -2020-07-08 Bob Duff <duff@adacore.com> - - * sem_ch13.adb (Predicate_Failure): Check that the type has - predicates. Remove the setting of Has_Delayed_Aspects and - Freeze_Node, because (if the code is legal) it should have - already been done by the predicate aspect. - -2020-07-08 Gary Dismukes <dismukes@adacore.com> - - * par-ch4.adb (P_Iterated_Component_Association): Typo - corrections. - -2020-07-08 Ed Schonberg <schonberg@adacore.com> - - * par.adb (P_Iterator_Specification): Make public for use in - other parser subprograms. - * par-ch4.adb (P_Iterated_Component_Association): In Ada_2020, - recognize use of Iterator_Specification in an element iterator. - To simplify disambiguation between the two iterator forms, mark - the component association as carrying an Iterator_Specification - only when the element iterator (using "OF") is used. - * par-ch5.adb (P_Loop_Parameter_Specification): In Ada_2020, - parse iterator filter when present. - (P_Iterator_Specification): Ditto. Remove declaration of - P_Iterator_Specification, now in parent unit. - * exp_ch5.adb (Expand_N_Loop_Statement): Apply Iterator filter - when present. - (Expand_Iterator_Loop_Over_Array): Ditto. - (Expand_Iterator_Loop_Over_Container): Ditto. - * sem_aggr.adb (Resolve_Array_Aggregate): Emit error nessage if - an iterated component association includes a iterator - specificcation with an element iterator, i.e. one that uses the - OF keyword. - * sem_ch5.adb (Analyze_Iterator_Specification): Analyze Iterator - filter when present. - (Analyze_Loop_Parameter_Specification): Ditto. - * sinfo.adb: Suprogram bodies for new syntactic element - Iterator_Filter. - * sinfo.ads: Add Iterator_Filter to relevant nodes. Structure - of Component_Association and Iteroted_Component_Association - nodes is modified to take into account the possible presence of - an iterator specification in the latter. - -2020-07-08 Yannick Moy <moy@adacore.com> - - * sem_util.ads, sem_util.adb (Is_Attribute_Loop_Entry): New - function for GNATProve. - -2020-07-08 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_ch13.adb (Analyze_Record_Representation_Clause, - Check_Record_Representation_Clause): Add expected and actual - size to error message. - -2020-07-08 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.ads, sem_util.adb (Safe_To_Capture_Value): Return - True for in-parameters. - -2020-07-08 Justin Squirek <squirek@adacore.com> - - * exp_attr.adb (Expand_Attribute): Set - Stores_Attribute_Old_Prefix to generated renamings of 'Old - constants for later use in generating finalization routines. - * exp_ch7.adb (Build_Finalizer): Minor reformatting. Use "or - else" operators. - -2020-07-08 Gary Dismukes <dismukes@adacore.com> - - * exp_ch6.adb (Expand_Simple_Function_Return): Remove ugly code - that was copying the return expression, resetting Analyzed - flags, etc. for the return expression of static expression - functions. - * inline.adb (Inline_Static_Expression_Function_Call): Set the - Parent of the copied expression to that of the call. This avoids - a blowup in Insert_Actions when GNATprove_Mode is set and there - are nested SEF calls. Add ??? comment. - * sem_ch6.adb (Analyze_Expression_Function): In the case of a - static expression function, create a new copy of the expression - and replace the function's expression with the copy; the - original expression is used in the expression function's body - and will be analyzed and rewritten, and we need to save a clean - copy for later use in processing static calls to the function. - This allows removing the kludgy code that was in - Expand_Simple_Function_Return. - * sem_eval.adb (Eval_Qualified_Expression): Return immediately - if any errors have been posted on the qualified expression, to - avoid blowups when GNATprove_Mode is enabled (or with -gnatd.F), - since illegal static expressions are handled differently in that - case and attempting to fold such expressions would fail. - -2020-07-08 Eric Botcazou <ebotcazou@adacore.com> - - * repinfo.adb (Compute_Max_Length): Skip hidden discriminants. - (List_Record_Layout): Likewise. - (List_Structural_Record_Layout): Use First_Discriminant instead - of First_Stored_Discriminant and Next_Discriminant instead of - Next_Stored_Discriminant to walk the list of discriminants. - -2020-07-08 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Analyze - optional boolean expressions. - * sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): Adapt - query; update comment. - -2020-07-08 Piotr Trojanek <trojanek@adacore.com> - - * einfo.ads (Current_Value): Fix typo in comment. - * exp_ch2.adb (Expand_Current_Value): Remove unnecessary "Start - of processing ..." comment. - * exp_util.adb (Set_Entity_Current_Value): Fix unbalanced paren - in comment. - (Get_Current_Value_Condition): Fix layout in comment. - * sem_ch5.adb (Analyze_Cond_Then): Replace commented condition - with pragma Assert. - -2020-07-08 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch5.adb (Expand_N_If_Statement): Detect True/False - prefixed with Standard. - -2020-07-08 Bob Duff <duff@adacore.com> - - * sem_ch13.adb (Analyze_Aspect_Specifications): Add freeze node - for the Underlying_Full_View if it exists. The freeze node is - what triggers the generation of the predicate function. - * freeze.adb: Minor reformatting. - -2020-07-08 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Narrow_Large_Operation): Use the base type instead - of the first subtype of standard integer types as narrower type. - -2020-07-07 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (Freeze_Array_Type): Use Ctyp more consistently. - Move code setting the alignment in the non-packed case to... - * layout.adb (Layout_Type): ...here. - -2020-07-07 Bob Duff <duff@adacore.com> - - * treepr.adb (Print_Node): Add code to test Is_Extension. - -2020-07-07 Arnaud Charlet <charlet@adacore.com> - - * sem_ch4.adb (Try_Container_Indexing): Add ??? comment. Protect - against malformed tree in case of errors. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * einfo.adb, sem_ch10.adb, sem_ch12.adb, sem_ch8.adb: Use - Is_Generic_Subprogram. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch8.adb (Analyze_Use_Package): Replace low-level, - error-prone Ekind_In tests with high-level Is_Generic_Subprogram - and Is_Subprogram. - -2020-07-07 Arnaud Charlet <charlet@adacore.com> - - * sem_ch6.adb (Check_Formal_Subprogram_Conformance): New - subprogram to handle checking without systematically emitting an - error. - (Check_Conformance): Update call to - Check_Formal_Subprogram_Conformance and fix handling of Conforms - and Errmsg parameters. - -2020-07-07 Arnaud Charlet <charlet@adacore.com> - - * exp_ch4.adb (Tagged_Membership): Generate a call to - CW_Membership instead of using Build_CW_Membership. - (Expand_N_In): Remove wrong handling of null access types and - corresponding comment. - * exp_intr.adb (Expand_Dispatching_Constructor_Call): Generate a - call to CW_Membership instead of using Build_CW_Membership. - * rtsfind.ads: Add CW_Membership. - * exp_atag.ads, exp_atag.adb (Build_CW_Membership): Removed. - * einfo.ads: Fix typo. - * libgnat/a-tags.ads, libgnat/a-tags.adb (CW_Membership): Moved - back to spec. - -2020-07-07 Ed Schonberg <schonberg@adacore.com> - - * exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Create - proper subprogram specification for body, using names in the - subprogram declaration but distinct entities. - * exp_ch6.adb (Expand_Call): If this is an indirect call - involving a subprogram wrapper, insert pointer parameter in list - of actuals with a parameter association, not as a positional - parameter. - -2020-07-07 Justin Squirek <squirek@adacore.com> - - * exp_ch6.adb (Expand_Branch): Verify the original node is a - conditional expression before recursing further. - (Insert_Level_Assign): Transform assertion into an explicit - raise. - -2020-07-07 Steve Baird <baird@adacore.com> - - * sem_attr.adb (Eval_Attribute): Generalize static evaluation of - Size attribute references to also handle - Max_Size_In_Storage_Elements references. - -2020-07-07 Javier Miranda <miranda@adacore.com> - - * sem_util.adb (Is_Potentially_Unevaluated): Code cleanup. - -2020-07-07 Eric Botcazou <ebotcazou@adacore.com> - - * checks.ads (Expander Routines): Update the description of the - Do_Range_Check mechanism. - * checks.adb (Selected_Range_Checks): Fix typo. - * exp_ch9.adb: Add with and use clause for Checks. - (Actual_Index_Expression): Generate a range check if requested. - (Entry_Index_Expression): Likewise. - * sem_attr.adb (Resolve_Attribute) <Attribute_Count>: Call - Apply_Scalar_Range_Check instead of Apply_Range_Check. - * sem_ch9.adb (Analyze_Accept_Statement): Likewise. - * sem_res.adb (Resolve_Entry): Likewise, after having set the - actual index type on the prefix of the indexed component. - (Resolve_Indexed_Component): Remove useless conditional construct. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * contracts.adb (Analyze_Entry_Or_Subprogram_Contract, - Process_Preconditions_For): Freeze expression that has been - relocated to pragma Precondition, not the expression which is - still in the aspect. - -2020-07-07 Arnaud Charlet <charlet@adacore.com> - - * sem_ch6.adb (Check_Conformance): Remove unnecessary (and - wrong) code. - * sem_ch8.adb (Check_Null_Exclusion): Post error at proper - location. Introduce new helper Null_Exclusion_Mismatch and fix - implementation wrt formal subprograms used in generic bodies. - (Analyze_Subprogram_Renaming): Fix missing setting of - Error_Msg_Sloc. - (Analyze_Object_Renaming): Replace "in Anonymous_Access_Kind" by - Is_Anonymous_Access_Type. - * sem_util.adb (Has_Null_Exclusion): Fix handling of - N_Parameter_Specification. - * sem_ch12.adb (Instantiate_Object): Replace "in - Anonymous_Access_Kind" by Is_Anonymous_Access_Type. - -2020-07-07 Ed Schonberg <schonberg@adacore.com> - - * freeze.adb (Freeze_Expr_Types): Freeze the designated type of - the explicit dereference. - -2020-07-07 Javier Miranda <miranda@adacore.com> - - * sem_util.adb (Is_Potentially_Unevaluated): Protect reading - attribute Etype. - -2020-07-07 Bob Duff <duff@adacore.com> - - * libgnat/g-catiio.adb (Value, Parse_ISO_8601): Unsuppress - checks, and don't rely on 'Valid. - -2020-07-07 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl: Remove dead code. - * doc/gnat_ugn/building_executable_programs_with_gnat.rst: - Document gnatbind -xdr switch. - * gnat_ugn.texi: Regenerate. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_ugn/building_executable_programs_with_gnat.rst - (Validity Checking): Add "p" to the list of switches enabled by - -gnatVa. - * gnat_ugn.texi: Regenerate. - -2020-07-07 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Add call - to Check_Restriction_No_Specification_Of_Aspect. - * sem_prag.adb (Analyze_Pragma): Likewise. - * restrict.ads (Check_Restriction_No_Specification_Of_Aspect): - Mention possible new node kinds in documentation. - * restrict.adb (Check_Restriction_No_Specification_Of_Aspect): - Retrieve aspect id from different fields if given node is an - N_Pragma or an N_Attribute_Definition_Clause. - -2020-07-07 Gary Dismukes <dismukes@adacore.com> - - * contracts.adb (Add_Invariant_And_Predicate_Checks): Relax the - condition for doing invariant checks so that in-mode parameters - of procedures are also checked (required by AI05-0289, and - restricted to procedures by AI12-0044). This is done in a - procedure's nested postconditions procedure. - * exp_ch6.adb (Expand_Actuals): Also perform postcall invariant - checks for in parameters of procedures (but not functions). - Moved invariant-checking code to end of Expand_Actuals - (including the nested function Is_Public_Subp). - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Delta_Array_Aggregate): Make Index_Type - a constant. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * exp_aggr.adb (Expand_N_Delta_Aggregate): Use type of the delta - base expression for the anonymous object of the delta aggregate. - -2020-07-07 Javier Miranda <miranda@adacore.com> - - * sem_util.ads (Interval_Lists): Reordering routine. - * sem_util.adb (Interval_Lists): Reordering routines to keep - them alphabetically ordered. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * sem_attr.adb (Resolve_Attribute): Do not call - Check_Non_Static_Context. - -2020-07-07 Arnaud Charlet <charlet@adacore.com> - - * sem_elab.adb (Is_Guaranteed_ABE): Take into account null - procedures. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch5.adb (Analyze_Assignment): Reuse Is_Assignable. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Add scalar - range checks for 'Update on arrays just like for 'Update on - records. - * sem_attr.adb (Analyze_Array_Component_Update): Do not set - range checks for single-dimensional arrays. - (Resolve_Attribute): Do not set range checks for both single- - and multi- dimensional arrays. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * sem.ads (Sem): Fix description. - -2020-07-07 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Analyze_Relaxed_Parameter): Fix for protected - entries. - -2020-07-06 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb (Apply_Scalar_Range_Check): Use Is_RTE. - -2020-07-06 Bob Duff <duff@adacore.com> - - * libgnat/g-catiio.ads: Document newly supported format. Add - ISO_Time constant, for convenience. - * libgnat/g-catiio.adb (Image_Helper): New helper function to do - all the formatting work, called by the two exported Image - functions. Add support for "%:::z" here. Add a Time_Zone - parameter used by the "%:::z" processing. This parameter is not - used for the actual time zone computations; local time is always - used for that, for ease of implementation reasons. It would - make sense to use Append throughout this function, but that's a - cleanup for another day. - (Image): Modify these to pass the local time zone, or the - specified time zone, as appropriate. - -2020-07-06 Bob Duff <duff@adacore.com> - - * libgnat/g-catiio.ads: Change the regular expression that - documents the allowed format to match what ISO-8601 allows. - * libgnat/g-catiio.adb (Scan_Subsecond): Rewrite so it doesn't - assume the subsecond comes last. - (Parse_ISO_8601): Parse an optional subsecond, followed by an - optional time zone, rather than making these alternatives to - each other. - -2020-07-06 Bob Duff <duff@adacore.com> - - * libgnat/g-catiio.adb (Parse_ISO_8601): Minor cleanups: - Give some objects clearer names. - Make some objects more local to where they are used. - Remove some validity checks that can't fail, because some of - the variables tested have been moved so they're not visible here. - Anyway, Wrong_Syntax is about errors in the input, not data - validity. - Use Time_Zone_Seen instead of Local_Sign = ' ' to determine - that a time zone indication was seen. - We don't need to distinguish two different kinds of - syntax error (End_Of_Source_Reached and Wrong_Syntax), - so use Wrong_Syntax always. - Remove comment, "Certain scanning scenarios may handle - this exception on their own."; there are no such scenarios. - -2020-07-06 Bob Duff <duff@adacore.com> - - * libgnat/g-catiio.ads, libgnat/g-catiio.adb (Image): New - function. It might seem like the local-time Image should be - implemented in terms of the Time_Zone Image, but that would be - far harder to implement, so we do it the other way around. - -2020-07-06 Thomas Quinot <quinot@adacore.com> - - * libgnat/g-sechas.ads, libgnat/g-sechas.adb: Refactor to use - Stream_Element_Array as the internal buffer type. - * libgnat/g-shshco.adb: Adjust to use Stream_Element_Offset - instead of Integer as the index in the internal state buffer. - -2020-07-06 Gary Dismukes <dismukes@adacore.com> - - * doc/gnat_rm/implementation_defined_pragmas.rst, errout.ads, - erroutc.adb, exp_ch4.adb, exp_ch6.adb, freeze.adb: Comment - rewording/reformatting/typo fixes. Replace "ie." with "that is" - in comment; "can not" -> "cannot", and remove an extraneous - underscore in another comment. - * gnat_rm.texi, gnat_ugn.texi: Regenerate. - -2020-07-06 Javier Miranda <miranda@adacore.com> - - * sem_util.ads (Interval_Lists.Aggregate_Intervals): New - subprogram. - * sem_util.adb (Has_Null_Others_Choice, - Non_Static_Or_Null_Range, Interval_Lists.Aggregate_Intervals): - New subprograms. - (Is_Potentially_Unevaluated): Adding support to detect - potentially unevaluated components of array aggregates. - -2020-07-06 Bob Duff <duff@adacore.com> - - * libgnat/g-catiio.adb (Parse_ISO_8601): New name for - Parse_ISO_8861_UTC. 8601 is the correct ISO standard number. - Also, "UTC" was confusing. All Time values are represented in - UTC, but the ISO 8601 date strings include a time zone. - If a time zone was specified, call - Ada.Calendar.Formatting.Time_Of instead of - GNAT.Calendar.Time_Of, because the latter adjusts to the current - time zone, whereas we want to use (just) the time zone specified - in the ISO string. This allows us to pass Time_Zone instead to - Time_Of, instead of adjusting by Local_Disp by hand. - If no time zone was specified, call GNAT.Calendar.Time_Of as - before. - Use expanded names to clarify which Time_Of is being called. - Remove redundant comment, and move nonredundant part of the - commment to the spec. - (Value): Minor: use "not in" instead of "or else". - * libgnat/g-catiio.ads: Comment moved here. Correct the ISO - standard number. - * libgnat/g-calend.adb: Add ??? comments. - * libgnat/a-calend.ads, libgnat/a-calend.adb: Update obsolete - comments regarding the representation of type Time. Move the - information about the epoch (year 2150) to the spec, and avoid - uttering "2150" more than once. - * libgnat/a-catizo.ads (Time_Offset): Add comment. - -2020-07-06 Ed Schonberg <schonberg@adacore.com> - - * exp_ch5.adb (Find_Component): If the target type is a derived - record type and the required component is a discriminant that is - renamed in the derived type declaration, use the name of the - original discriminant to locate the intended target component. - -2020-07-06 Justin Squirek <squirek@adacore.com> - - * sem_ch12.adb (Analyze_Associations): Add check for errors on - the generic formal before continuing with instantiation. - -2020-07-06 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbin.ads, libgnat/a-nbnbin.adb, - libgnat/a-nbnbin__gmp.adb: Use more Valid_Big_Integer. - -2020-07-06 Piotr Trojanek <trojanek@adacore.com> - - * exp_util.ads (Get_Index_Subtype): Fix duplicate "Last". - -2020-07-06 Ed Schonberg <schonberg@adacore.com> - - * sinfo.ads: Indicate that Field 1 of an N_Delta_Aggregate is - unused. Previously it was erroneously labelled as holding an - Expressions list, in analogy with other aggregate constructs, - but there are no Expressions attached to this node syntactically - or semantically. - -2020-07-06 Piotr Trojanek <trojanek@adacore.com> - - * sem_attr.adb (Eval_Attribute): Check if constant has an - initialization expression. - -2020-07-06 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Apply - scalar range checks. - * sem_attr.adb (Resolve_Attribute): Do not set scalar range - checks when resolving attribute Update. - -2020-07-06 Gary Dismukes <dismukes@adacore.com> - - * sem_attr.adb (Analyze_Attribute, Attribute_Constrained): Issue - a warning if the attribute prefix is a current instance - reference within an aspect of a type or subtype. - (Address_Checks): Replace test of Is_Object (Ent) with - Is_Object_Reference (P) so that testing for current instances - will be done. - (Eval_Attribute): Add test for current instance reference, to - ensure that we still fold array attributes when current - instances are involved, since value prefixes are allowed for - array attributes, and will now be excluded by - Is_Object_Reference. - * sem_util.ads (Is_Current_Instance_Reference_In_Type_Aspect): - New exported query function. - * sem_util.adb (Is_Object_Reference): Return False for the case - where N is a current instance reference within an - aspect_specification of a type or subtype (basically if the - reference occurs within a predicate, invariant, or DIC aspect - expression). - (Is_Current_Instance_Reference_In_Type_Aspect): New function - that tests whether a node is a reference to a current instance - formal of a predicate, invariant, or - Default_Initial_Condition (DIC) subprogram. - -2020-07-06 Ed Schonberg <schonberg@adacore.com> - - * sem_res.adb (Resolve_Declare_Expression): New subprogram, to - install the scope holding local declarations of the expression, - before completing its resolution. - (Resolve): For an Expression_With_Actions that comes from a - source occurrence of a Declare_Expression, call new subprogram. - -2020-07-06 Piotr Trojanek <trojanek@adacore.com> - - * sem_attr.adb (Analyze_Attribute): Reuse SPARK_Implicit_Load. - -2020-07-06 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch5.adb (Analyze_Loop_Parameter_Specification): Propagate - exception when switch -gnatdk is used and no previous errors are - present. - * sem_eval.adb (Compile_Time_Known_Value, Is_In_Range): - Likewise. - * sem_warn.adb (Operand_Has_Warnings_Suppressed): Likewise. - -2020-07-06 Richard Kenner <kenner@adacore.com> - - * exp_unst.adb (Needs_Fat_Pointer): Don't check for formal. - (Unnest_Subprogram): Use 'Unchecked_Access instead of 'Access - when populating activation record. - -2020-07-06 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch6.adb (Add_Simple_Call_By_Copy_Code): Rename parameter - from Bit_Packed_Array to Force. - (Expand_Actuals): Do not apply BIP processing if the subprogram - is intrinsic. Adjust calls to Add_Simple_Call_By_Copy_Code and - add one for In parameters whose actual is a CPP constructor call. - -2020-07-06 Eric Botcazou <ebotcazou@adacore.com> - - * sem_attr.adb (Eval_Attribute): Do not apply range checks in - the case of 'Pos applied to an integer type here. - -2020-07-06 Ed Schonberg <schonberg@adacore.com> - - * sem_ch3.adb (Analyze_Object_Declaration): If the type is an - Unchecked_Union, and the expression is an aggregate. complete - the analysis and resolution of the aggregate, and treat like a - regular object declaration, instead of as a renaming - declarattion. - -2020-07-06 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch9.adb (Is_Potentially_Large_Family): Add documentation. - (Actual_Index_Expression): Use Entry_Index_Type. - (Build_Entry_Count_Expression): Likewise. - (Build_Find_Body_Index): Likewise. - (Collect_Entry_Families): Likewise. Use directly the bounds of - the index type to find out whether the family is large. - (Entry_Index_Expression): Likewise. - -2020-07-06 Piotr Trojanek <trojanek@adacore.com> - - * sem_res.adb (Resolve_Range): Resolve both low and high bounds - with the range type. - -2020-07-06 Arnaud Charlet <charlet@adacore.com> - - * aspects.ads (Is_Representation_Aspect): - Default_Component_Value is a representation aspect. - * sem_ch13.adb (Check_Aspect_Too_Late, Rep_Item_Too_Late): Relax - RM 13.1(10) rule wrt primitive operations for Ada 202x. - -2020-07-06 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Move to library - level and use a new predicate Is_OK_Aggregate to recognize the - aggregates suitable for direct assignment by the back-end. - (Convert_Array_Aggr_In_Allocator): If neither in CodePeer mode nor - generating C code, generate a direct assignment instead of further - expanding if Aggr_Assignment_OK_For_Backend returns true. - -2020-07-06 Gary Dismukes <dismukes@adacore.com> - - * sem_aux.adb: Add a with clause for Nlists. - (Nearest_Ancestor): Test for the case of concurrent - types (testing for both Is_Concurrent_Type and - Is_Concurrent_Record_Type), and return the first ancestor in the - Interfaces list if present (otherwise will return Empty if no - interfaces). - * sem_ch13.adb (Build_Predicate_Functions): Add a ??? comment - about missing handling for adding predicates when they can be - inherited from multiple progenitors. - -2020-07-06 Arnaud Charlet <charlet@adacore.com> - - * par-ch6.adb (P_Return_Object_Declaration): Set - Has_Init_Expression flag. - -2020-07-02 Eric Botcazou <ebotcazou@adacore.com> - - * debug.adb (d.K): Document new usage. - * fe.h (Debug_Flag_Dot_KK): Declare. - * gcc-interface/decl.c (gnat_to_gnu_field): Give an error when the - component overlaps with the parent subtype, except with -gnatd.K. - -2020-06-26 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_Set_Membership): Expand the membership test - using left associativity instead of right associativity. - -2020-06-23 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/utils2.c (build_binary_op): Remove space. - -2020-06-23 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (gnat_to_gnu) <N_Allocator>: Minor tweaks. - Call Has_Constrained_Partial_View on base type of designated type. - -2020-06-23 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/utils.c (gnat_write_global_declarations): Output - integral global variables first and the imported functions later. - -2020-06-23 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (elaborate_expression_1): When GNAT encodings - are not used, do not create a variable for debug info purposes if - the expression is itself a user-declared variable. - -2020-06-23 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/ada-tree.h (DECL_RENAMED_OBJECT): Delete. - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Always use - the stabilized reference directly for renaming and create a variable - pointing to it separately if requested. - * gcc-interface/misc.c (gnat_print_decl): Adjust for deletion. - * gcc-interface/trans.c (Identifier_to_gnu): Likewise. - (gnat_to_gnu) <N_Object_Renaming_Declaration>: - Do not deal with side-effects here. - <N_Exception_Renaming_Declaration>: Likewise. - -2020-06-23 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (elaborate_expression): Replace calls to - Is_OK_Static_Expression with Compile_Time_Known_Value. - -2020-06-23 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: Set - debug type to the base type and only if the subtype is artificial. - -2020-06-23 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Do - not test Is_Bit_Packed_Array in the memset path. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (lvalue_required_for_attribute_p): Do not deal - with 'Pos or 'Val. - (Attribute_to_gnu): Likewise. - * gcc-interface/utils.c (create_field_decl): Small formatting fix. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (adjust_for_implicit_deref): Delete. - (maybe_implicit_deref): Likewise. - (Attribute_to_gnu): Replace calls to maybe_implicit_deref by calls - to maybe_padded_object. - (Call_to_gnu): Likewise. - (gnat_to_gnu) <N_Indexed_Component>: Likewise. - <N_Slice>: Likewise. - <N_Selected_Component>: Likewise. - <N_Free_Statement>: Remove call to adjust_for_implicit_deref and - manually make sure that the designated type is complete. - * gcc-interface/utils2.c (build_simple_component_ref): Add comment. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_param): Tidy up. - (gnat_to_gnu_subprog_type): For a variadic C function, do not - build unnamed parameters and do not add final void node. - * gcc-interface/misc.c: Include snames.h. - * gcc-interface/trans.c (Attribute_to_gnu): Tidy up. - (Call_to_gnu): Implement support for unnamed parameters in a - variadic C function. - * gcc-interface/utils.c: Include snames.h. - (copy_type): Tidy up. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch5.adb (Expand_N_Assignment_Statement): Do not apply - range checks to allocators here. - -2020-06-19 Justin Squirek <squirek@adacore.com> - - * lib.adb (Check_Same_Extended_Unit): Add check to determine if - the body for the subunits exist in the same file as their - specifications. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb (In_Place_Assign_OK): In an allocator context, - check the bounds of an array aggregate against those of the - designated type, except if the latter is unconstrained. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch3.adb (Is_Visible_Component): Reason only on the private - status of the original type in an instance body. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * sem_res.adb (Resolve_Qualified_Expression): Do not override the - type of the node when it is unconstrained if it is for an allocator. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * sem_res.adb (Resolve_Allocator): Call Resolve_Qualified_Expression - on the qualified expression, if any, instead of doing an incomplete - type resolution manually. - (Resolve_Qualified_Expression): Apply predicate check to operand. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch4.adb (Analyze_Selected_Component): In an instance body, - also invoke Find_Component_In_Instance on the parent subtype of - a derived tagged type immediately visible. Remove obsolete case. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Get_Integer_Type): Return the largest supported - unsigned integer type if need be. - -2020-06-19 Justin Squirek <squirek@adacore.com> - - * sem_warn.adb (Warn_On_Known_Condition): Add general sanity - check that asserts the original source node being checked - contains an entity. If not, it could be the result of special - case expansion for type conversions. - -2020-06-19 Ed Schonberg <schonberg@adacore.com> - - * sem_ch6.adb (Analyze_Expression_Function): Do not indicate - that the function has a completion if it appears within a Ghost - generic package. - -2020-06-19 Bob Duff <duff@adacore.com> - - * libgnat/a-ststbo.adb (Write): Replace pragma Assert with "if - ... raise Constraint_Error". - -2020-06-19 Justin Squirek <squirek@adacore.com> - - * widechar.adb, widechar.ads (Skip_Wide): Catch validity check - failure when skipping over characters, and update comment to - reflect Skip_Wide's usage in error printing. - -2020-06-19 Javier Miranda <miranda@adacore.com> - - * exp_ch3.ads (Ensure_Activation_Chain_And_Master): New - subprogram. - * exp_ch3.adb (Ensure_Activation_Chain_And_Master): New - subprogram that factorizes code. - (Expand_N_Object_Declaration): Call new subprogram. - * sem_ch6.adb (Analyze_Function_Return): Returning a - build-in-place unconstrained array type defer the full analysis - of the returned object to avoid generating the corresponding - constrained subtype; otherwise the bounds would be created in - the stack and a dangling reference would be returned pointing to - the bounds. - -2020-06-19 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads, - libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb, - libgnat/a-nbnbre.ads: Update spec according to AI12-0366. - -2020-06-19 Piotr Trojanek <trojanek@adacore.com> - - * checks.ads: Remove excessive whitespace in declarations of - functions for check suppression. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch7.adb (Hide_Public_Entities): Split handling of objects - and subprograms, and do not reject the latter upfront in nested - instance specs if there are no referencer subprograms at all. - (Analyze_Package_Body_Helper): Also call Hide_Public_Entities on - nested generic instances. - -2020-06-19 Piotr Trojanek <trojanek@adacore.com> - - * sem_attr.adb (Analyze_Attribute): Reject illegal positional - component associations; fix syntax in comment about named - component associations. - -2020-06-19 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Delta_Record_Aggregate): Modify a nested - Get_Component_Type routine to return a component and not just - its type; use this routine to decorate the identifier within the - delta aggregate. - -2020-06-19 Arnaud Charlet <charlet@adacore.com> - - * sem_ch4.adb (Find_Equality_Types.Check_Access_Attribute): New. - (Find_Equality_Types): Move universal_access related checks at - the end of the processing and add call to - Check_Access_Attribute. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * sem_prag.adb (Process_Convention): Revert previous change. - -2020-06-19 Eric Botcazou <ebotcazou@adacore.com> - - * checks.ads (Apply_Static_Length_Check): Move up. - (Apply_Range_Check): Add parameter Insert_Node. - * checks.adb (Apply_Selected_Range_Checks): Merge into... - (Apply_Range_Check): ...this. Add parameter Insert_Node, - pass it as Warn_Node to Selected_Range_Checks and use it - as insertion point for the checks. - * sem_ch3.adb (Analyze_Subtype_Declaration): Rewrite block - dealing with the range checks for the subtype indication. - Use local variable and call Apply_Range_Check in both cases. - -2020-06-19 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Call Ensure_Valid - on the expression of an object declaration that captures the - value of 'Old prefix. - -2020-06-19 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Add comment. - * sem_attr.adb (Analyze_Attribute): Add ??? comment. - * sem_util.ads (Valid_Scalars): This routine is only used for - 'Valid_Scalars and not for 'Valid. - -2020-06-19 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Do not call - Scalar_Part_Present on the array component's type. - (Build_Array_VS_Func): Remove Comp_Typ parameter, because it can - be easily computed from the Array_Top parameter *and redundant - parameters are confusing and error-prone). - -2020-06-19 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Build_Record_VS_Func): Strip privacy and type - derivation from the root type when 'Valid_Scalars is applied to - a class-wide type. - -2020-06-19 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb (Apply_Parameter_Validity_Checks): Remove testing - of Check_Validity_Of_Parameters for every formal parameter and - function result. - -2020-06-19 Arnaud Charlet <charlet@adacore.com> - - * sem_warn.adb (Warn_On_Overlapping_Actuals): Add missing - warning tag. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Get_Size_For_Range): Only make sure to return a - size lower than that of the original type if possible. - * libgnat/s-rannum.adb (Random_Discrete): Back out optimization - added for 32-bit types. - -2020-06-18 Arnaud Charlet <charlet@adacore.com> - - * sem_ch6.ads, sem_ch6.adb (Check_Formal_Conformance): New - subprogram. - (Check_Conformance): Move code to Check_Formal_Conformance. - * sem_ch8.adb (Analyze_Subprogram_Renaming): Check for formal - conformance when needed. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Narrow_Large_Operation): New procedure to try - and narrow large arithmetic and comparison operations. - (Expand_N_In): Call it. - (Expand_N_Op_Abs): Likewise. - (Expand_N_Op_Add): Likewise. - (Expand_N_Op_Divide): Likewise. - (Expand_N_Op_Eq): Likewise. - (Expand_N_Op_Ge): Likewise. - (Expand_N_Op_Gt): Likewise. - (Expand_N_Op_Le): Likewise. - (Expand_N_Op_Lt): Likewise. - (Expand_N_Op_Minus): Likewise. - (Expand_N_Op_Mod): Likewise. - (Expand_N_Op_Multiply): Likewise. - (Expand_N_Op_Ne): Likewise. - (Expand_N_Op_Plus): Likewise. - (Expand_N_Op_Rem): Likewise. - (Expand_N_Op_Subtract): Likewise. - (Expand_N_Type_Conversion): Use Convert_To procedure. - * exp_ch9.adb (Is_Pure_Barrier) <N_Identifier>: Skip all - numeric types. - <N_Type_Conversion>: Use explicit criterion. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_Allocator_Expression): Apply constraint - and predicate checks for the qualified expression on entry, - followed by constraint and predicate checks for the allocator - itself, and return early if this results in a static error. - (Expand_N_Allocator): Do not do the same here. Instead apply - constraint and predicate checks for arrays in the subtype - indication case. - * exp_ch5.adb (Expand_N_Assignment_Statement): Do not apply - range checks to allocators here. - -2020-06-18 Javier Miranda <miranda@adacore.com> - - * exp_ch6.adb (BIP_Suffix_Kind, Is_Build_In_Place_Entity): Move - declarations... - * exp_ch6.ads: Here. - * exp_util.adb (Is_Secondary_Stack_BIP_Func_Call): Do not rely - on the name of the scope to locate the extra formal BIPalloc - since they are copied when the pointer type associated with - dispatching calls is built; rely on routines - Is_Build_In_Place_Entity and BIP_Suffix_Kind. - * exp_disp.adb (Expand_Dispatching_Call): Set the scope of the - first extra formal of the internally built pointer type. - * sem_ch3.adb (Derive_Subprogram): Do not inherit extra formals - from a limited interface parent since limitedness is not - inherited in such case (AI-419) and this affects the extra - formals. - * sprint.adb (Write_Itype): Output extra formals of subprogram - types. - -2020-06-18 Ghjuvan Lacambre <lacambre@adacore.com> - - * errout.adb (Write_Error_Summary): Display number of warnings - treated as errors. - * errutil.ads: Update comment. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Analyze_Attribute) <Asm_{In,Out}put>: Alphabetize. - <Component_Size>: Add check for universal integer attribute. - <Aft>, <Bit_Order>, <Definite>, <Max_Alignment_For_Allocation>, - <Scalar_Storage_Order>: Raise Program_Error on them. - * sem_attr.adb (Eval_Attribute) <Component_Size>: Add comment on - the packed array case. - -2020-06-18 Steve Baird <baird@adacore.com> - - * sem_util.adb (Object_Access_Level): Treat a 'Old attribute - reference like an aggregate in determining its static - accessibility level; after the evaluation of the relevant - post-condition, the implicitly declared constant associated with - an Old attribute reference ceases to exist. Similarly for - Loop_Entry attribute. - * exp_ch6.adb (Expand_Call_Helper): For an attribute reference - that is expanded into a reference to an implicitly declared - constant (e.g., a 'Old or 'Loop_Entry attribute), compute the - dynamic accessibility level of that constant by looking at the - declaration of the constant (as opposed to looking at the - attribute reference). - -2020-06-18 Steve Baird <baird@adacore.com> - - * exp_ch3.adb (Expand_N_Object_Declaration): Do not generate a - default initial condition check for the declaration of an - imported object. - -2020-06-18 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl: Add s-statxd.o. - * bindgen.adb (Gen_Adainit): Add support for XDR_Stream. - * bindusg.adb (Display): Add mention of -xdr. - * gnatbind.adb: Process -xdr switch. - * init.c (__gl_xdr_stream): New. - * opt.ads (XDR_Stream): New. - * libgnat/s-stratt__xdr.adb: Rename to... - * libgnat/s-statxd.adb: this and adjust. - * libgnat/s-statxd.ads: New. - * libgnat/s-stratt.ads, libgnat/s-stratt.adb: Choose between - default and XDR implementation at runtime. - * libgnat/s-ststop.ads: Update comments. - * doc/gnat_rm/implementation_advice.rst: Update doc on XDR - streaming. - * gnat_rm.texi: Regenerate. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * sem_attr.adb (Analyze_Attribute) <To_Address>: Use the address - size of the target instead of the host when checking the value of - a static expression. Also use standard idiom for exponentiation. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * sem_prag.adb (Process_Convention): Give a warning on C_Variadic_n - being applied to a subprogram with exactly n parameters. - -2020-06-18 Arnaud Charlet <charlet@adacore.com> - - * libgnarl/s-osinte__linux.ads, libgnat/g-io.adb, - libgnat/g-socket.adb, libgnat/g-socthi.adb, - libgnat/g-socthi.ads, libgnat/g-socthi__vxworks.adb, - libgnat/g-socthi__vxworks.ads, libgnat/g-sothco.ads, - libgnat/s-io.adb, libgnat/a-except.adb: Fix function profile - mismatch with imported C functions. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch6.adb (Expand_Call_Helper): Remove superfluous calls - to Relocate_Node and merge calls to Analyze and Resolve in a - couple of places. Do not attempt to generate a range check - for an actual parameter against the formal's type of a derived - subprogram after generating a conversion to the formal's type - of the parent subprogram. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * checks.adb (Compute_Range_For_Arithmetic_Op): New procedure to - compute a range for an arithmetical operation extracted from... - (Minimize_Eliminate_Overflows): ...here. Call it. - (Determine_Range_Cache_O): New cache for Original_Node nodes. - (Determine_Range): Call Compute_Range_For_Arithmetic_Op for all - arithmetic expressions. Use Attribute_Id in lieu of Attribute_Name - for attributes. Add handling for Range_Length alongside Length. - Add specific handling for Alignment, Bit, First_Bit, Last_Bit, - Max_Size_In_Storage_Elements, Position, Bit_Position, - Component_Size, Object_Size, Size, Value_Size, Descriptor_Size. - (Enable_Overflow_Check): Omit the check for Abs and Minus if the - operand cannot be the largest negative number. - (Selected_Length_Checks): Use Pos for Number_Dimensions. - * exp_attr.adb (Expand_N_Attribute_Reference): Move compile-time - handling of Bit_Position, Descriptor_Size, First_Bit, Last_Bit - and Position to... - * sem_attr.adb (Eval_Attribute): ...here. Move up Alignment for - objects and use Compile_Time_Known_Attribute in this case too. - -2020-06-18 Ghjuvan Lacambre <lacambre@adacore.com> - - * erroutc.ads: Declare new Is_Compile_Time_Msg boolean, - add new Compile_Time_Pragma field to Error_Msg_Object type. - (Count_Compile_Time_Pragma_Warnings): New function. - * erroutc.adb (Count_Compile_Time_Pragma_Warnings): New - function. - (Compilation_Errors): Take Compile_Time warnings into account - when tallying Errors/Warnings. - * errout.ads (Error_Msg): New procedure. - * errout.adb (Error_Msg): New procedure. - (Error_Msg_Internal): Set new Compile_Time_Pragma field in - Error_Msg_Object. - * errutil.adb (Error_Msg): Set new Compile_Time_Pragma field in - Error_Msg_Object. - * sem_prag.adb (Validate_Compile_Time_Warning_Or_Error): Pass - True to new Error_Msg procedure. - * doc/gnat_rm/implementation_defined_pragmas.rst: Update doc for - the Compile_Time_Warning pragma. - * gnat_rm.texi: Regenerate. - * opt.ads: Update comment. - -2020-06-18 Arnaud Charlet <charlet@adacore.com> - - * sem_ch4.adb (Check_Compatible_Profiles): Add explicit - initialization. - -2020-06-18 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb (Generate_Index_Checks): Handle - N_Subtype_Indication returned from Scalar_Range. - -2020-06-18 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb, sem_ch3.adb: Minor refactorings. - * sem_eval.adb (Eval_Qualified_Expression): Fix reference to RM - rule in comment; only set a local variable Hex in the branch - where it is used. - -2020-06-18 Piotr Trojanek <trojanek@adacore.com> - - * sem_eval.adb (Check_Non_Static_Context): Use Is_RTE. - -2020-06-18 Arnaud Charlet <charlet@adacore.com> - - * sem_ch4.adb (Find_Equality_Types.Check_Access_Object_Types): - New function, used to implement RM 4.5.2 (9.6/2). - (Find_Equality_Types.Check_Compatible_Profiles): New function, - used to implement RM 4.5.2(9.7/2). - (Find_Equality_Types.Reference_Anonymous_Access_Type): New - function. - (Find_Equality_Types.Try_One_Interp): Fix handling of anonymous - access types which was accepting both too much and too little. - Remove accumulated special and incomplete cases for - instantiations, replaced by Has_Compatible_Type. - (Analyze_Overloaded_Selected_Component): Use - Is_Anonymous_Access_Type instead of Ekind_In. - * sem_res.adb: Code cleanup and bug fix: use - Is_Anonymous_Access_Type instead of Ekind_In. Relax checking of - anonymous access parameter when universal_access "=" is - involved. - * sem_type.adb: Likewise. - (Find_Unique_Type): Move code from here... - (Specific_Type): ...to here. Also add missing handling of access - to class wide types. - * einfo.ads, einfo.adb (Is_Access_Object_Type): New. - -2020-06-18 Bob Duff <duff@adacore.com> - - * libgnat/a-strsto.ads, libgnat/a-ststbo.adb, - libgnat/a-ststbo.ads, libgnat/a-ststun.adb, - libgnat/a-ststun.ads: New files, containing packages - Ada.Streams.Storage, Ada.Streams.Storage.Bounded, and - Ada.Streams.Storage.Unbounded. - * impunit.adb, Makefile.rtl: Add new file names. - -2020-06-18 Javier Miranda <miranda@adacore.com> - - * sem_ch13.adb (Has_Good_Profile): Enforce strictness in the - check. Required to detect wrong profiles for Input and Output. - (Analyze_Stream_TSS_Definition): Minor enhancement in the text - of the error for class-wide attributes. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Get_Integer_Type): Pick an unsigned type based - on the Esize of the base type of the input type. - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_Array_Equality): For the optimization of - the 2-element case, build new expression lists for the indices. - -2020-06-18 Richard Kenner <kenner@adacore.com> - - * sem_util.adb (Enclosing_Subprogram): No longer need - Convention_Protected. - -2020-06-18 Claire Dross <dross@adacore.com> - - * sem_util.adb (Is_OK_Volatile_Context): Return False on - definitions of constants declared in declare expressions. - -2020-06-18 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_rm/implementation_defined_aspects.rst - (Relaxed_Initialization): New implementation-defined aspect. - * doc/gnat_rm/implementation_defined_attributes.rst - (Initialized): New implementation-defined attribute. - * gnat_rm.texi: Regenerate. - -2020-06-18 Javier Miranda <miranda@adacore.com> - - * exp_disp.adb (Expand_Dispatching_Call): Add missing decoration - of attribute Extra_Accessibility_Of_Result. - * freeze.adb (Check_Extra_Formals): No check required if - expansion is disabled; Adding check on - Extra_Accessibilty_Of_Result. - (Freeze_Subprogram): Fix decoration of - Extra_Accessibility_Of_Result. - * sem_ch3.adb (Derive_Subprogram): Fix decoration of - Extra_Accessibility_Of_Result - -2020-06-18 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Optimize_Length_Comparison): Accept 32-bit values - in the full unsigned range. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * checks.adb (Apply_Universal_Integer_Attribute_Checks): Do not do - anything when the type of the node is already Universal_Integer. - -2020-06-17 Arnaud Charlet <charlet@adacore.com> - - * sem_ch10.adb (Expand_With_Clause): Add missing handling of - N_Generic_Subprogram_Declaration, N_Subprogram_Declaration, - N_Subprogram_Body. - -2020-06-17 Ed Schonberg <schonberg@adacore.com> - - * sem_ch13.adb: (Check_Inherited_Indexing): Check that a type - derived from an indexable container type cannot specify an - indexing aspect if the same aspect is not specified for the - parent type (RM 4.1.6 (6/5), AI12-160). Add a check that a - specified indexing aspect for a derived type is confirming. - -2020-06-17 Gary Dismukes <dismukes@adacore.com> - - * exp_ch9.adb (Build_Protected_Subp_Specification): Add ??? - comment about the flag Has_Nested_Subprogram not being set here. - (Expand_N_Protected_Body): If the original body for a protected - subprogram has the flag Has_Nested_Subprogram set, then set that - flag on the new unprotected subprogram body that's created for - it, and reset the Scope fields of its top level declarations, - which have been effectively taken from the original protected - subprogram body. Add ??? comment about unclear testing of - Corresponding_Spec. - -2020-06-17 Javier Miranda <miranda@adacore.com> - - * aspects.ads (type Aspect_Id): Add Aspect_Yield as a Boolean - aspect, and update the Is_Representation_Aspect, Aspect_Names, - and Aspect_Delay arrays. - * einfo.ads, einfo.adb (Has_Yield_Aspect, Yield_Aspect): New - subprograms. - * exp_ch6.adb (Add_Return, Expand_Non_Function_Return, - Expand_Simple_Function_Return): Add calls to Yield. - * exp_ch9.adb (Build_Accept_Body, Expand_N_Accept_Statement): - Add calls to Yield. - * rtsfind.ads (RE_Yield): Adding support to generate calls to - the runtime service Ada.Dispatching.Yield - * sem_ch13.adb (Analyze_Aspect_Yield): New subprogram. - * sem_ch3.adb (Derive_Subprogram): Inherit attribute - Has_Yield_Aspect. - * sem_ch8.adb (Analyze_Subprogram_Renaming): Check consistency - of Has_Yield in the actual subprogram of a generic - instantiation. - * sem_disp.adb (Check_Dispatching_Operation): Check that if the - Yield aspect is specified for a dispatching subprogram that - inherits the aspect, the specified value shall be confirming. - * sem_prag.adb (Analyze_Pragma [Pragma_Implemented]): Check that - the implementation kind By_Protected_Procedure cannot be applied - to a procedure that has aspect Yield. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_N_Op_Expon): Replace all occurrences of - the original right operand with the relocated version. - -2020-06-17 Javier Miranda <miranda@adacore.com> - - * exp_ch6.adb (Has_BIP_Extra_Formal): New subprogram. - (Needs_BIP_Task_Actuals): Add support for the subprogram type - internally generated for dispatching calls. - * exp_disp.adb (Expand_Dispatching_Call): Adding code to - explicitly duplicate the extra formals of the target subprogram. - * freeze.adb (Check_Extra_Formals): New subprogram. - (Freeze_Subprogram): Fix decoration of Extra_Formals. - * sem_ch3.adb (Derive_Subprogram): Fix decoration of - Extra_Formals. - -2020-06-17 Bob Duff <duff@adacore.com> - - * par.adb (P_Basic_Declarative_Items): Update comment about - Declare_Expression. - * par-ch3.adb (P_Declarative_Items): Pass in Declare_Expression - flag, and if True, skip the call to Style.Check_Indentation. - * par-ch4.adb (P_Declare_Expression): Fix incorrect comment. - -2020-06-17 Arnaud Charlet <charlet@adacore.com> - - * sem_res.adb (Valid_Conversion): Change error message to make - it more user-friendly. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * checks.ads (Apply_Length_Check_On_Assignment): Declare. - * checks.adb (Apply_Length_Check_On_Assignment): New procedure - to apply a length check to an expression in an assignment. - * exp_ch5.adb (Expand_Assign_Array): Call it instead of calling - Apply_Length_Check to generate a length check. - * sem_ch5.adb (Analyze_Assignment): Likewise. - -2020-06-17 Piotr Trojanek <trojanek@adacore.com> - - * einfo.adb (Is_Relaxed_Initialization_State): Add reference to - SPARK RM. - * sem_attr.adb (Analyze_Attribute_Old_Result): Likewise. - * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Reject - aspect on completions of private types and deferred constants. - * sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): - Adjust comments; support queries for constants. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * cstand.adb (Stloc): Change to a renaming. - (Staloc): Likewise. - (Build_Unsigned_Integer_Type): Remove Nam parameter, use local - constants and do not call Make_Name. - (Make_Dummy_Index): Use local constants. - (Create_Standard): Pass the name of entities as parameter in - calls to New_Standard_Entity and remove calls to Make_Name. - Adjust calls to Build_Unsigned_Integer_Type. - (Identifier_For): Use local constant. - (Make_Component): Pass the name of the component as parameter - in call to New_Standard_Entity and remove call to Make_Name. - (Make_Formal): Likewise. Rename Formal_Name parameter into - Nam and use local constant. - (Make_Name): Delete. - (New_Operator): Use local constant. - (New_Standard_Entity): Rename S parameter into Nam and build - the name here. Remove call to Make_Name. - (Register_Float_Type): Pass the name of the type as parameter - in call to New_Standard_Entity and remove call to Make_Name. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_First>: - Remove condition added for scalar types. - -2020-06-17 Gary Dismukes <dismukes@adacore.com> - - * exp_ch3.ads (Build_Access_Subprogram_Wrapper_Body): Adjust - colon columns; reformat comment. - * exp_ch3.adb - (Build_Access_Subprogram_Wrapper_Body): Likewise. - * sem_ch3.adb (Build_Access_Subprogram_Wrapper): Reformat spec - comment and reformat comment in body. - (Analyze_Full_Type_Declaration): Reformat comment. - (Replace_Type_Name): Fixed three typos, plus reformatting of - comment. - * sem_prag.adb (Analyze_Pre_Post_Condition): Fix typos. - * sem_warn.adb (Warn_On_Overlapping_Actuals): Edit comments: - remove hyphen, add missing word. - -2020-06-17 Bob Duff <duff@adacore.com> - - * libgnat/a-cbdlli.adb, libgnat/a-cbhama.adb, - libgnat/a-cbhase.adb, libgnat/a-cbmutr.adb, - libgnat/a-cborma.adb, libgnat/a-cborse.adb, - libgnat/a-cdlili.adb, libgnat/a-chtgbk.adb, - libgnat/a-chtgke.adb, libgnat/a-cidlli.adb, - libgnat/a-cihama.adb, libgnat/a-cihase.adb, - libgnat/a-cimutr.adb, libgnat/a-ciorma.adb, - libgnat/a-ciorse.adb, libgnat/a-cobove.adb, - libgnat/a-cohama.adb, libgnat/a-cohase.adb, - libgnat/a-coinve.adb, libgnat/a-comutr.adb, - libgnat/a-convec.adb, libgnat/a-coorma.adb, - libgnat/a-coorse.adb, libgnat/a-crbtgk.adb, - libgnat/a-crbtgo.adb, libgnat/a-rbtgso.adb: Move tampering - checks earlier. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Get_Integer_Type): Use standard types without - a specific size. - * sem_res.adb (Resolve_Unchecked_Type_Conversion): Remove a - redundant intermediate conversion to Universal_Integer. - -2020-06-17 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.ads, sem_util.adb (Get_Iterable_Type_Primitive): Fix - comment and enforce it with an assertion in the body. - -2020-06-17 Ed Schonberg <schonberg@adacore.com> - - * sem_ch3.adb (Analyze_Full_Type_Declaration): For an - access_to_subprogram declaration that has aspect specifications, - call Build_Access_ Subprogram_Wrapper at once, so that pre- and - postcondition aspects are analyzed in the context of a - subprogram declaration. - (Build_Access_Subprogram_Wrapper): Examine aspect specifications - of an Access_To_Subprogram declaration. If pre- or - postconditions are declared for it, create declaration for - subprogram wrapper and add the corresponding aspect - specifications to it. Replace occurrences of the type name by - that of the generated subprogram, so that attributes 'Old and - 'Result can appear in a postcondition. - * exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Moved - here from sem_prag.adb. - * exp_ch3.ads (Build_Access_Subprogram_Wrapper_Body): Visible - subprogram. - * sem_prag.adb (Build_Access_Subprogram_Wrapper / _Body): Moved - to sem_ch3.adb and exp_ch3.adb. - -2020-06-17 Piotr Trojanek <trojanek@adacore.com> - - * atree.adb (Preserve_Comes_From_Source): Rewrite using - Set_Comes_From_Source and Comes_From_Source, which enforce that - the parameters are valid. - * exp_ch4.adb, exp_ch5.adb, sem_ch12.adb, sem_ch6.adb, - sem_res.adb: Rewrite using Preserve_Comes_From_Source. - -2020-06-17 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbin.ads, libgnat/a-nbnbre.ads: Remove obsolete - comments. - -2020-06-17 Gary Dismukes <dismukes@adacore.com> - - * aspects.ads (type Aspect_Id): Add Aspect_Static as a Boolean - aspect, and update the Is_Representation_Aspect, Aspect_Names, - and Aspect_Delay arrays. - * exp_ch6.adb (Expand_Simple_Function_Return): In the case of a - return for a static expression function, capture a copy of the - expression of the return statement before it's expanded and - reset its Analyzed flags. Then, just before leaving this - procedure, if the expression was rewritten, set the - Original_Node of the rewritten expression to the new copy and - also set the Expression of the associated static expression - function to designate that copy. This ensures that later copies - of the expression made via New_Copy_Tree will fully copy all - nodes of the expression tree. - * inline.ads (Inline_Static_Expression_Function_Call): New - procedure to evaluate and produce the result of a static call to - a static expression function. - * inline.adb: Add with and use for Sem_Res. - (Establish_Actual_Mapping_For_Inlined_Call): New procedure - extracted from code in Expand_Inlined_Call that traverses the - actuals and formals of an inlined call and in some cases creates - temporaries for holding the actuals, plus establishes an - association between formals and actuals (via the Renamed_Object - fields of the formals). - (Formal_Is_Used_Once): Function removed from Expand_Inlined_Call - and now nested in the above procedure. - (Expand_Inlined_Call): Code for doing the formal/actual - traversal is moved to Create_Actual_Temporaries and replaced - with a call to that new procedure. - (Inline_Static_Expression_Function_Call): New procedure to - evaluate a static call to a static expression function, - substituting actuals for their corresponding formals and - producing a fully folded and static result expression. The - function has subsidiary functions Replace_Formal and Reset_Sloc - that take care of doing the mapping of formals to actuals and - resetting the Slocs of subnodes of the mapped expression to that - of the call so errors will be flagged on the call rather than - function. - * sem_ch6.adb (Analyze_Expression_Function): In the case of a - static expression function, perform an additional preanalysis of - the function's expression to ensure that it's a potentially - static expression (according to the requirements of - 6.8(3.2/5-3.4/5)), and issue an error if it's not. The global - flag Checking_Potentially_Static_Expression is set and unset - around this checking. - * sem_ch13.adb (Analyze_Aspect_Static): New procedure to enforce - selected requirements of the new aspect Static on expression - functions, including checking that the language version is - Ada_2020 and that the entity to which it applies is an - expression function whose formal parameters are of a static - subtype and have mode 'in', its result subtype is a static - subtype, and it has no pre- or postcondition aspects. A ??? - comment is added to indicate the need for adding checking that - type invariants don't apply to the result type if the function - is a boundary entity. - (Analyze_One_Aspect): Call Analyze_Aspect_Static for aspect - Static. - * sem_elab.adb (Build_Call_Marker): Return without creating a - call marker when the subprogram is a static expression function, - since no ABE checking is needed for such functions. - * sem_eval.ads (Checking_Potentially_Static_Expression): New - function to return whether the checking for potentially static - expressions is enabled. - (Set_Checking_Potentially_Static_Expression): New procedure to - enable or disable checking of potentially static expressions. - * sem_eval.adb (Checking_For_Potentially_Static_Expression): New - global flag for determining whether preanalysis of potentially - static expression is being done, which affects the behavior of - certain static evaluation routines. - (Checking_Potentially_Static_Expression): New function to return - whether the checking for potentially static expressions is - enabled. - (Eval_Call): When evaluating a call within a static expression - function with checking of potentially static expression - functions enabled, substitutes a static value in place of the - call to allow folding of the expression. - (Eval_Entity_Name): When evaluating a formal parameter of a - static expression function with checking of potentially static - expression functions enabled, substitutes a static value in - place of the reference to the formal to allow folding of the - expression. - (Set_Checking_Potentially_Static_Expression): New procedure to - enable or disable checking of potentially static expressions. - * sem_res.adb (Resolve_Call): Test for a recursive call - occurring within a static expression function and issue an error - for such a call. Prevent the establishment of a transient scope - in the case this is a call to a (string-returning) static - expression function. When calling a static expression function, - if no error has been posted on the function, call - Inline_Static_Expression_Function_Call to convert the call into - its equivalent static value. - * sem_util.ads (Is_Static_Expression_Function): New function - returning whether the subprogram entity passed to it is a static - expression function. - (Is_Static_Expression_Function_Call): New function to determine - whether the call node passed to it is a static call to a static - expression function. - * sem_util.adb (Compile_Time_Constraint_Error): Suppress - compile-time Constraint_Error reporting when checking for a - potentially static expression. - (Is_Static_Expression_Function): New function returning whether - the subprogram entity passed to it is a static expression - function by testing for the presence of aspect Static. - (Has_All_Static_Actuals): New function in - Is_Static_Expression_Function_Call that traverses the actual - parameters of a function call and returns True only when all of - the actuals are given by static expressions. In the case of a - string-returning function, we call Resolve on each actual to - ensure that their Is_Static_Expression flag properly reflects - whether they're static, to allow suppressing creation of a - transient scope within Resolve_Call. A prominent ??? comment is - added to explain this rather unconventional call to Resolve. - (Is_Static_Expression_Function_Call): New function that - determines whether a node passed to it is a call to a static - expression function all of whose actual parameters are given by - static expressions. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Optimize_Length_Comparison): New local variable to - record whether this may be a dynamic superflat case. - (Is_Optimizable): Accept 0 as lower bound and set it in this case, - but return false if the operand is not a length too. - (Rewrite_For_Equal_Lengths): New procedure. - Optimize the comparison of two lengths in the superflat case when - the arrays have the same bounds. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * doc/gnat_rm/implementation_defined_attributes.rst (Bit): Sharpen - the comparison with System.Storage_Unit. - (Descriptor_Size): Clear confusion about alignment and padding. - * gnat_rm.texi: Regenerate. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_First>: - Do not replace the bound for an array type if it is public. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Optimize_Length_Comparison): Make sure the base - types are the same when comparing Y'Last and X'Last directly. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_First>: - Replace it with a direct reference to an entity which is not a - discriminant for constrained array types. Add same condition - for scalar types. - <Attribute_Last>: Merge with above implementation. - * exp_ch4.adb (Optimize_Length_Comparison): Be prepared for a - second entity whose length is compared. Rename Prepare_64 to - Convert_To_Long_Long_Integer. If the second entity is present, - compute the difference of the 'First attributes and compare the - sum of 'Last of the second entity with this difference against - 'Last of the first entity. Add a special case when the 'First - attributes are equal. Suppress overflow checks in all cases. - -2020-06-17 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_rm/implementation_defined_pragmas.rst, lib-writ.ads, - par-prag.adb, sem_ch12.adb, sem_ch8.adb, sem_prag.adb: Fix - casing of GNATprove. - * gnat_rm.texi: Regenerate. - -2020-06-17 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb (Generate_Range_Check): Simplify redundant - condition. - * sem_ch3.adb (Check_Initialization, Process_Discriminants): - Likewise. - * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Likewise. - -2020-06-17 Eric Botcazou <ebotcazou@adacore.com> - - * exp_fixd.adb (Build_Conversion): Also preserve the - Conversion_OK flag of an inner conversion. - -2020-06-17 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch5.adb (Analyze_Iterator_Specification): Enable expansion - that creates a renaming that removes side effects from the - iterated object in the GNATprove mode; then analyze reference to - this renaming (it is required for GNATprove and harmless for - GNAT). - -2020-06-16 Eric Botcazou <ebotcazou@adacore.com> - - * sinfo.ads (Conversion_OK): Document use for 'Pos and 'Val. - * exp_attr.adb (Get_Integer_Type): New function returning a - small integer type appropriate for an enumeration type. - (Expand_N_Attribute_Reference) <Attribute_Enum_Rep>: Call it. - <Attribute_Pos>: For an enumeration type with a standard - representation, expand to a conversion with Conversion_OK. - <Attribute_Val>: Likewise. - * exp_ch4.adb (Expand_N_Type_Conversion): Do not expand when - the target is an enumeration type and Conversion_OK is set. - -2020-06-16 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch4.adb (Common_Type): Go to Underlying_Full_View, if any. - -2020-06-16 Richard Kenner <kenner@adacore.com> - - * exp_unst.adb (Subp_Index): Change way we detect internal - protected subprograms. - -2020-06-16 Richard Kenner <kenner@adacore.com> - - * comperr.adb (Compiler_Abort): Clarify message displayed to - customers. - -2020-06-16 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb, doc/gnat_ugn/the_gnat_compilation_model.rst, - einfo.ads, exp_ch5.adb, exp_ch7.adb, lib-xref.ads, - libgnat/g-spitbo.ads, make.adb, sem_aux.adb, sem_ch3.adb, - sem_ch4.adb, sem_ch5.adb, urealp.adb: Fix wrong casing. - * gnat_ugn.texi: Regenerate. - -2020-06-16 Piotr Trojanek <trojanek@adacore.com> - - * einfo.adb, exp_spark.adb, exp_util.adb, sem_eval.adb: Replace - "Ekind ... in Object_Kind" with "Is_Object (...)". - -2020-06-16 Piotr Trojanek <trojanek@adacore.com> - - * sem_warn.adb (Warn_On_Overlapping_Actuals): Fix typo in - comment. - -2020-06-16 Piotr Trojanek <trojanek@adacore.com> - - * exp_util.adb (Evaluate_Name): Force evaluation of aggregates; - recursively evaluate expression of a qualified expression; fix - location of the comment for an attribute referenced and an - indexed component. - -2020-06-16 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (Freeze_Expression): Use consistent style and - formatting in a couple of cases. - -2020-06-16 Steve Baird <baird@adacore.com> - - * libgnat/a-nbnbin.ads, libgnat/a-nbnbre.ads: Uncomment the - commented-out Integer_Literal aspect specification for type - Big_Integer. - -2020-06-16 Javier Miranda <miranda@adacore.com> - - * exp_ch6.adb (BIP_Suffix_Kind, Check_BIP_Actuals, - Is_Build_In_Place_Entity): New subprograms. - (Make_Build_In_Place_Call_In_Allocator, - Make_Build_In_Place_Call_In_Anonymous_Context, - Make_Build_In_Place_Call_In_Assignment, - Make_Build_In_Place_Call_In_Object_Declaration): Add assertions. - (Needs_BIP_Task_Actuals): Add missing support for thunks. - (Expand_Actuals): Ensure that the BIP call has available an - activation chain and the _master variable. - * exp_ch9.adb (Find_Enclosing_Context): Initialize the list of - declarations of empty blocks when the _master variable must be - declared and the list was not available. - -2020-06-16 Bob Duff <duff@adacore.com> - - * par-ch4.adb (P_Case_Expression): Move to be local. - (P_Declare_Expression): New parsing routine. - (P_Unparen_Cond_Expr_Etc): New name for - P_Unparen_Cond_Case_Quant_Expression which was missing one case - in its name (iterated component association), and we're adding a - new case (declare expression), so lets use "Etc" instead of - trying to pack all those things into the name. Add call to - P_Declare_Expression, and check for missing parens. - (P_Expression_If_OK, P_Expression_Or_Range_Attribute_If_OK): Add - Tok_Declare. - * par.adb (P_Basic_Declarative_Items): Add parameter - Declare_Expression so we can tailor the error message about - incorrect bodies. - (P_Case_Expression): Move to body. - * par-ch3.adb (P_Basic_Declarative_Items): Tailor the error - message about incorrect bodies. - * par-ch7.adb (P_Package): Pass Declare_Expression => False to - P_Basic_Declarative_Items. - * sem.ads (In_Declare_Expr): Counter used to determine whether - we are analyzing a declare_expression. Needed to give errors - about things that are not allowed in declare_expression, such as - the 'Access attribute. - * sem.adb (Do_Analyze): Save/restore In_Declare_Expr. - * sem_ch4.adb (Analyze_Expression_With_Actions): Give this node - its own scope. That seems better in general, but it is - necessary for declare_expressions. For example, an identifier - declared in a declare_expression should not clash with the same - identifier in an outer scope. If this is a declare_expression, - indicated by Comes_From_Source, then check legality rules, and - incr/decr In_Declare_Expr. - * sem_aggr.adb (Resolve_Aggregate): Allow an applicable index - constraint for a declare_expression, so if its expression is an - array aggregate, it can have "others => ...". - * sem_attr.adb (Analyze_Access_Attribute): Disallow these - attributes in declare_expressions. Add comment to make it clear - that Unrestricted_Access is included. - * sinfo.ads, sinfo.adb, atree.ads, atree.adb: Remove the - now-incorrect comment in sinfo.ads that says - N_Expression_With_Actions has no proper scope. Add 17-parameter - versions of Nkind_In. Remove the 16-parameter versions of - Nkind_In. - -2020-06-16 Arnaud Charlet <charlet@adacore.com> - - * sem_aux.ads, sem_aux.adb (Is_Record_Or_Limited_Type): New - function. - * exp_ch4.adb, sem_ch4.adb (Analyze_Membership_Op, - Expand_Set_Membership.Make_Cond): Choose between primitive and - predefined equality for membership tests. - -2020-06-16 Ed Schonberg <schonberg@adacore.com> - - * sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify code and - implement AI12-0216 which clarifies the conditions under which - overlapping actuals in a call are illegal. If proper warnings - are enabled, GNAT also emits warnings in legal cases of - overlopping actuals. - -2020-06-16 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (Freeze_Expression): Stop climbing the parent chain - at a N_{Case,If}_Expression node for a type or an entity that - does not come from source. - -2020-06-16 Steve Baird <baird@adacore.com> - - * snames.ads-tmpl: Define names of the three new aspects. - * aspects.ads: Define the three new aspects. - * sem_util.ads, sem_util.adb, sem_dim.adb: Move the function - String_From_Numeric_Literal from being declared in the body of - package Sem_Dim to being declared in the visible part of package - Sem_Util. - * sem_ch13.ads, sem_ch13.adb: Declare new visible procedure - Validate_Literal_Aspect. This is where most of the legality - checking occurs for an aspect specification for one of the three - new aspects, as well as resolution of the subprogram named in - the aspect specification. Follow example of other aspects (e.g., - Validate_Literal_Aspect is called in much the same way as - Validate_Iterable_Aspect in Analyze_Aspects_At_Freeze_Point; a - small amount of legality checking is performed in - Analyze_One_Aspect in much the same way as for Default_Value or - Default_Component_Value aspects). Most of the work is done in - Validate_Literal_Aspect. - * contracts.adb (Add_Contract_Item): Call - Validate_Literal_Aspect in much the same way that - Validate_Iterable_Aspect was already being called. - * sem_res.adb (Resolve): Rewrite a literal as a call if it is a - user-defined literal. This is where the dynamic semantics of - the 3 new aspects are implemented. - * sem_ch6.adb (Fully_Conformant_Expressions): Two numeric - literals that have different text but the same value (e.g., - 12345 and 12_345) do not conform if they are user-defined - literals. Introduce a new function - User_Defined_Numeric_Literal_Mismatch to avoid duplication in - making this check. - * sem_type.adb (Has_Compatible_Type): A numeric literal can be - compatible with a non-numeric type (and a string literal can be - compatible with a non-string type) if it can be interpreted as a - user-defined literal. - -2020-06-16 Arnaud Charlet <charlet@adacore.com> - - * sem_aggr.adb (Resolve_Extension_Aggregate): Fix implementation - of AI05-0115 by checking the correct type. - -2020-06-16 Arnaud Charlet <charlet@adacore.com> - - * sem_ch6.adb (Analyze_Subprogram_Specification): Generate error - message for functions returning interfaces. - -2020-06-16 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Membership_Entry): Relax assertion to also - recognize qualified identifiers. - -2020-06-16 Piotr Trojanek <trojanek@adacore.com> - - * exp_util.adb (Evaluate_Name): Force evaluation of operators. - -2020-06-16 Arnaud Charlet <charlet@adacore.com> - - * sem_ch4.adb (Analyze_Membership_Op): Reset entity of equality - nodes for membership tests with singletons. - (Analyze_User_Defined_Binary_Op): Always perform the analysis - since nodes coming from the expander also may refer to non - standard operators as part of membership expansion. - * exp_ch4.adb (Expand_Set_Membership.Make_Cond): Reset entity of - equality node. - * sem_type.ads: Fix typo in comment. - -2020-06-16 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_attr.adb (Analyze_Attribute): Add - Check_Not_Incomplete_Type call. - -2020-06-16 Gary Dismukes <dismukes@adacore.com> - - * sem_ch6.adb: Add closing paren in a comment. - * sem_util.adb: Correct comment typo (aggreate => aggregate). - -2020-06-16 Javier Miranda <miranda@adacore.com> - - * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings): - Code cleanup. - -2020-06-16 Eric Botcazou <ebotcazou@adacore.com> - - * freeze.adb (In_Expanded_Body): Remove unreachable code. - (Freeze_Expression): Rename a couple of local variables. - In the case of an expanded body, also freeze locally the - entities declared in a nested block. - -2020-06-16 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch4.adb (Transform_Object_Operation): Document that it - may be partially destructive for the parent of the node. - (Try_Object_Operation): Undo the changes made above on failure. - -2020-06-16 Javier Miranda <miranda@adacore.com> - - * restrict.adb (Global_No_Tasking): Adding - Targparm.Restrictions_On_Target Fixes regressions with zfp. - -2020-06-16 Ed Schonberg <schonberg@adacore.com> - - * freeze.adb: (Freeze_Expression, In_Expanded_Body): Treat the - generated body of an expression function like other bodies - generated during expansion (e.g. stream subprograms) so that - those bodies are not treated as freezing points. Handle properly - other global references in such completions. - -2020-06-16 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch8.adb (Analyze_Object_Renaming): Remove trivially - useless initialization of Is_Object_Reference. - * sem_util.adb (Is_Object_Reference): Simplify detection of - binary and unary operators; literally implement rules about - aggregates and qualified expressions; recognize string literals - as object references. - -2020-06-16 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Validate_Derived_Type_Instance): Reword error - message for 12.5.1(8) subclause and add secondary message if - the incompatibility comes from the predicates. - * sem_ch3.adb (Check_Constraining_Discriminant): New procedure - to give the error required by the 3.7(15) subclause. Mention - "statically" in the error message and add secondary message - if the incompatibility comes from the predicates. - (Build_Derived_Concurrent_Type): Call it when a new discriminant - constrains an old one. - (Build_Derived_Record_Type): Likewise. - * sem_eval.ads (Predicates_Compatible): Declare. - * sem_eval.adb (Predicates_Compatible): New function to implement - the compatibility of predicates specified by the 4.9.1 clause. - (Subtypes_Statically_Compatible): Call it. - -2020-06-15 Eric Botcazou <ebotcazou@adacore.com> - - * sem_eval.ads (Predicates_Match): Fix description. - * sem_eval.adb (Predicates_Match): Rewrite. - -2020-06-15 Ed Falis <falis@adacore.com> - - * Makefile.rtl: Change name of hie/g-io__vxworks-ppc-cert.adb. - -2020-06-15 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Premature_Usage): Add support for subtype - references and replace set of if-then-else by a case statement. - -2020-06-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Analyze_Depends_In_Decl_Part, - Analyze_Global_In_Decl_Part): Bring back task discriminants for - analysis of the Global/Depends contracts; add comments. - -2020-06-15 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (Return_Applies_To): Document special usage for E_Block. - * einfo.adb (Write_Field8_Name): Write it for E_Block too. - * exp_ch4.adb (Expand_N_Type_Conversion): Remove implementation of - the check prescribed by AI05-0073. - * exp_ch6.adb (Apply_CW_Accessibility_Check): New procedure to apply - the check prescribed by AI95-344 extracted from... - (Expand_N_Extended_Return_Statement): Apply the check prescribed by - AI95-344 to the expression, if present. Suppress only access checks - when analyzing the rewritten result. - (Expand_Simple_Function_Return): ...here. Rename local variable. - Call Apply_CW_Accessibility_Check to apply the check prescribed by - AI95-344, but do not do it for the simple return statement generated - by the expansion of an extended return statement. Apply the check - prescribed by AI05-0073 to all functions returning anonymous access - type designating a specific tagged type, but not if the expression - was null or tag checks are suppressed for the type, and use Not In - operator rather than comparing the tags explicitly. - * sem.adb (Analyze): Handle all Suppress values. - * sem_ch6.adb (Analyze_Function_Return): Do not explicitly apply - predicate checks in the case of an extended return statement. - Do not apply an implicit conversion to the anonymous access result - type in the case of the simple return statement generated by the - expansion of an extended return statement. - (New_Overloaded_Entity): Small comment tweak. - * treepr.adb (Print_Node): Fix typo in flag string. - -2020-06-15 Bob Duff <duff@adacore.com> - - * exp_put_image.ads, exp_put_image.adb - (Image_Should_Call_Put_Image): New function to determine whether - the call to Put_Image should be generated. - (Build_Image_Call): New procedure to generate the call to - Put_Image. - * exp_imgv.adb (Expand_Image_Attribute): Use underlying types to - bypass privacy (only in Ada 2020). If - Image_Should_Call_Put_Image is True (which happens only in Ada - 2020), then call Build_Image_Call. - * rtsfind.ads, rtsfind.adb: Add the necessary declarations in - Ada.Strings.Text_Output.Buffers. - * sem_attr.adb (Check_Image_Type): Enable the Ada 2020 case. - * libgnat/a-stoufo.ads, libgnat/a-stoufo.adb: Use the less - restrictive type that allows newline characters. - -2020-06-15 Gary Dismukes <dismukes@adacore.com> - - * exp_ch9.ads (Build_Master_Declaration): Add commas. - * exp_ch9.adb (Build_Master_Entity): Spelling fix ("build" => - "built"). - (Build_Task_Activation_Call): Fix word order. - -2020-06-15 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbin.ads (Big_Positive, Big_Natural): Fix - predicate. - -2020-06-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Fix - dealing with scopes on subprogram bodies that act as specs. - * sem_util.adb (Has_Relaxed_Initialization): Fix trivial - mistake. - -2020-06-15 Javier Miranda <miranda@adacore.com> - - * restrict.ads (Set_Global_No_Tasking, Global_No_Tasking): New - subprograms. - * restrict.adb (Set_Global_No_Tasking, Global_No_Tasking): New - subprograms. - * sem_ch3.adb (Access_Definition): Do not skip building masters - since they may be required for BIP calls. - (Analyze_Subtype_Declaration): Propagate attribute - Is_Limited_Record in class-wide subtypes and subtypes with - cloned subtype attribute; propagate attribute - Is_Limited_Interface. - * sem_ch6.adb (Check_Anonymous_Return): Do not skip building - masters since they may be required for BIP calls. Use - Build_Master_Declaration to declare the _master variable. - (Create_Extra_Formals): Add decoration of Has_Master_Entity when - the _master formal is added. - * exp_ch3.adb (Init_Formals): Adding formal to decorate it with - attribute Has_Master_Entity when the _master formal is added. - (Build_Master): Do not skip building masters since they may be - required for BIP calls. - (Expand_N_Object_Declaration): Ensure activation chain and - master entity for objects initialized with BIP function calls. - * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings): - Adding support to detect and save restriction No_Tasking when - set in the run-time package System or in a global configuration - pragmas file. - * sem_util.adb (Current_Entity_In_Scope): Overload this - subprogram to allow searching for an entity by its Name. - * sem_util.ads (Current_Entity_In_Scope): Update comment. - * exp_ch4.adb (Expand_N_Allocator): Do not skip building masters - since they may be required for BIP calls. - * exp_ch6.ads (Might_Have_Tasks): New subprogram. - * exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Add - support for BIP calls returning objects that may have tasks. - (Make_Build_In_Place_Call_In_Allocator): Build the activation - chain if the result might have tasks. - (Make_Build_In_Place_Iface_Call_In_Allocator): Build the class - wide master for the result type. - (Might_Have_Tasks): New subprogram. - (Needs_BIP_Task_Actuals): Returns False when restriction - No_Tasking is globally set. - * exp_ch9.ads (Build_Master_Declaration): New subprogram. - * exp_ch9.adb (Build_Activation_Chain_Entity): No action - performed when restriction No_Tasking is globally set. - (Build_Class_Wide_Master): No action performed when restriction - No_Tasking is globally set; use Build_Master_Declaration to - declare the _master variable. - (Build_Master_Declaration): New subprogram. - (Build_Master_Entity): No action performed when restriction - No_Tasking is globally set; added support to handle transient - scopes and _finalizer routines. - (Build_Master_Renaming): No action performed when restriction - No_Tasking is globally set. - (Build_Task_Activation_Call): Skip generating the call when - the chain is an ignored ghost entity. - (Find_Master_Scope): Generalize the code that detects transient - scopes with master entity. - * einfo.ads (Has_Nested_Subprogram): Minor comment reformatting. - -2020-06-15 Arnaud Charlet <charlet@adacore.com> - - * sem_attr.adb (Eval_Attribute): Protect against previous - errors. - * sem_ch13.adb (Analyze_Aspect_Default_Value): Remove redundant - error checking, handling in Analyze_Aspect_Specifications. - (Analyze_Aspect_Specifications): Refine error messages on - Default_[Component_]Value. - (Check_Aspect_Too_Late): New procedure. - (Rep_Item_Too_Late.Is_Derived_Type_With_Constraint): Remove, - dead code. - * aspects.ads (Is_Representation_Aspect): Default_Value is a - representation aspect. - -2020-06-15 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-wichha.ads, libgnat/a-wichha.adb, - libgnat/a-wichun.ads, libgnat/a-wichun.adb (Is_Basic, To_Basic): - New. - * libgnat/s-utf_32.ads, libgnat/s-utf_32.adb (Is_UTF_32_Basic, - To_UTF_32_Basic, Decomposition_Search): New subprograms. - (Unicode_Decomposition): New table. - -2020-06-15 Gary Dismukes <dismukes@adacore.com> - - * exp_ch6.adb (Add_Call_By_Copy_Code): In the case of a view - conversion passed to a scalar out-mode parameter where the - formal has Default_Value set, declare the copy temp with the - base type of the formal's subtype and initialize the copy temp - with the actual's value. - -2020-06-15 Justin Squirek <squirek@adacore.com> - - * exp_ch4.adb (Expand_N_Case_Expression): Set default value for - Target to silence potential warnings. - (Expand_N_If_Expression): Add calculation to check when the if - expression is used directly in the context of an actual of an - anonymous access type and add a special path to force expansion - of the if expression in this case. - * exp_ch6.adb (Expand_Branch): Generate an assignment to the - level temporary for a given branch. - (Expand_Call_Helper): Add expansion to allow for creating a - temporary to store associated accessiblity levels on each branch - of the conditional expression. Also perform expansion of - function calls into expressions with actions, and fixup - references to N with Call_Node. - (Insert_Level_Assign): Move through nested conditional - expressions to each branch. - * sem_util.ads, sem_util.adb (Is_Anonymous_Access_Actual): Added - to detect when to force expansion of if expressions. - -2020-06-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Analyze_Depends_In_Decl_Part, - Analyze_Global_In_Decl_Part): Do not install task discriminants - for analysis of the Global/Depends contracts. - -2020-06-15 Piotr Trojanek <trojanek@adacore.com> - - * contracts.adb (Analyze_Object_Contract): Do not expect - Global/Depends on single protected units. - -2020-06-15 Justin Squirek <squirek@adacore.com> - - * sem_res.adb (Valid_Conversion): Add missing condition to - trigger proper static accessiblity failiures when the target - type is an anonymous access. - -2020-06-15 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch6.adb (Expand_Call_Helper): Replace repeated Ekind with - Ekind_In. - -2020-06-15 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch6.adb, sem_util.adb: Remove excessive parents, - especially since they don't make the code any easier to read. - -2020-06-15 Piotr Trojanek <trojanek@adacore.com> - - * aspects.ads (Aspect_Id): Add Aspect_Relaxed_Initialization. - (Implementation_Defined_Aspect): Add new aspect. - (Aspect_Argument): Add new aspect with Optional_Expression - argument. - (Is_Representation_Aspect): Add new aspect as a - non-representation one. - (Aspect_Names): Add name for the new aspect. - (Aspect_Delay): Add new aspect as a non-delayed one. - * sem_ch3.adb: Minor reformatting. - * einfo.ads, einfo.adb (Is_Relaxed_Initialization_State): New - query; reuses existing code for querying abstract state options. - * exp_attr.adb (Expand_N_Attribute_Reference): For now ignore - attribute 'Initialized. - * sem_attr.adb (Analyze_Attribute_Old_Result): Allow attribute - 'Result to be used in the aspect Relaxed_Initialization - expression. - (Analyze_Attribute): Analyze attribute 'Initialized; based on - existing code for attribute 'Valid_Scalars. - (Eval_Attribute): Do not expect attribute 'Initialized, just - like attribute 'Valid_Scalars is not expected. - * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): New - routine. - (Analyze_Aspect_Specifications): Analyze new aspect in a - dedicated routine. - (Check_Aspect_At_Freeze_Point): Do not expect new aspect. - * sem_prag.adb (Analyze_Abstract_State): Support option - Relaxed_Initialization on abstract states. - * sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): New - query for the GNATprove backend. - * snames.ads-tmpl (Snames): Add Name_Ids for the new aspect and - attribute; add an Attribute_Id for the new attribute. - -2020-06-15 Bob Duff <duff@adacore.com> - - * exp_put_image.adb, libgnat/s-putima.adb, libgnat/s-putima.ads, - rtsfind.ads: Enable Put_Image if Is_Access_Subprogram_Type (Typ). - Remove comment saying it's disabled in that case. Rename - Put_Image_Access_Prot to be Put_Image_Access_Prot_Subp to - clarify that we're talking about access-to-subprogram, not - access-to-protected-object. - -2020-06-15 Bob Duff <duff@adacore.com> - - * sem_attr.adb (Check_Image_Type): New procedure for checking - the type, depending on language version. Disable the Ada 2020 - support until the corresponding expander work is done. - (Analyze_Image_Attribute): Call Check_Image_Type. Rearrange the - code to be simplier and more logical. When P_Type is modified, - modify P_Base_Type accordingly. - * sem_util.adb (Is_Object_Image): Do not return False if the - prefix is a type. X'Image should be considered an image of an - object iff X is an object (albeit illegal pre-2020 if - nonscalar). - -2020-06-15 Bob Duff <duff@adacore.com> - - * libgnat/s-putima.ads, libgnat/s-putima.adb - (Put_Image_Access_Subp, Put_Image_Access_Prot): New procedures - for printing access-to-subprogram objects. Remove an explicit - " ", because Put_Image includes the annoying leading blank. - * rtsfind.ads: Add new procedures in s-putima. - * exp_put_image.adb: Call new procedures as appropriate. - -2020-06-15 Bob Duff <duff@adacore.com> - - * exp_imgv.adb (Expand_Image_Attribute): Allow private types. - Put_Image generates Image for numeric types, and private types - whose full type is numeric. This requires the Conversion_OK flag - for integer and floating-point types. For fixed point, we need - the extra conversion. - * exp_put_image.adb (Build_Elementary_Put_Image_Call): Remove - special handling of real types. - (Enable_Put_Image): Enable for reals. - -2020-06-15 Bob Duff <duff@adacore.com> - - * exp_attr.adb (Put_Image): Use underlying type for strings. - Remove unchecked union processing. - * exp_put_image.adb (Tagged_Put_Image_Enabled): Use -gnatd_z to - enable default Put_Image for tagged types. This allows testing - that feature. - (Build_String_Put_Image_Call): Set Conversion_OK flag. - (Make_Component_List_Attributes): Remove unchecked union - processing. - (Enable_Put_Image): Disable for unchecked unions. Enable for - nonscalar types (which were mistakenly disabled in earlier - changes). - * debug.adb: Document -gnatd_z switch. - * libgnat/s-putima.adb (Put_Image_String, Put_Image_Wide_String, - Put_Image_Wide_Wide_String): Double double-quote characters. - Forget about special handling of control characters for now -- - that's rare enough to not be a priority, and it's not clear what - the right thing to do is anyway. - * namet.adb: Minor: Improve debugger-friendliness. - * sinfo.ads: Minor: Add "???" comment. - -2020-06-15 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.ads, sem_util.adb (Is_Renaming_Declaration): Remove. - -2020-06-15 Ed Schonberg <schonberg@adacore.com> - - * freeze.adb (Freeze_Expression): When traversing the tree - looking for the proper insertion point for the freeze node of an - entity that is declared in an outer scope, set the candidate - subprogram body node properly. Previous code has an off-by-one - error. - -2020-06-15 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference) <Has_Same_Storage>: - Do not do superfluous work. Add the condition (X'Size /= 0) on - both paths and turn binary AND into short-circuit AND THEN. - -2020-06-15 Steve Baird <baird@adacore.com> - - * sem_attr.adb (Analyze_Attribute): In the Loop_Entry case, - replace a call to Statically_Denotes_Object with a call to - Statically_Names_Object and clean up the preceding comment. - -2020-06-15 Eric Botcazou <ebotcazou@adacore.com> - - * sem_res.adb (Resolve_Set_Membership): Remove local variable. - In the non-overloaded case, call Intersect_Types on the left - operand and the first alternative to get the resolution type. - But test the subtype of the left operand to give the warning. - -2020-06-12 Steve Baird <baird@adacore.com> - - * sem_res.adb (Valid_Conversion): The simpler cases of - violations of the aforementioned 8.6 rule are already handled - correctly. These include cases where the operand of the type - conversion is an access parameter or a stand-alone object of an - anonymous access type. Add code to detect violations where the - operand of the type conversion is an access discriminant whose - accessibility level is tied to one of the other simpler cases. - This is implemented in a new function, - Valid_Conversion.Is_Discrim_Of_Bad_Access_Conversion_Argument, - which is called in place of the previous test. - -2020-06-12 Bob Duff <duff@adacore.com> - - * exp_attr.adb (Put_Image): Remove assertion. This assertion is - False in mixed-Ada-version programs. - * exp_put_image.adb (Tagged_Put_Image_Enabled): New flag to make - it easy to experiment with Put_Image on tagged types. False in - this version. - (Enable_Put_Image): Enable in pre-2020. Workarounds: Disable - for tagged types if Tagged_Put_Image_Enabled is False. Disable - for access-to-subprogram types. Disable if errors have been - detected, or Sink is unavailable. - (Preload_Sink): Move all conditionals here, from Sem_Ch10, so - they can be nearby related code in Enable_Put_Image. Load Sink - only if we have seen a tagged type. This removes the dilemma - about calling Preload_Sink when compiling the compiler, which - caused unwanted dependences. - * exp_put_image.ads (Preload_Sink): New formal Compilation_Unit, - needed to move all conditionals here, from Sem_Ch10. - * libgnat/a-stouut.adb (Put_UTF_8): Make this suitable for - inlining, so we don't get warnings about inlining in some tests. - And so it can be inlined! - * opt.ads (Tagged_Seen): New flag (see Preload_Sink). - * scng.adb (Scan): Set new Tagged_Seen flag. - * sem_ch10.adb (Analyze_Compilation_Unit): Move conditionals and - comments regarding Preload_Sink into Preload_Sink. - -2020-06-12 Arnaud Charlet <charlet@adacore.com> - - * sem_res.adb (Resolve_Actuals): Check for AI12-0074. - -2020-06-12 Olivier Hainque <hainque@adacore.com> - - * libgnat/s-secsta.ads (Memory_Alignment): New constant, memory - alignment for chunks and allocated blocks. Initialize to - Standard'Maximum_Alignment * 2. - (Chunk_Memory): Use it. - * libgnat/s-secsta.adb (Round_Up): Likewise. - -2020-06-12 Piotr Trojanek <trojanek@adacore.com> - - * par-prag.adb: Fix ordering. - * snames.ads-tmpl (Name_Test_Case, Pragma_Test_Case): Likewise. - * sem_prag.adb (Sig_Flags): Likewise. - -2020-06-12 Arnaud Charlet <charlet@adacore.com> - - * sem_res.adb (Resolve_Entity_Name): Fix handling of expressions - containing array attributes wrt Ada 83 detection. - -2020-06-12 Steve Baird <baird@adacore.com> - - * sem_util.ads, sem_util.adb: Define 3 new Boolean-valued - functions - Statically_Denotes_Entity, - Statically_Denotes_Object, and Statically_Names_Object. The - first two were taken from sem_attr.adb. The term "statically - names" is defined in the Ada RM and the new function - Statically_Names_Object is intended to reflect that definition, - or more precisely, as described in a comment in the code, to - reflect the expected future definition of that term. - * sem_attr.adb: Delete functions Statically_Denotes_Object and - Statically_Denotes_Entity; these two functions have been moved - to package Sem_Util. Replace call to Statically_Denotes_Object - with a call to Statically_Names_Object as per AI12-0217 (a - binding interpretation, so no Ada_Version check). - * exp_ch9.adb (Expand_Entry_Barrier.Is_Simple_Barrier): Change - name of function (it was previously Is_Simple_Barrier_Name) - because the function should return True in the case of a static - expression; implement this requirement. Change function to - include a call to Statically_Names_Object so that, for Ada_2020 - and later, it will return True for appropriate subcomponent - names. - (Expand_Entry_Barrier.Is_Pure_Barrier): Handle - N_Indexed_Component and N_Selected_Component cases by calling - Statically_Names_Object. - (Expand_Entry_Barrier): Reorganize to treat Simple_Barriers and - Pure_Barriers more uniformly. Prevent cascaded errors. - -2020-06-12 Ed Schonberg <schonberg@adacore.com> - - * sem_ch12.adb (Find_Matching_Actual): Add guard on search loops - to detect a compilation error when using a compiler built - without assertions. - (Instantiate_Formal_Subprogram): Create a new subprogram name - for the actual only if formal has contract aspects and expansion - is enabled. - -2020-06-12 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb: Add with and use clauses for Sem_Mech. - (Get_Base_Object): New function to get the base object of a node. - (In_Place_Assign_OK): Add Target_Object parameter. Deal with a - qualified expression on entry. Remove short-circuit for array - aggregates with a single "others" choice. Do not look into the - components of the aggregate if the parent is an allocator. - (Check_Component): Add T_OK parameter and rewrite. - (Safe_Component): Invoke Check_Component with T_OK set to False. - (Convert_To_Assignments): Try to use an in-place assignment for - any target; for that, call Get_Base_Object on the target and pass - the result to In_Place_Assign_OK. - (Expand_Array_Aggregate): Use Parent_Kind and Parent_Node more - consistently. For an assignment, call Get_Base_Object on the - target and pass the result to In_Place_Assign_OK. - -2020-06-12 Dmitriy Anisimkov <anisimko@adacore.com> - - * socket.c (__gnat_minus_500ms): Use GetVersionEx to detect - Windows Server version. - * libgnat/g-sothco.ads (Minus_500ms_Windows_Timeout): Remade to - Boolean constant. - * libgnat/g-socket.adb (Set_Socket_Option): Use - Minus_500ms_Windows_Timeout constant instead of function call. - -2020-06-12 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-coinho.ads, libgnat/a-coinho.adb, - libgnat/a-coinho__shared.ads, libgnat/a-coinho__shared.adb - (Swap): New procedure. - -2020-06-12 Arnaud Charlet <charlet@adacore.com> - - * exp_ch6.adb (Expand_N_Subprogram_Declaration): Do nothing for - a subprogram declared in a protected body. - * exp_ch9.ads, exp_ch9.adb - (Build_Private_Protected_Declaration): Moved to sem_ch6.adb. - (Expand_N_Protected_Body): Do nothing for a subprogram declared - in a protected body. - * sem_ch6.adb (Build_Internal_Protected_Declaration): Moved from - exp_ch9.adb and renamed and fixed to ensure in particular that - such subprograms have convention Intrinsic and have no protected - version. - (Analyze_Subprogram_Body_Helper): Call - Build_Internal_Protected_Declaration. - (Move_Pragmas): Moved up and merged with the more general - version from Build_Private_Protected_Declaration. We only want - to copy selected pragmas, most pragmas are not suitable for a - copy on the spec. - -2020-06-12 Ed Schonberg <schonberg@adacore.com> - - * sem_ch6.adb (Check_Overriding_Indicatior): Reject an - overriding indicator on a subprogram declared within a protected - body. - -2020-06-12 Piotr Trojanek <trojanek@adacore.com> - - * contracts.adb, einfo.adb, sem_ch4.adb, sem_ch6.adb, - sem_res.adb, sem_util.adb: Replace Ekind_In with Is_Entry. - -2020-06-12 Piotr Trojanek <trojanek@adacore.com> - - * sem_res.adb (Resolve_Entry_Call): Add call to - Warn_On_Overlapping_Actuals. - -2020-06-12 Arnaud Charlet <charlet@adacore.com> - - * aspects.ads (Is_Representation_Aspect): New array. - * sem_ch13.adb (Analyze_Aspect_Specifications): Check - 13.1(9.2/5) for representation aspects. - -2020-06-12 Bob Duff <duff@adacore.com> - - * exp_put_image.ads, exp_put_image.adb (Preload_Sink): Procedure - for preloading type Sink. This has the side effect of loading - various dependents, including Ada.Strings.UTF_Encoding. - (Enable_Put_Image): Disable Put_Image in pre-2020 versions of - Ada. This limitation can probably be lifted later. Enable for - tagged types except in predefined units. Disable for CPP types; - Put_Image is legal, just prints the type name. - * sem_attr.adb (Check_Put_Image_Attribute): Don't complain about - Put_Image of CPP types; instead call the "unknown" version of - Put_Image. - * sem_ch10.adb (Analyze_Compilation_Unit): Call Preload_Sink. - -2020-06-12 Piotr Trojanek <trojanek@adacore.com> - - * sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify. - -2020-06-12 Piotr Trojanek <trojanek@adacore.com> - - * sem_warn.adb (Warn_On_Overlapping_Actuals): Remove suppression - for internal units. - -2020-06-12 Arnaud Charlet <charlet@adacore.com> - - * exp_strm.adb (Build_Elementary_Input_Call): Add support for 24 - bits elementary types. - * rtsfind.ads: Add 24 bits integer streaming routines. - * sem_ch13.adb (Analyze_Attribute_Definition_Clause - [Attribute_Stream_Size]): Add support for 24 bits elementary - types. - * libgnat/s-stratt.ads, libgnat/s-stratt.adb, - libgnat/s-stratt__xdr.adb: Add support for signed and unsigned - 24 bits integers. - -2020-06-12 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Get_Discr_Value): Cleanup. - -2020-06-12 Eric Botcazou <ebotcazou@adacore.com> - - * rtsfind.ads (RTU_Id): Add System_Address_To_Access_Conversions. - * sem_elab.adb (Elaboration_Phase_Active): Alphabetize. - (Finalize_All_Data_Structures): Likewise. - (Error_Preelaborated_Call): New procedure. - (Build_Call_Marker): Set Is_Preelaborable_Call flag in marker. - (Build_Access_Marker): Likewise. - (Build_Subprogram_Invocation): Likewise. - (Build_Task_Activation): Likewise. - (Check_Preelaborated_Call): Return when the call is preelaborable. - Call Error_Preelaborated_Call to give the error otherwise. - (Check_Elab_Call): Likewise. - * sem_util.adb (Is_Preelaborable_Function): New predicate. - (Is_Non_Preelaborable_Construct.Visit): Recurse on the - Explicit_Actual_Parameter field of N_Parameter_Association. - (Is_Non_Preelaborable_Construct.Visit_Subexpression): In Ada 2020, - for a call to a preelaborable function, visit the parameter list; - otherwise, raise Non_Preelaborable exception. - (Is_Preelaborable_Construct): Likewise, but recursively check the - parameters instead and return false upon failure, otherwise true. - * sinfo.ads (Is_Preelaborable_Call): New flag in call marker nodes. - (Is_Preelaborable_Call): New inline function. - (Set_Is_Preelaborable_Call): New inline procedure. - * sinfo.adb (Is_Preelaborable_Call): New inline function. - (Set_Is_Preelaborable_Call): New inline procedure. - -2020-06-12 Bob Duff <duff@adacore.com> - - * stringt.ads: Remove "use System;". - -2020-06-12 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch4.adb (Try_Container_Indexing): Replace call to - First_Discriminant by Get_Reference_Discriminant to get the - reference discriminant. - * sem_ch13.adb (Check_Indexing_Functions): Likewise. - * sem_ch5.adb (Preanalyze_Range): Call Get_Reference_Discriminant - to get the reference discriminant. - * sem_util.adb (Is_OK_Variable_For_Out_Formal): Treat all - Ada 2012 implicit dereferences in only one place. - (Is_Variable): Minor tweak. - -2020-06-12 Ed Schonberg <schonberg@adacore.com> - - * sem_ch12.adb (Has_Contracts): New predicate to check whether a - formal subprogram carries an aspect specification for a pre- or - postcondition. - (Build_Subprogram_Wrappers): If actual is overloaded, create a - new name to be used in call inside wrapper body. This names - carries the interpretations of the actual, and is resolved when - the body is analyzed. - (Build_Subprogram_Body_Wrapper): Use this generated name in - call. - (Build_Subprogram_Decl_Wrapper): Build profile of wrapper from - the profile of formal, and reset type entities for subsequent - analysis. - -2020-06-12 Bob Duff <duff@adacore.com> - - * debug.adb: Remove usage of -gnatd_z. - * exp_attr.adb, exp_put_image.ads, exp_put_image.adb: Clean up - the enable/disable code. If Put_Image is disabled for a type, - systematically call the "unknown" version. Improve comments. - Consolidate workarounds. Remove usage of -gnatd_z. - -2020-06-12 Eric Botcazou <ebotcazou@adacore.com> - - * sem_elab.adb: Fix typos in comments. - -2020-06-12 Justin Squirek <squirek@adacore.com> - - * sem_util.adb (Object_Access_Level): Add processing of implicit - dereferences. - -2020-06-12 Bob Duff <duff@adacore.com> - - * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads, - libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb, - libgnat/a-nbnbre.ads: Update Put_Image, and uncomment the aspect - specification. Add pragmas Ada_2020. - * libgnat/a-stouut.ads, libgnat/a-stteou.ads: Add Preelaborate, - because the Big_Numbers packages have Preelaborate, and now - depend on these Text_Output packages. - -2020-06-12 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (No_Return): Document it for all subprograms. - * einfo.adb (Set_No_Return): Adjust assertion accordingly. - * sem_ch3.adb (Check_Abstract_Overriding): Implement the - check prescribed by RM 6.5.1(6/2) here instead of... - (Derive_Subprogram): Adjust comment accordingly. - * sem_disp.adb (Override_Dispatching_Operation): ...here. - Remove superfluous return statement. - * sem_ch6.adb (Check_No_Return_Expression): New procedure. - (Analyze_Function_Return): Call it to implement the check - prescribed by AI12-0269 for simple return statements of - No_Return functions, and also checks extended statements. - (Analyze_Return_Statement): Only give an error on a return - statement in No_Return procedures. Use idiomatic form. - * sem_ch8.adb (Analyze_Subprogram_Renaming): Adjust error - message for No_Return renaming subprogram. - * sem_prag.adb (Analyze_Pragma) <Pragma_No_Return>: Accept - it on functions and generic functions in Ada 2020. - -2020-06-11 Eric Botcazou <ebotcazou@adacore.com> - - * sem_res.adb (Resolve_Implicit_Dereference): In an instance, - reset the type of the prefix if it is private before building - the dereference. - -2020-06-11 Eric Botcazou <ebotcazou@adacore.com> - - * exp_util.adb (Safe_Unchecked_Type_Conversion): Add missing - Is_Type guard before calling Has_Discriminants on Etype. - -2020-06-11 Bob Duff <duff@adacore.com> - - * libgnat/a-nbnbin__gmp.adb: There's no Optional_Big_Integer - anymore. Invalid_Big_Integer is not used. - Greatest_Common_Divisor returns Big_Positive. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Get_Value): Refine type of the Compon parameter. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Record_Aggregate): Refine type of - Others_Box. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb, exp_ch7.adb, exp_ch9.adb, exp_smem.adb, lib.adb, - nlists.adb, sem.adb, sem_aggr.adb, sem_ch3.adb, sem_ch6.adb, - sem_ch8.adb, sem_dim.adb, sem_res.adb, sem_util.adb, - sem_warn.adb: Replace uses of Next function with procedure. - -2020-06-11 Eric Botcazou <ebotcazou@adacore.com> - - * exp_pakd.ads: Add paragraph about scalar storage order. - * exp_pakd.adb (Install_PAT): Do not set the scalar storage - order of the PAT here but... - (Set_PB_Type): ...here instead and... - (Create_Packed_Array_Impl_Type): ...here as well. - * rtsfind.ads (RE_Id): Add RE_Rev_Packed_Bytes{1,2,4}. - (RE_Unit_Table): Likewise. - * libgnat/s-unstyp.ads (Rev_Packed_Bytes1): New derived type. - (Rev_Packed_Bytes2): Likewise. - (Rev_Packed_Bytes4): Likewise. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch4.adb, sem_ch6.adb, sem_res.adb, sem_util.ads: Fix - references to SPARK RM 7.1.3 rule numbers. - -2020-06-11 Ed Schonberg <schonberg@adacore.com> - - * sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify code, - remove inner predicate Is_Covered_Formal, preserve warning for - two overlapping composite types when only one is writable, and - for two overlapping and writable elementary types. - -2020-06-11 Steve Baird <baird@adacore.com> - - * contracts.adb (Add_Contract_Item): Support specifying - volatility refinement aspects for types. - (Analyze_Contracts): Add call to Analyze_Type_Contract in the - case of a contract for a type. - (Freeze_Contracts): Add call to Analyze_Type_Contract in the - case of a contract for a type. - (Check_Type_Or_Object_External_Properties): A new procedure - which performs the work that needs to be done for both object - declarations and types. - (Analyze_Object_Contract): Add a call to - Check_Type_Or_Object_External_Properties and remove the code in - this procedure which did much of the work that is now performed - by that call. - (Analyze_Type_Contract): Implement this new routine as nothing - more than a call to Check_Type_Or_Object_External_Properties. - * contracts.ads: Update comment for Add_Contract_To_Item because - types can have contracts. Follow (questionable) precedent and - declare new routine Analyze_Type_Contract as visible (following - example of Analyze_Object_Contract), despite the fact that it is - never called from outside of the package where it is declared. - * einfo.adb (Contract, Set_Contract): Id argument can be a type; - support this case. - (Write_Field34_Name): Field name is "contract" for a type. - * einfo.ads: Update comment describing Contract attribute. - * sem_ch3.adb (Build_Derived_Numeric_Type): Is_Volatile should - return same answer for all subtypes of a given type. Thus, when - building the base type for something like type Volatile_1_To_10 - is range 1 .. 10 with Volatile; that basetype should be marked - as being volatile. - (Access_Type_Declaration): Add SPARK-specific legality check - that the designated type of an access type shall be compatible - with respect to volatility with the access type. - * sem_ch12.adb (Check_Shared_Variable_Control_Aspects): Add - SPARK-specific legality check that an actual type parameter in - an instantiation shall be compatible with respect to volatility - with the corresponding formal type. - * sem_ch13.adb (Analyze_Aspect_Specifications): Perform checks - for aspect specs for the 4 volatility refinement aspects that - were already being performed for all language-defined aspects. - * sem_prag.adb (Analyze_External_Property_In_Decl_Part, - Analyze_Pragma): External properties (other than No_Caching) may - be specified for a type, including a generic formal type. - * sem_util.ads: Declare new subprograms - Async_Readers_Enabled, - Async_Writers_Enabled, Effective_Reads, Effective_Writes, and - Check_Volatility_Compatibility. - * sem_util.adb (Async_Readers_Enabled, Async_Writers_Enabled, - Effective_Reads, Effective_Writes): Initial implementation of - new functions for querying aspect values. - (Check_Volatility_Compatibility): New procedure intended for use - in checking all SPARK legality rules of the form "<> shall be - compatible with respect to volatility with <>". - (Has_Enabled_Property): Update comment because Item_Id can be a - type. Change name of nested Variable_Has_Enabled_Property - function to Type_Or_Variable_Has_Enabled_Property; add a - parameter to that function because recursion may be needed, - e.g., in the case of a derived typ). Cope with the case where - the argument to Has_Enabled_Property is a type. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Add_Association): Add assertion about the formal - parameters. - (Propagate_Discriminants): Always add an explicit component - association, so that an "others => <>" association is never - needed. - -2020-06-11 Bob Duff <duff@adacore.com> - - * exp_put_image.adb (Build_Elementary_Put_Image_Call): If the - underlying type is real, call Put_Image_Unknown. - (Build_Unknown_Put_Image_Call): Pass the type name to - Put_Image_Unknown. - * libgnat/s-putima.ads, libgnat/s-putima.adb - (Put_Image_Unknown): Add Type_Name parameter. Remove - overly-detailed documentation of what it does; better to leave - it open. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch3.adb (Build_Constrained_Array_Type, - Build_Constrained_Discriminated_Type): Skip unnecessary loop - iterations. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Build_Constrained_Itype): Move to Sem_Util. - * sem_ch3.adb (Build_Subtype, Inherit_Predicate_Flags): Move... - * sem_util.adb (Build_Subtype): Here. Add parameters for - references to objects previously declared in enclosing scopes. - (Inherit_Predicate_Flags): And here, because it is called by - Build_Subtype. - * sem_util.ads (Build_Overriding_Spec): Reorder alphabetically. - (Build_Subtype): Moved from Sem_Ch3; comments updated. - (Build_Constrained_Itype): Moved from Sem_Aggr; comments - updated. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Case_Table_Type): Change index type from Nat to - Pos. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Build_Constrained_Itype): Previously a declare - block, now a separate procedure; the only change is that now - New_Assoc_List might include components and an others clause, - which we ignore (while we deal with discriminants exactly as we - did before); extend a ??? comment about how this routine is - different from the Build_Subtype - (Resolve_Record_Aggregate): Create a constrained itype not just - for the outermost record aggregate, but for its inner record - aggregates as well. - -2020-06-11 Eric Botcazou <ebotcazou@adacore.com> - - * checks.adb (Build_Discriminant_Checks): Build an explicit - dereference when the type is an access type. - * exp_atag.adb (Build_CW_Membership): Add explicit dereferences. - (Build_Get_Access_Level): Likewise. - (Build_Get_Alignment): Likewise. - (Build_Inherit_Prims): Likewise. - (Build_Get_Transportable): Likewise. - (Build_Set_Size_Function): Likewise. - * exp_ch3.adb (Build_Offset_To_Top_Function): Likewise. - * exp_ch4.adb (Expand_Allocator_Expression): Likewise. - (Expand_N_Indexed_Component ): Remove code dealing with implicit - dereferences. - (Expand_N_Selected_Component): Likewise. - (Expand_N_Slice): Likewise. - * exp_ch9.adb (Add_Formal_Renamings): Add explicit dereference. - (Expand_Accept_Declarations): Likewise. - (Build_Simple_Entry_Call): Remove code dealing with implicit - dereferences. - (Expand_N_Requeue_Statement): Likewise. - * exp_disp.adb (Expand_Dispatching_Call): Build an explicit - dereference when the controlling type is an access type. - * exp_spark.adb (Expand_SPARK_N_Selected_Component): Delete. - (Expand_SPARK_N_Slice_Or_Indexed_Component): Likewise. - (Expand_SPARK): Do not call them. - * sem_ch4.adb (Process_Implicit_Dereference_Prefix): Delete. - (Process_Indexed_Component): Call Implicitly_Designated_Type - to get the designated type for an implicit dereference. - (Analyze_Overloaded_Selected_Component): Do not insert an - explicit dereference here. - (Analyze_Selected_Component): Likewise. - (Analyze_Slice): Call Implicitly_Designated_Type to get the - designated type for an implicit dereference. - * sem_ch8.adb (Has_Components): New predicate extracted from... - (Is_Appropriate_For_Record): ...this. Delete. - (Is_Appropriate_For_Entry_Prefix): Likewise. - (Analyze_Renamed_Entry): Deal with implicit dereferences. - (Find_Selected_Component): Do not insert an explicit dereference - here. Call Implicitly_Designated_Type to get the designated type - for an implicit dereference. Call Has_Components, Is_Task_Type - and Is_Protected_Type directly. Adjust test for error. - * sem_res.adb (Resolve_Implicit_Dereference): New procedure. - (Resolve_Call): Call Resolve_Indexed_Component last. - (Resolve_Entry): Call Resolve_Implicit_Dereference on the prefix. - (Resolve_Indexed_Component): Call Implicitly_Designated_Type to - get the designated type for an implicit dereference and - Resolve_Implicit_Dereference on the prefix at the end. - (Resolve_Selected_Component): Likewise. - (Resolve_Slice): Likewise. Do not apply access checks here. - * sem_util.ads (Implicitly_Designated_Type): Declare. - * sem_util.adb (Copy_And_Maybe_Dereference): Simplify. - (Implicitly_Designated_Type): New function. - (Object_Access_Level): Fix typo. - * sem_warn.adb (Check_Unset_Reference): Test Comes_From_Source - on the original node. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * exp_disp.adb: Minor reformatting. - * exp_aggr.adb (Is_Static_Dispatch_Table_Aggregate): Recognize - aggregates of the Ada.Tags.Object_Specific_Data type as static. - * sem_aggr.adb (Check_Static_Discriminated_Subtype): Deconstruct - and do not call it from Build_Constrained_Itype. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * exp_disp.adb (Make_Secondary_DT): Internally generated OSD - tables are now constant. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * exp_aggr.adb (Backend_Processing_Possible): Remove useless - call. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * opt.ads (Building_Static_Dispatch_Tables): Fix punctuation in - comment. - -2020-06-11 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-stposu.ads (Root_Storage_Pool_With_Subpools, - Root_Subpool): Mark with Preelaborable_Initialization. - -2020-06-11 Javier Miranda <miranda@adacore.com> - - * exp_ch9.adb (Expand_N_Conditional_Entry_Call): Replace call to - New_Copy_List by calls to the new routine - New_Copy_Separate_List. - * sem_util.ads (New_Copy_Separate_List, New_Copy_Separate_Tree): - New routines. - * sem_util.adb (New_Copy_Separate_List, New_Copy_Separate_Tree): - New routines. - (New_Copy_Tree): Extend the machinery that detects syntactic - nodes to handle lists of indentifiers with field More_Ids; - otherwise such nodes are erroneously handled as semantic nodes. - Copy aspect specifications attached to nodes. - * sem_ch12.adb (Copy_Generic_Node): Protect reading attribute - Etype. - -2020-06-11 Bob Duff <duff@adacore.com> - - * sem_ch13.adb (Analyze_Aspect_Specifications): Do not set the - Has_Predicates flag when the Predicate_Failure aspect is seen. - It is legal (but pointless) to use this aspect without a - predicate. If we set the flag, we generate a half-baked - Predicate procedure, and if that procedure is nested, it causes - unnesting to crash. - -2020-06-11 Bob Duff <duff@adacore.com> - - * exp_put_image.adb (Build_Record_Put_Image_Procedure): Remove - special processing of protected types, because those are handled - by Build_Protected_Put_Image_Call. - (Enable_Put_Image): Use the switch -gnatd_z to control enabling - of Put_Image. Disable Put_Image for types in Remote_Types - packages. - * debug.adb: Document -gnatd_z switch. - * exp_imgv.adb, libgnat/a-stteou.ads, opt.ads: Minor cleanups. - -2020-06-11 Piotr Trojanek <trojanek@adacore.com> - - * sem_warn.adb (Warn_On_Overlapping_Actuals): Add label to the - outer loop and use it in the exit statement. - -2020-06-11 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_ch3.adb (Build_Assignment): Generate predicate check if - subtype mark has predicate. - -2020-06-11 Justin Squirek <squirek@adacore.com> - - * sem_util.adb (Expand_N_Attribute_Reference): Use original - nodes where required to avoid looking at the expanded tree. - -2020-06-11 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-catizo.ads, libgnat/a-nbnbin.ads, - libgnat/a-nbnbre.ads, libgnat/a-nubinu.ads, - libgnat/s-aoinar.ads, libgnat/s-aomoar.ads, - libgnat/s-aotase.ads, libgnat/s-stopoo.ads: Remove aspects that - we will not implement. - -2020-06-11 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-aoinar.adb (Atomic_Fetch_And_Add, - Atomic_Fetch_And_Subtract): Add fallback using - compare-and-exchange, in case the integer type does not map to a - machine type. - -2020-06-10 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-aomoar.ads, libgnat/s-aomoar.adb: New files. - * libgnat/s-atopar.ads: Move... - * libgnat/s-aoinar.ads: Here. - * libgnat/s-atopar.adb: Move... - * libgnat/s-aoinar.adb: Here. - * impunit.adb: Update list of runtime files. - * Makefile.rtl (GNATRTL_NONTASKING_OBJS=): Adjust. - -2020-06-10 Arnaud Charlet <charlet@adacore.com> - - * snames.ads-tmpl (Name_Characters_Assertion_Check, - Name_Containers_Assertion_Check, - Name_Interfaces_Assertion_Check, Name_IO_Assertion_Check, - Name_Numerics_Assertion_Check, Name_Strings_Assertion_Check, - Name_System_Assertion_Check): New constants. - * types.ads (Characters_Assertion_Check, - Containers_Assertion_Check, Interfaces_Assertion_Check, - IO_Assertion_Check, Numerics_Assertion_Check, - Strings_Assertion_Check, System_Assertion_Check): New constants. - (All_Checks): Update accordingly. - -2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> - - * exp_ch3.adb (Build_Equivalent_Record_Aggregate): Return Empty - if Etype of record component has predicates. - -2020-06-10 Arnaud Charlet <charlet@adacore.com> - - * exp_ch3.adb (Build_Init_Statements): Implement the notion of - "require late initialization". - -2020-06-10 Eric Botcazou <ebotcazou@adacore.com> - - * sem_util.adb (Copy_And_Maybe_Dereference): Temporarily copy - the parent node of the original tree when dereferencing. - -2020-06-10 Ed Schonberg <schonberg@adacore.com> - - * sem_warn.adb (Warn_On_Overlapping_Actuals): Add a warning when - two actuals in a call overlap, both are composite types that may - be passed by reference, and only one of them is writable. - -2020-06-10 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_N_In): Use an expression with actions to - insert the PE raise statement for the Unchecked_Union case. - -2020-06-10 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch4.adb (Analyze_Call): Use idiomatic condition. - * sem_res.adb (Resolve_Call): Remove obsolete code. - -2020-06-10 Eric Botcazou <ebotcazou@adacore.com> - - * sem_util.adb (Copy_And_Maybe_Dereference): New function. - (Build_Access_Record_Constraint): Use it to copy the prefix. - (Build_Actual_Array_Constraint): Likewise. - (Build_Actual_Record_Constraint): Likewise. - -2020-06-10 Bob Duff <duff@adacore.com> - - * sem_prag.adb (Invariant): Remove the pragma removing code. It - doesn't work to remove the pragma, because various flags are set - during Build_Invariant_Procedure_Declaration and - Build_Invariant_Procedure_Body that need to be set to avoid the - spurious warnings. - * exp_util.adb (Make_Invariant_Call): Avoid calling the - invariant-checking procedure if the body is empty. This is an - optimization. - -2020-06-10 Vasiliy Fofanov <fofanov@adacore.com> - - * doc/gnat_ugn/gnat_utility_programs.rst: Fix gnatmetric - switches description. - -2020-06-10 Arnaud Charlet <charlet@adacore.com> - - * repinfo-input.ads, repinfo-input.adb, repinfo.adb, - repinfo.ads: Update header. - -2020-06-10 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb (In_Place_Assign_OK): Do not necessarily return - false for a type with discriminants. - (Convert_To_Assignments): Use Parent_Node and Parent_Kind more - consistently. In the in-place assignment case, first apply a - discriminant check if need be, and be prepared for a rewritten - aggregate as a result. - -2020-06-10 Arnaud Charlet <charlet@adacore.com> - - * atree.adb, contracts.adb, debug.adb, freeze.adb, - repinfo-input.adb, repinfo.adb, sem_attr.adb, sem_ch10.adb, - sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_ch6.adb, - sem_ch8.adb, sem_ch9.adb, sem_disp.adb, sem_eval.adb, - sem_prag.adb: Remove more references to ASIS. - -2020-06-10 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-secsta.adb (Round_Up): Fix typo in exception - message. - -2020-06-10 Piotr Trojanek <trojanek@adacore.com> - - * par-ch4.adb (P_Membership_Test): Fix typo in a grammar rule. - -2020-06-10 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove - expansion of First and Last attributes. - -2020-06-10 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Remove folding - for Enum_Rep attribute. - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove - duplicated code for folding Enum_Rep attribute. - * sem_attr.adb (Eval_Attribute): Relax condition for folding - Enum_Rep attribute; previously dead code is now executed when - the attribute prefix is an enumeration literal; refine type in - processing of Enum_Val. - -2020-06-10 Javier Miranda <miranda@adacore.com> - - * sem_ch3.adb (Analyze_Declarations): Adjust the machinery that - takes care of late body overriding of initialize, adjust, - finalize. Remove ASIS mode code. - -2020-06-10 Ed Schonberg <schonberg@adacore.com> - - * einfo.ads (Access_Subprogram_Wrapper): New attribute of - Subprogram_Type entities. Denotes subprogram constructed for - Access_To_Subprogram types that include pre- and postconditions. - * einfo.adb: Subprogram bodies for Access_Subprogram_Wrapper. - * exp_ch6.adb (Expand_Call): An indirect call through an - Access_To_subprogram that includes contracts is rewritten as a - call to the corresponding Access_ ubprogram_Wrapper. Handle - derived types that inherit contract from parent. - * sem_prag.adb (Build_Access_Subprogram_Wrapper): Build - subprogram declaration for subprogram that incorporates the - contracts of an Access_To_Subprogram type declaration. Build - corresponding body and attach it to freeze actions for type. - * sem_util.ads, sem_util.adb (Is_Access_Subprogram_Wrapper): - Utility that uses signature of the subprogram to determine - whether it is a generated wrapper for an Access_To_Subprogram - type. - -2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> - - * par-ch6.adb (P_Subprogram): Make sure the specification - belongs to a procedure. - -2020-06-10 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (All_Membership_Choices_Static): Assert an AST - property documented in sinfo.ads and simplify an excessive - condition. - -2020-06-10 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Fix a copy-paste - mistake in comment. - * sem_res.adb (Flag_Effectively_Volatile_Objects): Fix a type in - the SPARK RM rule number. - * exp_ch4.adb, sem_util.adb: Fix style in single line comments. - -2020-06-10 Piotr Trojanek <trojanek@adacore.com> - - * sem_aux.ads, sem_aux.adb (Get_Low_Bound): Remove. - -2020-06-10 Arnaud Charlet <charlet@adacore.com> - - * scn.adb (Determine_License): Remove. - -2020-06-10 Justin Squirek <squirek@adacore.com> - - * exp_ch3.adb (Expand_N_Object_Declaration): Add condition to - handle processing of objects initialized by a call to a function - return an anonymous access type. - * exp_ch6.adb, exp_ch6.ads - (Has_Unconstrained_Access_Discriminants): Moved to sem_util.adb - (Needs_Result_Accessibility_Level): Moved to sem_util.adb - * sem_util.adb, sem_util.ads - (Has_Unconstrained_Access_Discriminants): Moved from exp_ch6.adb - (Needs_Result_Accessibility_Level): Moved from exp_ch6.adb - * sem_res.adb (Valid_Conversion): Add condition for the special - case where the operand of a conversion is the result of an - anonymous access type - -2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> - - * par-ch6.adb (P_Subprogram): Reject duplicate subprogram - declarations. - -2020-06-10 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch6.adb (Insert_Post_Call_Actions): Deal with the context - of an if-expression and with a call written in prefixed notation. - -2020-06-10 Gary Dismukes <dismukes@adacore.com> - - * einfo.ads: Minor reformatting of a comment. - * exp_aggr.adb: Minor reformatting and a grammar correction. - * exp_attr.adb: Minor reformatting and a typo fix in some - comments. - * sem_ch12.adb: Fix three typos in comments. - -2020-06-09 Javier Miranda <miranda@adacore.com> - - * sem_ch6.adb (New_Overloaded_Entity): Add missing call to check - subtype conformance of overriding dispatching primitive. - * sem_eval.adb (Subtypes_Statically_Match): Handle derivations - of private subtypes. - * libgnat/g-exptty.adb, libgnat/g-exptty.ads - (Set_Up_Communications): Fix the profile since null-exclusion is - missing in the access type formals. - * sem_disp.ads (Check_Operation_From_Private_View): Adding - documentation. - -2020-06-09 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (XEINFO section): Update format description. - (Is_Subprogram_Or_Entry): Move pragma to regular section. - (Is_Subprogram_Or_Generic_Subprogram): Likewise. - * xeinfo.adb (Get_B4): Rename to... - (Get_B0): ...this. - (Translate_Expr): New procedure extracted from... - (XEinfo): ...here. Try to apply Get_B0 first and then - call Translate_Expr to translate supported constructs. - -2020-06-09 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch6.adb (Freeze_Subprogram): Deal with convention C_Family. - * freeze.adb (Freeze_Profile): Likewise. Add missing guard. - * sem_mech.adb (Set_Mechanisms): Likewise. - * lib-xref.adb (Output_Import_Export_Info): Ditto for C_Variadic. - * repinfo.adb (List_Subprogram_Info): Likewise. - * sem_prag.adb (Set_Convention_From_Pragma): Move main checks for - Stdcall to... - (Process_Convention): ...here. Add checks for C_Variadic. - * snames.ads-tmpl: Add Name_C_Variadic_0 .. Name_C_Variadic_16. - Use consistent format for subtype declarations. - (Convention_Id): Add Convention_C_Variadic_0 .. C_Variadic_16 - and move Convention_CPP up. - (Convention_C_Family): New subtype of Convention_Id. - (Convention_C_Variadic): Likewise. - (Foreign_Convention): Use explicit upper bound. - Add pragma Inline for Is_Configuration_Pragma_Name, - Is_Function_Attribute_Name, Is_Internal_Attribute_Name - and Is_Procedure_Attribute_Name. - * snames.adb-tmpl (Get_Convention_Id): Deal with Name_Variadic_n. - (Get_Convention_Name): Deal with Convention_Variadic_n. - * types.h (Convention_Id): New typedef. - * xsnamest.adb (Name2): New variable. - (Is_Conv): New pattern. - (Get_Subt1): Likewise. - (Get_Subt2): Likewise. - Output subtypes of Convention_Id into the C header file. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * exp_ch3.adb, exp_ch4.adb, exp_ch6.adb, exp_ch9.adb, - exp_disp.adb, exp_util.adb: Add comments related to errors that - should be moved to semantic analysis. Also replace "?" with "??" - in warning messages. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-strunb__shared.ads, libgnat/a-strunb__shared.adb - (Reference, Unreference): No-op for Empty_Shared_String. - Remove unneeded calls to Reference. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * exp_ch5.adb (Expand_N_Assignment): Remove kludge for - AI05-0087. - * sem_ch12.adb (Validate_Derived_Type_Instance): Implement - AI05-0087 retroactively since it's a binding interpretation. - -2020-06-09 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (Has_Foreign_Convention): Fix description. - (Component_Alignment): Move around. - (Has_DIC): Likewise. - (Has_Interrupt_Handler): Likewise. - (Has_Invariants): Likewise. - (Is_Atomic_Or_VFA): Likewise. - (Next_Index): Likewise. - (Scope_Depth): Likewise. - (Init_Component_Size): Likewise. - (Init_Component_Location): Likewise. - (Init_Size): Likewise. - (Inline Pragmas for functions): Add Corresponding_Function, - Corresponding_Procedure, Entry_Max_Queue_Lengths_Array, - Finalize_Storage_Only, Has_DIC, Has_Invariants, - Initialization_Statements, Is_Anonymous_Access_Type, - Next_Stored_Discriminant, Address_Clause, Alignment_Clause, - Float_Rep, Has_Foreign_Convention, Has_Non_Limited_View, - Is_Constant_Object, Is_Discriminal, Is_Finalizer, Is_Null_State, - Is_Prival, Is_Protected_Component, Is_Protected_Record_Type, - Is_Subprogram_Or_Entry, Is_Task_Record_Type, Size_Clause, - Stream_Size_Clause, Type_High_Bound, Type_Low_Bound, Known_*, - Unknown_*. - (Inline Pragmas for procedures): Add Set_Corresponding_Function, - Set_Corresponding_Procedure, Set_Finalize_Storage_Only, - Set_Float_Rep, Set_Initialization_Statements, - Init_Normalized_First_Bit, Init_Normalized_Position, - Init_Normalized_Position_Max. - * einfo.adb (Was_Hidden): Move around. - (Is_Packed_Array): Likewise. - (Model_Emin_Value): Likewise. - (Model_Epsilon_Value): Likewise. - (Model_Mantissa_Value): Likewise. - (Model_Small_Value): Likewise. - -2020-06-09 Ed Schonberg <schonberg@adacore.com> - - * sem_ch12.adb (Check_Shared_Variable_Control_Aspects): Require - exact match between formal and actual for aspects Atomic and - Volatile only for formal derived types. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * exp_util.adb (Side_Effect_Free): Improve handling of - N_Aggregate. - -2020-06-09 Ghjuvan Lacambre <lacambre@adacore.com> - - * sem_res.adb (Resolve_Qualified_Expression): Use Subtype_Mark - type. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * exp_aggr.adb (Max_Aggregate_Size): New function to factorize - code. - (Convert_To_Positional, Aggr_Size_OK): Use Max_Aggregate_Size. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * sem_util.ads, sem_util.adb (Set_Debug_Info_Defining_Id): New. - * exp_ch3.adb, exp_ch8.adb: Call Set_Debug_Info_Defining_Id when - relevant. - -2020-06-09 Justin Squirek <squirek@adacore.com> - - * einfo.ads (Returns_By_Ref): Modify documentation to reflect - that Returns_By_Ref can be applied to E_Subprogram_Type - entities. - -2020-06-09 Justin Squirek <squirek@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference): Modify expansion - of 'Overlaps_Storage to take into account zero sized arrays. - -2020-06-09 Bob Duff <duff@adacore.com> - - * bindo-graphs.adb, bindo-graphs.ads: For each invocation graph, - record the corresponding library graph. - * bindo-writers.adb (Write_Invocation_Graph_Vertex): Print the - lib item name. Remove library graph parameters. - * bindo-augmentors.adb, bindo-augmentors.ads, - bindo-builders.adb, bindo-diagnostics.adb, - bindo-diagnostics.ads, bindo-elaborators.adb: Remove library - graph parameters. - -2020-06-09 Eric Botcazou <ebotcazou@adacore.com> - - * checks.adb (Apply_Predicate_Check): Extend trick used for - aggregates to qualified aggregates and object declarations - * einfo.ads (Has_Own_DIC): Mention the underlying full view. - (Has_Own_Invariants): Likewise. - (Has_Predicates): Likewise. - * exp_util.adb (Build_DIC_Procedure_Declaration): Do not deal - with base types explicitly but with underlying full views. - (Build_Invariant_Procedure_Declaration): Likewise. - * sem_ch13.adb (Build_Predicate_Functions): Do not deal with - the full view manually but call Propagate_Predicate_Attributes - to propagate attributes to views. - (Build_Predicate_Function_Declaration): Likewise. - * sem_ch3.adb (Build_Assertion_Bodies_For_Type): Build bodies - for private full views with an underlying full view. - (Build_Derived_Private_Type): Small comment tweak. - (Complete_Private_Subtype): Call Propagate_Predicate_Attributes. - (Process_Full_View): Do not deal with base types explicitly for - DIC and Invariant attributes. Deal with underlying full views - for them. Call Propagate_Predicate_Attributes and deal with - underlying full views for them. - * sem_ch7.adb (Preserve_Full_Attributes): Do not cross propagate - DIC and Invariant attributes between full type and its base type. - Propagate Predicate attributes from the full to the private view. - * sem_ch9.adb (Analyze_Protected_Type_Declaration): Likewise. - (Analyze_Task_Type_Declaration): Likewise. - * sem_util.ads (Get_Views): Remove Full_Base parameter and add - UFull_Typ parameter. - (Propagate_Predicate_Attributes): New procedure. - * sem_util.adb (Get_Views): Remove Full_Base parameter and add - UFull_Typ parameter. Retrieve the Corresponding_Record_Type - from the underlying full view, if any. - (Propagate_DIC_Attributes): Remove useless tests. - (Propagate_Invariant_Attributes): Likewise. - (Propagate_Predicate_Attributes): New procedure. - -2020-06-09 Justin Squirek <squirek@adacore.com> - - * exp_ch5.adb (Expand_Predicated_Loop): Perserve the original - loop identifier within the expansion. - -2020-06-09 Bob Duff <duff@adacore.com> - - * bindo-graphs.ads (Library_Graph_Edge_Kind): Reorder enumerals - to reflect the order of adding edges. Clarify comments. - * bindo-graphs.adb (Add_Edge_Kind_Check): Correct the - assertions. Reorder the "when"s to match the order of adding - edges, and therefore the order of enumerals in type - Library_Graph_Edge_Kind. Change names to "Old_" and "New_" to - clarify what's what. Combine Invocation_Edge into the "<=" - test. Fix the "raise Program_Error" message, which was - backwards. - -2020-06-09 Bob Duff <duff@adacore.com> - - * bindo-graphs.adb (Add_Edge_Kind_Check): Add the Image of the - old and new Kinds to the raise Program_Error message. - -2020-06-09 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch3.adb (Is_Visible_Component): Do not special-case - bodies of instances. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * exp_ch4.adb (Expand_N_In): Fix handling of null exclusion. - -2020-06-09 Ed Schonberg <schonberg@adacore.com> - - * sem_ch12.adb (Check_Shared_Variable_Control_Aspects): Require - exact match between formal and actual for aspects Atomic, - Atomic_Component, Volatile, and Volatile_Components. - -2020-06-09 Bob Duff <duff@adacore.com> - - * doc/gnat_ugn/gnat_utility_programs.rst: Add documentation for - the --no-separate-return switch of gnatpp. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * sem_warn.adb (Warn_On_Constant_Valid_Condition): Add proper - warning tag. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * sem_type.adb (Covers): Fix implementation of AI05-0149. - * sem_res.adb: Fix typo. - -2020-06-09 Ed Schonberg <schonberg@adacore.com> - - * exp_ch9.adb (Build_Master_Renaming): Make name in renaming - declaration unique by adding a numeric suffix, to prevent - accidental name conflict when several instantiations of a - package containing an access_to_incomplete type that designate - tasks appear in the same scope. - -2020-06-09 Piotr Trojanek <trojanek@adacore.com> - - * libgnarl/a-synbar.ads, libgnarl/a-synbar.adb, - libgnarl/a-synbar__posix.ads, libgnarl/a-synbar__posix.adb - (Ada.Synchronous_Barriers): Annotate with SPARK_Mode => Off. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * sem_eval.adb (Eval_Relational_Op, Eval_String_Literal, - Eval_Type_Conversion): Relax rules on relational operators and - type conversions of static string types. - -2020-06-09 Arnaud Charlet <charlet@adacore.com> - - * sem_util.ads, sem_util.adb (Is_Partially_Initialized_Type): - Take Default_Value and Default_Component_Value into account. - * sem_ch3.adb (Analyze_Object_Declaration): Update comment. - -2020-06-09 Bob Duff <duff@adacore.com> - - * bindo-graphs.adb (Add_Edge_Kind_Check): Disable failing part - of the assertion. - -2020-06-08 Steve Baird <baird@adacore.com> - - * sem_prag.adb (Analyze_Pragma.Set_Ravenscar_Profile): Add - appropriate call to Set_Restriction_No_Dependence if Ada_Version - >= Ada2012 and Profile is either Ravenscar or a GNAT-defined - Ravenscar variant (i.e., not Jorvik). - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * sem_ch5.adb: Fix typo. - * sem_ch8.adb (Analyze_Renamed_Primitive_Operation): Check that - the prefix of a prefixed view must be renamable as an object. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * sem_cat.ads: Fix typo. - * sem_cat.adb (Validate_Remote_Access_To_Class_Wide_Type): Add - handling of N_Attribute_Definition_Clause. - * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Call - Validate_Remote_Access_To_Class_Wide_Type for Storage_Size and - Storage_Pool. - * sem_attr.adb, exp_ch4.adb: Update comments. - -2020-06-08 Justin Squirek <squirek@adacore.com> - - * sem_ch4.adb (Analyze_One_Call): Add extra condition to the - predicate for deciding when a given controlled call is visible. - -2020-06-08 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Port - changes in frontend expander. - -2020-06-08 Piotr Trojanek <trojanek@adacore.com> - - * sem_ch13.adb (All_Membership_Choices_Static): Fix style. - -2020-06-08 Steve Baird <baird@adacore.com> - - * libgnat/s-rident.ads: Add Jorvik to the Profile_Name - enumeration type. Add an element for Jorvik to the array - aggregate that is the initial value of the constant - Profile_Info. - * targparm.adb (Get_Target_Parameters): Handle "pragma Profile - (Jorvik);" similarly to "pragma Profile (Ravenscar);". - * snames.ads-tmpl: Declare Name_Jorvik Name_Id. Unlike - Ravenscar, Jorvik is not a pragma name and has no corresponding - element in the Pragma_Id enumeration type; this means that its - declaration must not occur between those of First_Pragma_Name - and Last_Pragma_Name. - * sem_prag.adb (Analyze_Pragma): Add call to - Set_Ravenscar_Profile for Jorvik, similar to the existing calls - for Ravenscar and the GNAT Ravenscar variants. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Analyze_Object_Renaming): Update Get_Object_Name - to go through N_Qualified_Expression and N_Type_Conversion. Fix - another case of wrong usage of E_Anonymous_Access_Type instead - of Anonymous_Access_Kind. - * sem_util.adb (Is_Dependent_Component_Of_Mutable_Object): Work - on the original node. - (Is_Aliased_View): Take into account N_Qualified_Expression. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * sem_eval.adb (Eval_Type_Conversion): Fix handling of - enumeration to integer conversions. - * exp_attr.adb (Expand_N_Attribute_Reference - [Attribute_Enum_Rep]): Remove special casing for first-level - renaming, best left to the general folding mechanism via - Eval_Type_Conversion. - -2020-06-08 Eric Botcazou <ebotcazou@adacore.com> - - * atree.adb (New_Copy): Do not clear Has_Dynamic_Range_Check. - * checks.ads (Append_Range_Checks): Remove Flag_Node parameter. - (Insert_Range_Checks): Likewise and remove default value of - Static_Loc parameter. - * checks.adb (Append_Range_Checks): Remove Flag_Node parameter. - Do not test and set Has_Dynamic_Range_Check. - (Insert_Range_Checks): Likewise and remove default value of - Static_Loc parameter. - * csinfo.adb (CSinfo): Remove 'L' from [NEUB]_Fields pattern and - do not handle Has_Dynamic_Range_Check. - * exp_ch5.adb (Expand_N_Assignment_Statement): Remove argument - in call to Insert_Range_Checks. - * sem_ch3.adb (Analyze_Subtype_Declaration): Do not fiddle - with Has_Dynamic_Range_Check. - (Process_Range_Expr_In_Decl): Remove argument in calls to - Insert_Range_Checks and Append_Range_Checks. - * sinfo.ads (Has_Dynamic_Range_Check): Delete. - (Set_Has_Dynamic_Range_Check): Likewise. - * sinfo.adb (Has_Dynamic_Range_Check): Delete. - (Set_Has_Dynamic_Range_Check): Likewise. - * treepr.adb (Print_Node): Do not print Has_Dynamic_Range_Check. - -2020-06-08 Steve Baird <baird@adacore.com> - - * sem_ch13.ads: Export new function - All_Membership_Choices_Static. - * sem_ch13.adb: Implement new function - All_Membership_Choices_Static. This involves moving the - functions Is_Static_Choice and All_Membership_Choices_Static, - which were previously declared within the function - Is_Predicate_Static, out to library level so that they can be - called by the new function. The already-exisiting code in - Is_Predicate_Static which became the body of - All_Membership_Choices_Static is replaced with a call to the new - function in order to avoid duplication. - * exp_ch9.adb (Is_Pure_Barrier): Several changes needed to - implement rules of AI12-0290 and RM D.7's definition of - "pure-barrier-eligible". These changes include adding a call to - the new function Sem_13.All_Membership_Choices_Static, as per - the "see 4.9" in RM D.7(1.6/5). - -2020-06-08 Richard Kenner <kenner@adacore.com> - - * exp_unst.adb (Visit_Node): When visiting array attribute - nodes, in addition to checking the type of Get_Referenced_Object - of the prefix, also check the actual type of the prefix. - -2020-06-08 Gary Dismukes <dismukes@adacore.com> - - * checks.adb (Apply_Predicate_Check): Refine test for being in a - subprogram body to account for no Corresponding_Body case, - avoiding blowups arising due to other changes here. - * exp_ch4.adb (Expand_N_Qualified_Expression): Apply predicate - checks, if any, after constraint checks are applied. - * sem_eval.ads (Check_Expression_Against_Static_Predicate): Add - Check_Failure_Is_Error formal for conditionalizing warning vs. - error messages. - * sem_eval.adb (Check_Expression_Against_Static_Predicate): - Issue an error message rather than a warning when the new - Check_Failure_Is_Error formal is True. In the nonstatic or - Dynamic_Predicate case where the predicate is known to fail, - emit the check to ensure that folded cases get checks applied. - * sem_res.adb (Resolve_Qualified_Expression): Call - Check_Expression_Against_Static_Predicate, passing True for - Check_Failure_Is_Error, to ensure we reject static predicate - violations. Remove code that was conditionally calling - Apply_Predicate_Check, which is no longer needed, and that check - procedure shouldn't be called from a resolution routine in any - case. Also remove associated comment about preventing infinite - recursion and consistency with Resolve_Type_Conversion, since - that handling was already similarly removed from - Resolve_Type_Convesion at some point. - (Resolve_Type_Conversion): Add passing of True for - Check_Failure_Is_Error parameter on call to - Check_Expression_Against_Static_Predicate, to ensure that static - conversion cases that violate a predicate are rejected as - errors. - -2020-06-08 Piotr Trojanek <trojanek@adacore.com> - - * snames.ads-tmpl (Name_SPARK): Restore after being deleted. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * exp_aggr.adb, exp_ch6.adb, par-ch11.adb, par-ch6.adb, - par-ch7.adb, par-prag.adb, restrict.adb, restrict.ads, - scans.ads, scng.adb, sem_aggr.adb, sem_attr.adb, sem_ch11.adb, - sem_ch12.adb, sem_ch3.adb, sem_ch3.ads, sem_ch4.adb, - sem_ch5.adb, sem_ch6.adb, sem_ch7.adb, sem_ch8.adb, sem_ch9.adb, - sem_res.adb, sem_util.adb, sem_util.ads, snames.ads-tmpl, - gnatbind.adb, libgnat/s-rident.ads, - doc/gnat_rm/standard_and_implementation_defined_restrictions.rst: - Remove processing of SPARK_05 restriction. - * gnat_rm.texi: Regenerate. - * opt.ads: Remove processing of old checksum which is now - handled by gprbuild directly. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * sem_ch12.adb (Instantiate_Object): Relax rules related to null - exclusions and generic objects. Handle all anonymous types - consistently and not just E_Anonymous_Access_Type. - * sem_ch8.adb (Analyze_Object_Renaming): Change wording so that - it applies to both renamings and instantiations to avoid - confusion. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-textio.ads (File_Mode): Fix typo in comment. - -2020-06-08 Eric Botcazou <ebotcazou@adacore.com> - - * sem_res.adb (Resolve_Indexed_Component): Do not give a warning - for a nonatomic component of an atomic array which is subject to - an address clause in Ada 2020 mode. - (Resolve_Selected_Component): Likewise for an atomic record. - -2020-06-08 Philippe Gil <gil@adacore.com> - - * doc/gnat_ugn/the_gnat_compilation_model.rst: in "Handling - Files with Multiple Units" part documents gnatname use for - unmodified files handling and gnatchop use for files - refactoring. - * gnat_ugn.texi: Regenerate. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * doc/gnat_rm/implementation_defined_attributes.rst: - Enum_Rep/Enum_Val are standard Ada 202x attributes. - * gnat_rm.texi: Regenerate. - -2020-06-08 Javier Miranda <miranda@adacore.com> - - * exp_aggr.adb (Safe_Component): Remove code that considers as - unsafe components that are aggregates; such removal allows the - frontend to proceed and evaluate if they are safe by means of - invoking Safe_Aggregate. - -2020-06-08 Piotr Trojanek <trojanek@adacore.com> - - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Apply - standard expansion to attributes First and Last. - -2020-06-08 Piotr Trojanek <trojanek@adacore.com> - - * exp_attr.adb, exp_util.ads, exp_util.adb (Get_Index_Subtype): - Move from the body of Exp_Attr to Exp_Util and expose from the - spec. - * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Replace - duplicated code with a call to Get_Index_Subtype. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * sem_ch8.adb (Analyze_Object_Renaming): Simplify code by moving - many special cases to Is_Object_Reference and removing others by - only checking renamings coming from sources. - * sem_util.adb (Is_Object_Reference): Update for AI12-0226 and - add more regular handling of 'Priority. Remove special cases no - longer needed now that we are only checking renamings coming - from sources. - -2020-06-08 Claire Dross <dross@adacore.com> - - * libgnat/a-cofove.adb (Insert_Space): The computation of Index - generates a spurious compiler warning about a value not being in - range for a statically dead branch. Silence it using pragma - Warnings. - -2020-06-08 Bob Duff <duff@adacore.com> - - * bindo-graphs.adb (function Add_Edge): Rename - Add_Edge_With_Return to Add_Edge; we can tell it returns because - it's a function, and overloading seems appropriate in this case. - If Activates_Task=True, and we're not going to add a new edge - because an existing Pred-->Succ edge already exists, then set - Activates_Task to True on the preexisting edge. This ensures - that the message: - info: use pragma Restrictions (No_Entry_Calls_In_Elaboration_Code) - appears when appropriate, no matter in what order the edges - happened to be processed. - (procedure Add_Edge): Remove redundant assertions. - (Activates_Task): Other kinds of edges can have - Activates_Task=True. For example, if we had a With_Edge and - then an Invocation_Edge with Activates_Task=True, then the - With_Edge has Activates_Task set to True. - (Add_Edge_Kind_Check): New procedure to prevent other bugs of - this nature. For example, if we were to sometimes call Add_Edge - for a Spec_Before_Body_Edge followed by Add_Edge for a - With_Edge, and sometimes in the other order, that would cause a - similar bug to what we're fixing here. - (Set_Is_Recorded_Edge): Val parameter is not used. Get rid of - it. - (Set_Activates_Task): New procedure to set the Activates_Task flag. - * bindo-graphs.ads (Library_Graph_Edge_Kind): Reorder the - enumeration literals to facilitate Add_Edge_Kind_Check. - * ali.adb (Known_ALI_Lines): The comment about "still available" - was wrong. Fix that by erasing the comment, and encoding the - relevant information in real code. Take advantage of Ada's full - coverage rules by removing "others =>". Also DRY. - -2020-06-08 Ed Schonberg <schonberg@adacore.com> - - * par-ch12.adb (P_Formal_Derived_Type_Definition): Handle - properly formal derived types that include aspect - specifications, so that the "with" keyword appears twice in the - formal type declaration. - * sem_ch13.adb (Has_Generic_Parent): Return true if the type - itself is a generic formal. - -2020-06-08 Dmitriy Anisimkov <anisimko@adacore.com> - - * socket.c (__gnat_minus_500ms): Remove - IsWindowsVersionOrGreater from condition. - -2020-06-08 Claire Dross <dross@adacore.com> - - * libgnat/a-cfdlli.ads, libgnat/a-cfhama.ads, - libgnat/a-cfhase.ads, libgnat/a-cforma.ads, libgnat/a-cforse.ads - (Delete): Add Depends contract. - -2020-06-08 Arnaud Charlet <charlet@adacore.com> - - * snames.ads-tmpl (Name_Program_Error_Check, - Name_Tasking_Check): New constants. - * types.ads (Program_Error_Check, Tasking_Check): New constants. - (All_Checks): Update accordingly. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * sem_prag.adb (Validate_Compile_Time_Warning_Or_Error): Use ??. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * cstand.adb (Create_Standard): Update comments. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * scng.adb (Scan): Fix typo to take into account all future - versions of Ada. - * sem_attr.ads (Attribute_Impl_Def): Add Attribute_Reduce for - now. - * sem_attr.adb (Analyze_Attribute): Only allow 'Reduce under - -gnatX. - * snames.ads-tmpl (Name_Reduce): Update comment. - -2020-06-05 Thomas Quinot <quinot@adacore.com> - - * exp_disp.adb (Expand_Interface_Thunk): Add comment about - gnatcov reliance on specific name used for thunks. - -2020-06-05 Ed Schonberg <schonberg@adacore.com> - - * sem_ch3.adb (Analyze_Subtype_Declaration): For scalar types, - and for subtype declarations without a constraint, subtype - inherits Atomic flag from base type. - -2020-06-05 Piotr Trojanek <trojanek@adacore.com> - - * doc/gnat_rm/implementation_defined_attributes.rst (Enum_Rep): - Remove extra colon. - * gnat_rm.texi: Regenerate. - -2020-06-05 Eric Botcazou <ebotcazou@adacore.com> - - * atree.adb (New_Copy): Clear Has_Dynamic_Range_Check on - subexpression nodes. - * checks.adb (Append_Range_Checks): Assert that the node - doesn't have the Has_Dynamic_Range_Check flag set. - (Insert_Range_Checks): Likewise. - * exp_ch3.adb (Expand_N_Subtype_Indication): Do not apply - range checks for a full type or object declaration. - * sem_ch3.ads: Move with and use clauses for Nlists to... - (Process_Range_Expr_In_Decl): Change default to No_List for - the Check_List parameter. - * sem_ch3.adb: ...here. - (Process_Range_Expr_In_Decl): Likewise. When the insertion - node is a declaration, only insert on the list if is present - when the declaration involves discriminants, and only insert - on the node when there is no list otherwise. - -2020-06-05 Piotr Trojanek <trojanek@adacore.com> - - * sem_aggr.adb (Resolve_Record_Aggregate): Create the - N_Aggregate node with its Expressions field set to No_List and - not to an empty list. - -2020-06-05 Dmitriy Anisimkov <anisimko@adacore.com> - - * libgnat/s-os_lib.adb (Is_Dirsep): Moved from Build_Path to - package level to reuse. - (Normalize_Pathname.Final_Value): Reduce 2 'if' statements to - one. - (Normalize_Pathname.Fill_Directory): New procedure instead of - function Get_Directory. Remove slash to backslash conversion and - drive letter uppercasing on Windows. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * sem.adb (Assert_Done): Relax check for main unit, as it was - overzealous in the case of the main unit itself. - -2020-06-05 Piotr Trojanek <trojanek@adacore.com> - - * exp_ch3.adb, sem_ch8.adb, sem_util.adb: Use Is_Incomplete_Type - to make the code easier to read. - -2020-06-05 Piotr Trojanek <trojanek@adacore.com> - - * einfo.adb: Minor reformatting. - * sem_util.adb (Has_Full_Default_Initialization, - Is_Partially_Initialized_Type, Caller_Known_Size_Record, - Large_Max_Size_Mutable): Iterate with - First_Component/Next_Component; rename Ent to Comp. - -2020-06-05 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Use - Expr_Rep_Value instead of Expr_Value to obtain the equivalent - integer value. - * sem_eval.ads (Expr_Value): Document more supported cases. - * sem_eval.adb (Expr_Rep_Value): Copy missing cases from - Exp_Value. - -2020-06-05 Bob Duff <duff@adacore.com> - - * rtsfind.adb, rtsfind.ads: Move subtypes of RTU_Id into package - body, because they are not needed by clients. Change "Child_" to - "Descendant", because grandchildren and great grandchildren are - involved. Replace all the repetitive comments with a single - concise one. Change the parent subtypes to be more consistent; - use the most specific parent. - -2020-06-05 Piotr Trojanek <trojanek@adacore.com> - - * rtsfind.ads, rtsfind.adb (Is_Text_IO_Special_Package): Moved - from the GNATprove backend to the frontend. - -2020-06-05 Yannick Moy <moy@adacore.com> - - * sem_util.ads: Add comment about function only used in - CodePeer. - -2020-06-05 Ed Schonberg <schonberg@adacore.com> - - * sem_ch9.adb, (Analyze_Task_Body): After analying the task - body, indicate that all local variables have no delayed aspects. - This prevents improper later calls to - Check_Aspect_At_End_Of_Declarations, that would happen when the - constructed task_procedure body (generated during expansion) is - analyzed. The legality of aspect specifications that may appear - on local declarations has already been established, and it is in - general not possible to recheck them properly during expansion, - when visibility may not be fully established. - -2020-06-05 Piotr Trojanek <trojanek@adacore.com> - - * libgnat/a-cofuve.ads (First): Add Global contract. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * sem_prag.adb (Set_Convention_From_Pragma): Set the convention - of anonymous access array components. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-calfor.ads, libgnat/a-catizo.ads, - libgnat/a-catizo.adb (Local_Time_Offset, Local_Image): New. - (UTC_Time_Offset): Now a renaming of Local_Time_Offset. - -2020-06-05 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch3.adb (Available_Full_View): New function returning - either the full or the underlying full view. - (Build_Full_Derivation): Add guard for the full view. - (Copy_And_Build): Retrieve the underlying full view, if any, - also if deriving a completion. - (Build_Derived_Private_Type): Use Available_Full_View throughout - to decide whether a full derivation must be done. - -2020-06-05 Bob Duff <duff@adacore.com> - - * exp_attr.adb, exp_ch11.adb, exp_imgv.adb, exp_tss.ads, - par-ch4.adb, sem_attr.adb, sem_util.ads: Misc cleanup. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nudira.ads, libgnat/a-nudira.adb (Random): New - function. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * sem_attr.ads (Attribute_Impl_Def): Remove Enum_Rep/Val. - * sem_attr.adb (Attribute_20): New, move Enum_Rep/Val here. - (Analyze_Attribute): Take Attribute_20 into account. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * restrict.ads (Unit_Array): Add a-direct. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-stopoo.ads: Mark package Pure and leave room for - Nonblocking once this aspect is supported. - -2020-06-05 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference) <Valid_Scalars>: - Set the No_Truncation flag on the unchecked conversion built for - scalar types. - -2020-06-05 Bob Duff <duff@adacore.com> - - * einfo.adb, einfo.ads, exp_util.adb: Remove Invariants_Ignored - flag. - * sem_prag.adb (Invariant): Instead of setting a flag to be - checked elsewhere, remove the pragma as soon as it is analyzed - and checked for legality. - -2020-06-05 Eric Botcazou <ebotcazou@adacore.com> - - * checks.ads (Apply_Length_Check): Rename Ck_Node parameter to - Expr. - (Apply_Range_Check): Likewise. - (Get_Range_Checks): Likewise. - * checks.adb (Apply_Float_Conversion_Check): Likewise. - (Apply_Selected_Length_Checks): Likewise. - (Apply_Selected_Range_Checks): Likewise. - (Guard_Access): Likewise. - (Selected_Length_Checks): Likewise. Also avoid shadowing in - child procedures. - (Selected_Range_Checks): Likewise. - -2020-06-05 Arnaud Charlet <charlet@adacore.com> - - * par-ch3.adb, par-ch4.adb, scng.adb, sem_aggr.adb, - sem_ch10.adb, sem_ch12.adb, sem_prag.adb: Update wording: change - Ada_2020 to Ada 2020 in comments and mention -gnat2020 instead - of -gnatX switch. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * libgnat/i-c.ads (long_long, unsigned_long_long): New - definitions. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl: add a-tasini object - * impunit.adb (Non_Imp_File_Names_95): Add s-tasini. - * libgnarl/a-tasini.ads, libgnarl/a-tasini.adb: New files. - * libgnarl/s-taskin.ads (Global_Initialization_Handler): New. - * libgnarl/s-tassta.adb (Task_Wrapper): Call - Global_Initialization_Handler if non null. - -2020-06-04 Ed Schonberg <schonberg@adacore.com> - - * sem_ch12.adb (Build_Suprogram_Body_Wrapper, - Build_Subprogram_Decl_Wrapper): New suprograms, to create the - wrappers needed to implement contracts on formsl subprograms at - the point of instantiation. - (Build_Subprogram_Wrappers): New subprogram within - Analyze_Associations, calls the above when the formal subprogram - has contracts, and expansion is enabled. - (Instantiate_Formal_Subprogram): If the actual is not an entity, - such as a function attribute, or a synchronized operation, - create a function with an internal name and call it within the - wrapper. - (Analyze_Generic_Formal_Part): Analyze contracts at the end of - the list of formal declarations. - * sem_prag.adb (Analyze_Pre_Post_Condtion): In Ada_2020 the - aspect and corresponding pragma can appear on a formal - subprogram declaration. - (Find_Related_Declaration_Or_Body): Ditto. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch7.adb (Make_Final_Call): Set the type of the object, if - it is unanalyzed, before calling Convert_View on it. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * adabkend.adb, back_end.ads, opt.ads, sem_ch6.adb: Get rid of - Disable_FE_Inline_Always. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch7.adb (Make_Final_Call): Add missing guard. - * sem_ch3.adb (Copy_And_Build): Adjust recursive call for - private types. - (Build_Derived_Private_Type): Deal with underlying full views. - -2020-06-04 Bob Duff <duff@adacore.com> - - * libgnat/a-stobbu.adb, libgnat/a-stobbu.ads, - libgnat/a-stobfi.adb, libgnat/a-stobfi.ads, - libgnat/a-stoubu.adb, libgnat/a-stoubu.ads, - libgnat/a-stoufi.adb, libgnat/a-stoufi.ads, - libgnat/a-stoufo.adb, libgnat/a-stoufo.ads, - libgnat/a-stouut.adb, libgnat/a-stouut.ads, - libgnat/a-stteou.ads, libgnat/s-putaim.adb, - libgnat/s-putaim.ads, libgnat/s-putima.adb, libgnat/s-putima.ads - (Ada.Strings.Text_Output and children, System.Put_Images): New - runtime support for Put_Image. - * gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add - exp_put_image.o. - * exp_put_image.adb, exp_put_image.ads: New compiler package - that generates calls to runtime routines that implement - Put_Image. - * Makefile.rtl: Add object files for Ada.Strings.Text_Output and - children and System.Put_Images. - * aspects.adb: Simplify initialization of Canonical_Aspect. - * aspects.ads: Improve documentation. Add Aspect_Put_Image. - * exp_attr.adb: Add support for Put_Image, by calling routines - in Exp_Put_Image. - * sem_util.adb (Is_Predefined_Dispatching_Operation): Return - True for new TSS_Put_Image operation. - * exp_ch3.adb: For tagged types, build a dispatching - TSS_Put_Image operation by calling routines in Exp_Put_Image. - * exp_disp.adb, exp_disp.ads: Make TSS_Put_Image be number 10, - adjusting other operations' numbers after 10. We choose 10 - because that's the last number shared by all runtimes. - * exp_strm.adb: Use named notation as appropriate. - * exp_cg.adb, exp_tss.ads: Add TSS_Put_Image. - * libgnat/a-tags.ads: Modify Max_Predef_Prims for the new - TSS_Put_Image. - * impunit.adb: Add new runtime packages. - * rtsfind.adb, rtsfind.ads: Add support for - Ada.Strings.Text_Output, Ada.Strings.Text_Output.Utils, and - System.Put_Images. - * sem_attr.adb: Error checking for Put_Image calls. - * sem_ch12.adb (Valid_Default_Attribute): Support for passing - Put_Image as a generic formal parameter. - * sem_ch13.adb: Analysis of Put_Image aspect. Turn it into a - Put_Image attribute definition clause. - * sem_ch8.adb (Analyze_Subprogram_Renaming): Support for - renaming of the Put_Image attribute. - * snames.adb-tmpl: Fix comments. - * snames.ads-tmpl (Name_Put_Image): New Name_Id. - (Attribute_Put_Image): New Attribute_Id. - * tbuild.adb, tbuild.ads (Make_Increment): New utility. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (xpand_N_Attribute_Reference) <Input>: Call - Find_Inherited_TSS to look up the Stream_Read TSS. - <Output>: Likewise for the Stream_Write TSS. - * exp_ch7.adb (Make_Final_Call): Call Underlying_Type on - private types to account for underlying full views. - * exp_strm.ads (Build_Record_Or_Elementary_Input_Function): - Remove Use_Underlying parameter. - * exp_strm.adb (Build_Record_Or_Elementary_Input_Function): - Likewise and adjust accordingly. - * exp_tss.adb (Find_Inherited_TSS): Deal with full views. - Call Find_Inherited_TSS recursively on the parent type if - the base type is a derived type. - * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Take - into account underlying full views for derived types. - * sem_ch3.adb (Copy_And_Build): Look up the underlying full - view only for a completion. Be prepared for private types. - (Build_Derived_Private_Type): Build an underlying full view - for a completion in the general case too. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * back_end.adb, opt.ads, par-prag.adb, sem_ch5.adb, - sem_prag.adb, sinfo.adb, sinfo.ads, snames.ads-tmpl, - doc/gnat_rm/implementation_defined_pragmas.rst: Remove - experimental support for OpenACC. - * gcc-interface/misc.c, gcc-interface/trans.c, - gcc-interface/lang.opt: Ditto. - * gnat_rm.texi: Regenerate. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * checks.adb (Generate_Discriminant_Check): Remove obsolete - comment. - -2020-06-04 Gary Dismukes <dismukes@adacore.com> - - * par-ch3.adb (P_Identifier_Declarations): Add parsing of object - renamings that have neither a subtype_mark nor an - access_definition. Issue an error if the version is earlier than - Ada_2020, and suggest using -gnatX. - * sem_ch8.adb (Analyze_Object_Renaming): Handle - object_renaming_declarations that don't have an explicit - subtype. Errors are issued when the name is inappropriate or - ambiguous, and otherwise the Etype of the renaming entity is set - from the Etype of the renamed object. - * sem_util.adb (Has_Null_Exclusion): Allow for the case of no - subtype given in an N_Object_Renaming_Declaration. - * sprint.adb (Sprint_Node_Actual): Handle printing of - N_Object_Renaming_Declarations that are specified without an - explicit subtype. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * sinfo.ads (N_Delta_Aggregate): Document Etype field. - (N_Case_Expression): Likewise. - (Is_Syntactic_Field) <N_Quantified_Expression>: Adjust. - <N_Case_Expression>: Likewise. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * adaint.c: Avoid redefining IS_DIR_SEPARATOR macro. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * sem.adb (Walk_Library_Items): Defer processing of main spec - after all other specs and before processing bodies. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * bindgen.adb (Gen_Adafinal): Adafinal is convention Ada, not C. - -2020-06-04 Ed Schonberg <schonberg@adacore.com> - - * sinput.adb (Sloc_Range): Ignore node in the tree if it appears - in a unit different from that of the node whose Sloc range we - are computing. This is necessary when computing the source range - of a subprogram body whose declaration includes a pre- or - postcondition, because declaration and body may appear in - different units, and the expanded code for the body includes - copies of the contract code. - -2020-06-04 Alexandre Oliva <oliva@adacore.com> - - * switch.adb (Is_Internal_GCC_Switch): Recognize dumpdir and - dumpbase-ext. Mark auxbase and auxbase-strip for removal. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * sem_attr.adb (Resolve_Attribute) <Access>: Do not generate - the secondary message about a missing pragma if the convention - of the prefix is Intrinsic. - * sem_ch12.adb (Instantiate_Formal_Subprogram): Only set the - Convention and the Is_Inlined flag on a null procedure. - -2020-06-04 Justin Squirek <squirek@adacore.com> - - * sem_ch6.adb (Check_Return_Obj_Accessibility): Change to - Check_Return_Construct_Accessibility to better reflect its - purpose. Add loop to properly obtain the object declaration - from an expanded extended return statement and add calls to get - the original node for associated values. Also, avoid checks when - the return statement being examined comes from an internally - generated function. - -2020-06-04 Dmitriy Anisimkov <anisimko@adacore.com> - - * adaint.c (__gnat_is_absolute_path): Check for directory - separator after drive and colon. - (IS_DIR_SEPARATOR): Define new inline substitution. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * checks.ads: Update documentation about range checks and fix - minor other things. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch3.adb (Array_Type_Declaration): Apply special handling - of private index types to generic packages and restrict it to - index types defined in the current scope. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-exextr.adb (Global_Unhandled_Action): New global - variable. - (Notify_Exception): Take into account Global_Unhandled_Action - and fix latent race condition. - (Exception_Action): Mark Favor_Top_Level so that variables can - be atomic. - (Global_Action): Mark atomic to remove the need for a lock. - * libgnat/g-excact.ads, libgnat/g-excact.adb - (Register_Global_Unhandled_Action): New procedure. - (Register_Global_Action): Remove lock. - * libgnat/s-stalib.ads (Raise_Action): Mark Favor_Top_Level to - be compatible with Exception_Action. - * sem_warn.adb (Warn_On_Unreferenced_Entity): Fix logic wrt - Volatile entities and entities with an address clause: the code - did not match the comment/intent. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * comperr.adb (Compiler_Abort): Update URL and bug report - instructions. - -2020-06-04 Steve Baird <baird@adacore.com> - - * libgnat/s-imgrea.ads: Declare a named number - Max_Real_Image_Length with value 5200. Provide a comment - explaining why this value was chosen. - * libgnat/s-imgrea.adb (Set_Image_Real): Increase the upper - bound of the local String variable Digs to - Max_Real_Image_Length. - * libgnat/a-tiflau.adb (Put): Increase the upper bound of the - local String variable Buf to Max_Real_Image_Length. - (Puts): Increase the upper bound of the local String variable - Buf to Max_Real_Image_Length. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * libgnarl/a-dynpri.adb, libgnarl/a-taside.adb, - libgnarl/a-taster.adb, libgnarl/s-interr.adb, - libgnarl/s-interr__sigaction.adb, libgnarl/s-taasde.adb, - libgnarl/s-taenca.adb, libgnarl/s-taenca.ads, - libgnarl/s-taprop.ads, libgnarl/s-taprop__hpux-dce.adb, - libgnarl/s-taprop__linux.adb, libgnarl/s-taprop__mingw.adb, - libgnarl/s-taprop__posix.adb, libgnarl/s-taprop__qnx.adb, - libgnarl/s-taprop__solaris.adb, libgnarl/s-taprop__vxworks.adb, - libgnarl/s-tarest.adb, libgnarl/s-tasini.adb, - libgnarl/s-tasque.adb, libgnarl/s-tasque.ads, - libgnarl/s-tasren.adb, libgnarl/s-tasren.ads, - libgnarl/s-tassta.adb, libgnarl/s-tasuti.adb, - libgnarl/s-tasuti.ads, libgnarl/s-tpoben.adb, - libgnarl/s-tpobop.adb, libgnarl/s-tpopmo.adb, - libgnarl/s-tposen.adb, libgnat/s-parame.ads, - libgnat/s-parame__ae653.ads, libgnat/s-parame__hpux.ads, - libgnat/s-parame__vxworks.ads: Remove references to Single_Lock - and Global_Lock. - -2020-06-04 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-atopar.adb, libgnat/s-atopex.adb: Use Object_Size - instead of Size, otherwise many derived types will be rejected - (e.g. a type with a 14 bits 'Size and a 16 bits 'Object_Size). - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Copy_Generic_Node): Add special handling for a - conversion between access types. - -2020-06-04 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Check_Generic_Actuals): Also restore the proper - views of the actuals of the parent instances if the formals are - used as actuals of the children. - (Instantiate_Type): Add comment. - -2020-06-04 Gary Dismukes <dismukes@adacore.com> - - * sem_ch12.adb: Minor editorial fixes. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Denotes_Previous_Actual): Delete. - (Check_Generic_Actuals): Do not special case array types whose - component type denotes a previous actual. Do not special case - access types whose base type is private. - (Check_Private_View): Remove code dealing with secondary types. - Do not switch the views of an array because of its component. - (Copy_Generic_Node): Add special handling for a comparison - operator on array types. - (Instantiate_Type): Do not special case access types whose - designated type is private. - (Set_Global_Type): Do not special case array types whose - component type is private. - -2020-06-03 Justin Squirek <squirek@adacore.com> - - * sem_ch10.adb (Process_Body_Clauses): Add loop to interate - through all prefixes in a use_type clause so that all packages - in the expanded name get examined for effectiveness. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch12.adb (Check_Private_View): Clean up implementation of - second main case, when the generic sees the private declaration. - -2020-06-03 Arnaud Charlet <charlet@adacore.com> - - * libgnat/a-nbnbin.ads: Minor reformatting. - * libgnat/a-nbnbre.ads, libgnat/a-nbnbre.adb (Is_Valid): Add - convention Intrinsic. Add detection of uninitialized big reals. - -2020-06-03 Arnaud Charlet <charlet@adacore.com> - - * sem_util.ads, sem_util.adb (Side_Effect_Free_Statements, - Side_Effect_Free_Loop): New functions. - (Has_Non_Null_Statements): Consider N_Call_Marker as a null - statement. - * sem_ch5.adb (Analyze_Loop_Parameter_Specification): Call - Set_Is_Null_Loop even inside a generic instantiation. - (Analyze_Loop_Statement): Mark for removal loops with no side - effects. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * opt.ads (Allow_Integer_Address): Fix typo in comment. - * stand.ads (Standard_Address): New entity. - * cstand.adb (Create_Standard): Create it. - * sem_ch4.adb (Operator_Check): Convert the operands of an - operation with addresses and integers to Standard_Address - if pragma Allow_Integer_Address is in effect. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/s-atopar.adb (Atomic_Fetch_And_Add): Make use of an - equivalent static expression. - (Atomic_Fetch_And_Subtract): Likewise. - (Is_Lock_Free): Likewise. - * libgnat/s-atopex.adb (Atomic_Exchange): Likewise. - (Atomic_Compare_And_Exchange): Likewise. - (Is_Lock_Free): Likewise. - -2020-06-03 Vadim Godunko <godunko@adacore.com> - - * libgnat/s-parame.ads, libgnat/s-parame__ae653.ads, - libgnat/s-parame__hpux.ads: Fix typos. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * exp_util.adb (Remove_Side_Effects): For a type conversion, do - not remove the side effects of the expression only if it is of - universal integer type. - -2020-06-03 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-aotase.ads, libgnat/s-atoope.ads, - libgnat/s-atopar.ads, libgnat/s-atopex.ads: Update header. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_N_Unchecked_Type_Conversion): Also fold the - conversion for literals of enumeration types. - -2020-06-03 Yannick Moy <moy@adacore.com> - - * rtsfind.adb (Load_RTU): Correctly set/reset global variable to - ignore SPARK_Mode in instances around loading. - * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Accept Off - without prior On. - * sem_ch7.adb (Analyze_Package_Body_Helper): Likewise. - * sem_prag.adb (Analyze_Pragma): Always take into account - SPARK_Mode Off. - -2020-06-03 Arnaud Charlet <charlet@adacore.com> - - * frontend.adb (Frontend): Call (dummy for now) tree checker. - * debug.adb: Reserve -gnatd_V for the tree checker. - * vast.ads, vast.adb: New files. - * gcc-interface/Make-lang.in: Add vast.o. - -2020-06-03 Justin Squirek <squirek@adacore.com> - - * libgnat/a-cborse.adb, libgnat/a-cihase.adb, - libgnat/a-ciorse.adb, libgnat/a-coorse.adb: Modified to use - 'Unrestricted_Access in certain cases where static accessibility - errors were triggered. - * exp_ch6.adb (Expand_Simple_Return_Statement): Add generation - of dynamic accessibility checks as determined by - Is_Special_Aliased_Formal_Access. - * sem_attr.adb (Resolve_Attribute): Add call to - Is_Special_Aliased_Formal_Access to avoid performing static - checks where dynamic ones are required. - * sem_ch6.adb (Check_Return_Obj_Accessibility): Handle renamed - objects within component associations requiring special - accessibility checks. - * sem_util.adb, sem_util.ads (Is_Special_Aliased_Formal_Access): - Created to detect the special case where an aliased formal is - being compared against the level of an anonymous access return - object. - (Object_Access_Level): Remove incorrect condition leading to - overly permissive accessibility levels being returned on - explicitly aliased parameters. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (Enum_Pos_To_Rep): Adjust description. - * exp_attr.adb (Expand_N_Attribute_Reference) <Pred>: - Reimplement in the case of an enumeration type with non-standard - but contiguous representation. - <Succ>: Likewise. - <Val>: Likewise. - * exp_ch3.adb (Expand_Freeze_Enumeration_Type): Count the - literals in the first loop. If the representation is - contiguous, just build the index type of the array type and set - Enum_Pos_To_Rep to it. - -2020-06-03 Gary Dismukes <dismukes@adacore.com> - - * exp_attr.adb (Expand_Loop_Entry_Attribute): Revise loop that - resets the scopes of entities associated with Loop_Id to the - scope of the new function, so the resetting is not restricted to - itypes, but excludes loop parameters and the function entity - itself. However, this fix is believed to be incomplete and a ??? - comment is added to indicate that. - -2020-06-03 Bob Duff <duff@adacore.com> - - * libgnat/s-regexp.ads: Fix comment - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference) <Enum_Rep>: - In the case of an enumeration type, do an intermediate - conversion to a small integer type. Remove useless stuff. - <Finalization_Size>: Do not hardcode Universal_Integer and - fix a type mismatch in the assignment to the variable. - <Max_Size_In_Storage_Elements>: Likewise. - <From_Any>: Do not redefine the Ptyp local variable. - <To_Any>: Likewise. - <TypeCode>: Likewise. - <Pos>: Small tweaks. - <Val>: For an enumeration type with standard representation, - apply the range check to the expression of a convertion to - Universal_Integer, if any. For an integer type, expand to - a mere conversion. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * libgnat/s-rannum.adb (Random_Discrete): In the 32-bit case, - use the same linear implementation as in the 64-bit case when - the type has a contiguous representation. - -2020-06-03 Gary Dismukes <dismukes@adacore.com> - - * sem_util.adb (Build_Class_Wide_Clone_Decl): Call - Set_Debug_Info_Needed to set the Needs_Debug_Info flag on - Clone_Id if the flag is set on Spec_Id. - -2020-06-03 Yannick Moy <moy@adacore.com> - - * inline.adb (Expand_Inlined_Call): Do not suppress checks on - inlined code in GNATprove mode. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * einfo.ads (Has_Contiguous_Rep): Fix typo in comment. - -2020-06-03 Piotr Trojanek <trojanek@adacore.com> - - * checks.adb, einfo.adb, exp_aggr.adb, exp_ch4.adb, exp_ch6.adb, - exp_unst.adb, exp_util.adb, freeze.adb, inline.adb, repinfo.adb, - sem_aggr.adb, sem_attr.adb, sem_aux.adb, sem_ch13.adb, - sem_ch3.adb, sem_ch4.adb, sem_ch8.adb, sem_elab.adb, - sem_eval.adb, sem_prag.adb, sem_res.adb, sem_smem.adb, - sem_util.adb, treepr.adb: Replace uses of Next_ functions with - corresponding procedures. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Attribute_Valid): Use Standard_Long_Long_Integer - in lieu of Universal_Integer as large integer type. - * exp_ch3.adb (Expand_Freeze_Enumeration_Type): Likewise. - -2020-06-03 Arnaud Charlet <charlet@adacore.com> - - * libgnat/s-auxdec.ads (Address_Int): New. - -2020-06-03 Arnaud Charlet <charlet@adacore.com> - - * aspects.adb, aspects.ads, atree.adb, atree.ads, elists.adb, - elists.ads, fname.adb, fname.ads, gnat1drv.adb, lib.adb, - lib.ads, namet.adb, namet.ads, nlists.adb, nlists.ads, opt.adb, - opt.ads, osint-c.adb, osint-c.ads, repinfo.adb, repinfo.ads, - sem_aux.adb, sem_aux.ads, sinput.adb, sinput.ads, stand.ads, - stringt.adb, stringt.ads, switch-c.adb, table.adb, table.ads, - uintp.adb, uintp.ads, urealp.adb, urealp.ads (Tree_Read, - Tree_Write): Remove generation of ASIS trees. - * doc/gnat_ugn/building_executable_programs_with_gnat.rst: - Remove -gnatt and -gnatct documentation. - * gnat_ugn.texi: Regenerate. - * tree_in.ads, tree_in.adb, tree_io.ads, tree_io.adb, - tree_gen.ads, tree_gen.adb, stand.adb: Remove. - * gcc-interface/Makefile.in, gcc-interface/Make-lang.in: Remove - references to tree_gen.o tree_in.o tree_io.o. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * opt.ads (Disable_FE_Inline): Move around. - (Disable_FE_Inline_Always): Likewise. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * checks.adb (Is_Single_Attribute_Reference): New predicate. - (Generate_Range_Check): Do not force the evaluation if the - node is a single attribute reference. - * exp_util.adb (Side_Effect_Free_Attribute): New predicate. - (Side_Effect_Free) <N_Attribute_Reference>: Call it. - (Remove_Side_Effects): Remove the side effects of the prefix - for an attribute reference whose prefix is not a name. - -2020-06-03 Arnaud Charlet <charlet@adacore.com> - - * switch-c.adb (Scan_Front_End_Switches): Remove processing of - -gnatt. - * usage.adb (Usage): Remove mention of -gnatt. - -2020-06-03 Eric Botcazou <ebotcazou@adacore.com> - - * sinfo.ads: Minor tweaks in commentary. - -2020-06-02 Alexandre Oliva <oliva@adacore.com> - - * lib.ads (Compilation_Switches): Remove -auxbase from - comments. - * switch.ads (Is_Internal_GCC_Switch): Likewise. - -2020-06-02 Arnaud Charlet <charlet@adacore.com> - - * atree.ads, checks.adb, contracts.adb, debug.adb, einfo.ads, - exp_ch3.adb, exp_util.adb, expander.ads, expander.adb, - frontend.adb, gnat1drv.adb, itypes.adb, lib.ads, namet.ads, - opt.adb, opt.ads, par-prag.adb, repinfo.ads, sem_aggr.adb, - sem_aux.ads, sem_case.ads, sem_ch10.adb, sem_ch12.adb, - sem_ch13.adb, sem_ch3.adb, sem_ch4.adb, sem_ch6.adb, - sem_dim.adb, sem_elab.adb, sem_prag.adb, sem_prag.ads, - sem_res.adb, sem_type.adb, sem_util.adb, sinfo.ads, stand.ads, - tree_io.ads: Remove references to ASIS_Mode. - -2020-06-02 Javier Miranda <miranda@adacore.com> - - * exp_ch4.adb (Generate_Temporary): New subprogram of - Discrete_Range_Check that generates a temporary to facilitate - the C backend the code generation of the unchecked conversion - since the size of the source type may differ from the size of - the target type. - -2020-06-02 Arnaud Charlet <charlet@adacore.com> - - * ada_get_targ.adb: Bump copyright year. - * adabkend.adb: Likewise. - * adabkend.ads: Likewise. - * adadecode.c: Likewise. - * adadecode.h: Likewise. - * adaint.c: Likewise. - * adaint.h: Likewise. - * affinity.c: Likewise. - * ali-util.adb: Likewise. - * ali-util.ads: Likewise. - * ali.adb: Likewise. - * ali.ads: Likewise. - * alloc.ads: Likewise. - * argv-lynxos178-raven-cert.c: Likewise. - * argv.c: Likewise. - * aspects.adb: Likewise. - * aspects.ads: Likewise. - * atree.adb: Likewise. - * atree.ads: Likewise. - * atree.h: Likewise. - * aux-io.c: Likewise. - * back_end.adb: Likewise. - * back_end.ads: Likewise. - * bcheck.adb: Likewise. - * bcheck.ads: Likewise. - * binde.adb: Likewise. - * binde.ads: Likewise. - * binderr.adb: Likewise. - * binderr.ads: Likewise. - * bindgen.adb: Likewise. - * bindgen.ads: Likewise. - * bindo-augmentors.adb: Likewise. - * bindo-augmentors.ads: Likewise. - * bindo-builders.adb: Likewise. - * bindo-builders.ads: Likewise. - * bindo-diagnostics.adb: Likewise. - * bindo-diagnostics.ads: Likewise. - * bindo-elaborators.adb: Likewise. - * bindo-elaborators.ads: Likewise. - * bindo-graphs.adb: Likewise. - * bindo-graphs.ads: Likewise. - * bindo-units.adb: Likewise. - * bindo-units.ads: Likewise. - * bindo-validators.adb: Likewise. - * bindo-validators.ads: Likewise. - * bindo-writers.adb: Likewise. - * bindo-writers.ads: Likewise. - * bindo.adb: Likewise. - * bindo.ads: Likewise. - * bindusg.adb: Likewise. - * bindusg.ads: Likewise. - * butil.adb: Likewise. - * butil.ads: Likewise. - * cal.c: Likewise. - * casing.adb: Likewise. - * casing.ads: Likewise. - * ceinfo.adb: Likewise. - * checks.adb: Likewise. - * checks.ads: Likewise. - * cio.c: Likewise. - * clean.adb: Likewise. - * clean.ads: Likewise. - * comperr.adb: Likewise. - * comperr.ads: Likewise. - * contracts.adb: Likewise. - * contracts.ads: Likewise. - * csets.adb: Likewise. - * csets.ads: Likewise. - * csinfo.adb: Likewise. - * cstand.adb: Likewise. - * cstand.ads: Likewise. - * cstreams.c: Likewise. - * ctrl_c.c: Likewise. - * debug.adb: Likewise. - * debug.ads: Likewise. - * debug_a.adb: Likewise. - * debug_a.ads: Likewise. - * einfo.adb: Likewise. - * einfo.ads: Likewise. - * elists.adb: Likewise. - * elists.ads: Likewise. - * elists.h: Likewise. - * env.c: Likewise. - * env.h: Likewise. - * err_vars.ads: Likewise. - * errno.c: Likewise. - * errout.adb: Likewise. - * errout.ads: Likewise. - * erroutc.adb: Likewise. - * erroutc.ads: Likewise. - * errutil.adb: Likewise. - * errutil.ads: Likewise. - * eval_fat.adb: Likewise. - * eval_fat.ads: Likewise. - * exit.c: Likewise. - * exp_aggr.adb: Likewise. - * exp_aggr.ads: Likewise. - * exp_atag.adb: Likewise. - * exp_atag.ads: Likewise. - * exp_attr.adb: Likewise. - * exp_attr.ads: Likewise. - * exp_cg.adb: Likewise. - * exp_cg.ads: Likewise. - * exp_ch10.ads: Likewise. - * exp_ch11.adb: Likewise. - * exp_ch11.ads: Likewise. - * exp_ch12.adb: Likewise. - * exp_ch12.ads: Likewise. - * exp_ch13.adb: Likewise. - * exp_ch13.ads: Likewise. - * exp_ch2.adb: Likewise. - * exp_ch2.ads: Likewise. - * exp_ch3.adb: Likewise. - * exp_ch3.ads: Likewise. - * exp_ch4.adb: Likewise. - * exp_ch4.ads: Likewise. - * exp_ch5.adb: Likewise. - * exp_ch5.ads: Likewise. - * exp_ch6.adb: Likewise. - * exp_ch6.ads: Likewise. - * exp_ch7.adb: Likewise. - * exp_ch7.ads: Likewise. - * exp_ch8.adb: Likewise. - * exp_ch8.ads: Likewise. - * exp_ch9.adb: Likewise. - * exp_ch9.ads: Likewise. - * exp_code.adb: Likewise. - * exp_code.ads: Likewise. - * exp_dbug.adb: Likewise. - * exp_dbug.ads: Likewise. - * exp_disp.adb: Likewise. - * exp_disp.ads: Likewise. - * exp_dist.adb: Likewise. - * exp_dist.ads: Likewise. - * exp_fixd.adb: Likewise. - * exp_fixd.ads: Likewise. - * exp_imgv.adb: Likewise. - * exp_imgv.ads: Likewise. - * exp_intr.adb: Likewise. - * exp_intr.ads: Likewise. - * exp_pakd.adb: Likewise. - * exp_pakd.ads: Likewise. - * exp_prag.adb: Likewise. - * exp_prag.ads: Likewise. - * exp_sel.adb: Likewise. - * exp_sel.ads: Likewise. - * exp_smem.adb: Likewise. - * exp_smem.ads: Likewise. - * exp_spark.adb: Likewise. - * exp_spark.ads: Likewise. - * exp_strm.adb: Likewise. - * exp_strm.ads: Likewise. - * exp_tss.adb: Likewise. - * exp_tss.ads: Likewise. - * exp_unst.adb: Likewise. - * exp_unst.ads: Likewise. - * exp_util.adb: Likewise. - * exp_util.ads: Likewise. - * expander.adb: Likewise. - * expander.ads: Likewise. - * expect.c: Likewise. - * fe.h: Likewise. - * final.c: Likewise. - * fmap.adb: Likewise. - * fmap.ads: Likewise. - * fname-sf.adb: Likewise. - * fname-sf.ads: Likewise. - * fname-uf.adb: Likewise. - * fname-uf.ads: Likewise. - * fname.adb: Likewise. - * fname.ads: Likewise. - * freeze.adb: Likewise. - * freeze.ads: Likewise. - * frontend.adb: Likewise. - * frontend.ads: Likewise. - * get_scos.adb: Likewise. - * get_scos.ads: Likewise. - * get_targ.adb: Likewise. - * get_targ.ads: Likewise. - * ghost.adb: Likewise. - * ghost.ads: Likewise. - * gnat1drv.adb: Likewise. - * gnat1drv.ads: Likewise. - * gnatbind.adb: Likewise. - * gnatbind.ads: Likewise. - * gnatchop.adb: Likewise. - * gnatclean.adb: Likewise. - * gnatcmd.adb: Likewise. - * gnatcmd.ads: Likewise. - * gnatdll.adb: Likewise. - * gnatfind.adb: Likewise. - * gnatkr.adb: Likewise. - * gnatkr.ads: Likewise. - * gnatlink.adb: Likewise. - * gnatlink.ads: Likewise. - * gnatls.adb: Likewise. - * gnatls.ads: Likewise. - * gnatmake.adb: Likewise. - * gnatmake.ads: Likewise. - * gnatname.adb: Likewise. - * gnatname.ads: Likewise. - * gnatprep.adb: Likewise. - * gnatprep.ads: Likewise. - * gnatvsn.adb: Likewise. - * gnatxref.adb: Likewise. - * gprep.adb: Likewise. - * gprep.ads: Likewise. - * gsocket.h: Likewise. - * hostparm.ads: Likewise. - * impunit.adb: Likewise. - * impunit.ads: Likewise. - * indepsw-aix.adb: Likewise. - * indepsw-darwin.adb: Likewise. - * indepsw-gnu.adb: Likewise. - * indepsw.adb: Likewise. - * indepsw.ads: Likewise. - * init.c: Likewise. - * initialize.c: Likewise. - * inline.adb: Likewise. - * inline.ads: Likewise. - * itypes.adb: Likewise. - * itypes.ads: Likewise. - * krunch.adb: Likewise. - * krunch.ads: Likewise. - * layout.adb: Likewise. - * layout.ads: Likewise. - * lib-list.adb: Likewise. - * lib-load.adb: Likewise. - * lib-load.ads: Likewise. - * lib-sort.adb: Likewise. - * lib-util.adb: Likewise. - * lib-util.ads: Likewise. - * lib-writ.adb: Likewise. - * lib-writ.ads: Likewise. - * lib-xref-spark_specific.adb: Likewise. - * lib-xref.adb: Likewise. - * lib-xref.ads: Likewise. - * lib.adb: Likewise. - * lib.ads: Likewise. - * libgnarl/a-astaco.adb: Likewise. - * libgnarl/a-dispat.adb: Likewise. - * libgnarl/a-dynpri.adb: Likewise. - * libgnarl/a-etgrbu.ads: Likewise. - * libgnarl/a-exetim__darwin.adb: Likewise. - * libgnarl/a-exetim__default.ads: Likewise. - * libgnarl/a-exetim__mingw.adb: Likewise. - * libgnarl/a-exetim__mingw.ads: Likewise. - * libgnarl/a-exetim__posix.adb: Likewise. - * libgnarl/a-interr.adb: Likewise. - * libgnarl/a-interr.ads: Likewise. - * libgnarl/a-intnam.ads: Likewise. - * libgnarl/a-intnam__aix.ads: Likewise. - * libgnarl/a-intnam__darwin.ads: Likewise. - * libgnarl/a-intnam__dragonfly.ads: Likewise. - * libgnarl/a-intnam__dummy.ads: Likewise. - * libgnarl/a-intnam__freebsd.ads: Likewise. - * libgnarl/a-intnam__hpux.ads: Likewise. - * libgnarl/a-intnam__linux.ads: Likewise. - * libgnarl/a-intnam__lynxos.ads: Likewise. - * libgnarl/a-intnam__mingw.ads: Likewise. - * libgnarl/a-intnam__qnx.ads: Likewise. - * libgnarl/a-intnam__rtems.ads: Likewise. - * libgnarl/a-intnam__solaris.ads: Likewise. - * libgnarl/a-intnam__vxworks.ads: Likewise. - * libgnarl/a-reatim.adb: Likewise. - * libgnarl/a-reatim.ads: Likewise. - * libgnarl/a-retide.adb: Likewise. - * libgnarl/a-retide.ads: Likewise. - * libgnarl/a-rttiev.adb: Likewise. - * libgnarl/a-rttiev.ads: Likewise. - * libgnarl/a-synbar.adb: Likewise. - * libgnarl/a-synbar.ads: Likewise. - * libgnarl/a-synbar__posix.adb: Likewise. - * libgnarl/a-synbar__posix.ads: Likewise. - * libgnarl/a-sytaco.adb: Likewise. - * libgnarl/a-sytaco.ads: Likewise. - * libgnarl/a-tasatt.adb: Likewise. - * libgnarl/a-tasatt.ads: Likewise. - * libgnarl/a-taside.adb: Likewise. - * libgnarl/a-taside.ads: Likewise. - * libgnarl/a-taster.adb: Likewise. - * libgnarl/g-boubuf.adb: Likewise. - * libgnarl/g-boubuf.ads: Likewise. - * libgnarl/g-boumai.ads: Likewise. - * libgnarl/g-semaph.adb: Likewise. - * libgnarl/g-semaph.ads: Likewise. - * libgnarl/g-signal.adb: Likewise. - * libgnarl/g-signal.ads: Likewise. - * libgnarl/g-tastus.ads: Likewise. - * libgnarl/g-thread.adb: Likewise. - * libgnarl/g-thread.ads: Likewise. - * libgnarl/i-vxinco.adb: Likewise. - * libgnarl/i-vxinco.ads: Likewise. - * libgnarl/s-inmaop.ads: Likewise. - * libgnarl/s-inmaop__dummy.adb: Likewise. - * libgnarl/s-inmaop__posix.adb: Likewise. - * libgnarl/s-inmaop__vxworks.adb: Likewise. - * libgnarl/s-interr.adb: Likewise. - * libgnarl/s-interr.ads: Likewise. - * libgnarl/s-interr__dummy.adb: Likewise. - * libgnarl/s-interr__hwint.adb: Likewise. - * libgnarl/s-interr__sigaction.adb: Likewise. - * libgnarl/s-interr__vxworks.adb: Likewise. - * libgnarl/s-intman.ads: Likewise. - * libgnarl/s-intman__android.adb: Likewise. - * libgnarl/s-intman__dummy.adb: Likewise. - * libgnarl/s-intman__lynxos.adb: Likewise. - * libgnarl/s-intman__mingw.adb: Likewise. - * libgnarl/s-intman__posix.adb: Likewise. - * libgnarl/s-intman__qnx.adb: Likewise. - * libgnarl/s-intman__solaris.adb: Likewise. - * libgnarl/s-intman__susv3.adb: Likewise. - * libgnarl/s-intman__vxworks.adb: Likewise. - * libgnarl/s-intman__vxworks.ads: Likewise. - * libgnarl/s-linux.ads: Likewise. - * libgnarl/s-linux__alpha.ads: Likewise. - * libgnarl/s-linux__android.ads: Likewise. - * libgnarl/s-linux__hppa.ads: Likewise. - * libgnarl/s-linux__mips.ads: Likewise. - * libgnarl/s-linux__riscv.ads: Likewise. - * libgnarl/s-linux__sparc.ads: Likewise. - * libgnarl/s-linux__x32.ads: Likewise. - * libgnarl/s-mudido.adb: Likewise. - * libgnarl/s-mudido__affinity.adb: Likewise. - * libgnarl/s-osinte__aix.adb: Likewise. - * libgnarl/s-osinte__aix.ads: Likewise. - * libgnarl/s-osinte__android.adb: Likewise. - * libgnarl/s-osinte__android.ads: Likewise. - * libgnarl/s-osinte__darwin.adb: Likewise. - * libgnarl/s-osinte__darwin.ads: Likewise. - * libgnarl/s-osinte__dragonfly.adb: Likewise. - * libgnarl/s-osinte__dragonfly.ads: Likewise. - * libgnarl/s-osinte__dummy.ads: Likewise. - * libgnarl/s-osinte__freebsd.adb: Likewise. - * libgnarl/s-osinte__freebsd.ads: Likewise. - * libgnarl/s-osinte__gnu.adb: Likewise. - * libgnarl/s-osinte__gnu.ads: Likewise. - * libgnarl/s-osinte__hpux-dce.adb: Likewise. - * libgnarl/s-osinte__hpux-dce.ads: Likewise. - * libgnarl/s-osinte__hpux.ads: Likewise. - * libgnarl/s-osinte__kfreebsd-gnu.ads: Likewise. - * libgnarl/s-osinte__linux.ads: Likewise. - * libgnarl/s-osinte__lynxos178.adb: Likewise. - * libgnarl/s-osinte__lynxos178e.ads: Likewise. - * libgnarl/s-osinte__mingw.ads: Likewise. - * libgnarl/s-osinte__posix.adb: Likewise. - * libgnarl/s-osinte__qnx.adb: Likewise. - * libgnarl/s-osinte__qnx.ads: Likewise. - * libgnarl/s-osinte__rtems.adb: Likewise. - * libgnarl/s-osinte__rtems.ads: Likewise. - * libgnarl/s-osinte__solaris.adb: Likewise. - * libgnarl/s-osinte__solaris.ads: Likewise. - * libgnarl/s-osinte__vxworks.adb: Likewise. - * libgnarl/s-osinte__vxworks.ads: Likewise. - * libgnarl/s-osinte__x32.adb: Likewise. - * libgnarl/s-proinf.adb: Likewise. - * libgnarl/s-proinf.ads: Likewise. - * libgnarl/s-qnx.ads: Likewise. - * libgnarl/s-solita.adb: Likewise. - * libgnarl/s-solita.ads: Likewise. - * libgnarl/s-stusta.adb: Likewise. - * libgnarl/s-stusta.ads: Likewise. - * libgnarl/s-taasde.adb: Likewise. - * libgnarl/s-taasde.ads: Likewise. - * libgnarl/s-tadeca.adb: Likewise. - * libgnarl/s-tadeca.ads: Likewise. - * libgnarl/s-tadert.adb: Likewise. - * libgnarl/s-tadert.ads: Likewise. - * libgnarl/s-taenca.adb: Likewise. - * libgnarl/s-taenca.ads: Likewise. - * libgnarl/s-taprob.adb: Likewise. - * libgnarl/s-taprob.ads: Likewise. - * libgnarl/s-taprop.ads: Likewise. - * libgnarl/s-taprop__dummy.adb: Likewise. - * libgnarl/s-taprop__hpux-dce.adb: Likewise. - * libgnarl/s-taprop__linux.adb: Likewise. - * libgnarl/s-taprop__mingw.adb: Likewise. - * libgnarl/s-taprop__posix.adb: Likewise. - * libgnarl/s-taprop__qnx.adb: Likewise. - * libgnarl/s-taprop__solaris.adb: Likewise. - * libgnarl/s-taprop__vxworks.adb: Likewise. - * libgnarl/s-tarest.adb: Likewise. - * libgnarl/s-tarest.ads: Likewise. - * libgnarl/s-tasdeb.adb: Likewise. - * libgnarl/s-tasdeb.ads: Likewise. - * libgnarl/s-tasinf.adb: Likewise. - * libgnarl/s-tasinf.ads: Likewise. - * libgnarl/s-tasinf__linux.adb: Likewise. - * libgnarl/s-tasinf__linux.ads: Likewise. - * libgnarl/s-tasinf__mingw.adb: Likewise. - * libgnarl/s-tasinf__mingw.ads: Likewise. - * libgnarl/s-tasinf__solaris.adb: Likewise. - * libgnarl/s-tasinf__solaris.ads: Likewise. - * libgnarl/s-tasinf__vxworks.ads: Likewise. - * libgnarl/s-tasini.adb: Likewise. - * libgnarl/s-tasini.ads: Likewise. - * libgnarl/s-taskin.adb: Likewise. - * libgnarl/s-taskin.ads: Likewise. - * libgnarl/s-taspri__dummy.ads: Likewise. - * libgnarl/s-taspri__hpux-dce.ads: Likewise. - * libgnarl/s-taspri__lynxos.ads: Likewise. - * libgnarl/s-taspri__mingw.ads: Likewise. - * libgnarl/s-taspri__posix-noaltstack.ads: Likewise. - * libgnarl/s-taspri__posix.ads: Likewise. - * libgnarl/s-taspri__solaris.ads: Likewise. - * libgnarl/s-taspri__vxworks.ads: Likewise. - * libgnarl/s-tasque.adb: Likewise. - * libgnarl/s-tasque.ads: Likewise. - * libgnarl/s-tasren.adb: Likewise. - * libgnarl/s-tasren.ads: Likewise. - * libgnarl/s-tasres.ads: Likewise. - * libgnarl/s-tassta.adb: Likewise. - * libgnarl/s-tassta.ads: Likewise. - * libgnarl/s-tasuti.adb: Likewise. - * libgnarl/s-tasuti.ads: Likewise. - * libgnarl/s-tataat.adb: Likewise. - * libgnarl/s-tataat.ads: Likewise. - * libgnarl/s-tpinop.adb: Likewise. - * libgnarl/s-tpinop.ads: Likewise. - * libgnarl/s-tpoaal.adb: Likewise. - * libgnarl/s-tpoben.adb: Likewise. - * libgnarl/s-tpoben.ads: Likewise. - * libgnarl/s-tpobmu.adb: Likewise. - * libgnarl/s-tpobmu.ads: Likewise. - * libgnarl/s-tpobop.adb: Likewise. - * libgnarl/s-tpobop.ads: Likewise. - * libgnarl/s-tpopmo.adb: Likewise. - * libgnarl/s-tpopsp__posix-foreign.adb: Likewise. - * libgnarl/s-tpopsp__posix.adb: Likewise. - * libgnarl/s-tpopsp__solaris.adb: Likewise. - * libgnarl/s-tpopsp__tls.adb: Likewise. - * libgnarl/s-tpopsp__vxworks-rtp.adb: Likewise. - * libgnarl/s-tpopsp__vxworks-tls.adb: Likewise. - * libgnarl/s-tpopsp__vxworks.adb: Likewise. - * libgnarl/s-tporft.adb: Likewise. - * libgnarl/s-tposen.adb: Likewise. - * libgnarl/s-tposen.ads: Likewise. - * libgnarl/s-vxwext.adb: Likewise. - * libgnarl/s-vxwext.ads: Likewise. - * libgnarl/s-vxwext__kernel-smp.adb: Likewise. - * libgnarl/s-vxwext__kernel.adb: Likewise. - * libgnarl/s-vxwext__kernel.ads: Likewise. - * libgnarl/s-vxwext__noints.adb: Likewise. - * libgnarl/s-vxwext__rtp-smp.adb: Likewise. - * libgnarl/s-vxwext__rtp.adb: Likewise. - * libgnarl/s-vxwext__rtp.ads: Likewise. - * libgnarl/s-vxwext__vthreads.ads: Likewise. - * libgnarl/s-vxwork__aarch64.ads: Likewise. - * libgnarl/s-vxwork__arm.ads: Likewise. - * libgnarl/s-vxwork__ppc.ads: Likewise. - * libgnarl/s-vxwork__x86.ads: Likewise. - * libgnarl/thread.c: Likewise. - * libgnat/a-assert.adb: Likewise. - * libgnat/a-assert.ads: Likewise. - * libgnat/a-btgbso.adb: Likewise. - * libgnat/a-btgbso.ads: Likewise. - * libgnat/a-calari.adb: Likewise. - * libgnat/a-calari.ads: Likewise. - * libgnat/a-calcon.adb: Likewise. - * libgnat/a-calcon.ads: Likewise. - * libgnat/a-caldel.adb: Likewise. - * libgnat/a-caldel.ads: Likewise. - * libgnat/a-calend.adb: Likewise. - * libgnat/a-calend.ads: Likewise. - * libgnat/a-calfor.adb: Likewise. - * libgnat/a-calfor.ads: Likewise. - * libgnat/a-catizo.adb: Likewise. - * libgnat/a-cbdlli.adb: Likewise. - * libgnat/a-cbdlli.ads: Likewise. - * libgnat/a-cbhama.adb: Likewise. - * libgnat/a-cbhama.ads: Likewise. - * libgnat/a-cbhase.adb: Likewise. - * libgnat/a-cbhase.ads: Likewise. - * libgnat/a-cbmutr.adb: Likewise. - * libgnat/a-cbmutr.ads: Likewise. - * libgnat/a-cborma.adb: Likewise. - * libgnat/a-cborma.ads: Likewise. - * libgnat/a-cborse.adb: Likewise. - * libgnat/a-cborse.ads: Likewise. - * libgnat/a-cbprqu.adb: Likewise. - * libgnat/a-cbprqu.ads: Likewise. - * libgnat/a-cbsyqu.adb: Likewise. - * libgnat/a-cbsyqu.ads: Likewise. - * libgnat/a-cdlili.adb: Likewise. - * libgnat/a-cdlili.ads: Likewise. - * libgnat/a-cfdlli.adb: Likewise. - * libgnat/a-cfdlli.ads: Likewise. - * libgnat/a-cfhama.adb: Likewise. - * libgnat/a-cfhama.ads: Likewise. - * libgnat/a-cfhase.adb: Likewise. - * libgnat/a-cfhase.ads: Likewise. - * libgnat/a-cfinve.adb: Likewise. - * libgnat/a-cfinve.ads: Likewise. - * libgnat/a-cforma.adb: Likewise. - * libgnat/a-cforma.ads: Likewise. - * libgnat/a-cforse.adb: Likewise. - * libgnat/a-cforse.ads: Likewise. - * libgnat/a-cgaaso.adb: Likewise. - * libgnat/a-cgaaso.ads: Likewise. - * libgnat/a-cgarso.adb: Likewise. - * libgnat/a-cgcaso.adb: Likewise. - * libgnat/a-chacon.adb: Likewise. - * libgnat/a-chacon.ads: Likewise. - * libgnat/a-chahan.adb: Likewise. - * libgnat/a-chahan.ads: Likewise. - * libgnat/a-chlat9.ads: Likewise. - * libgnat/a-chtgbk.adb: Likewise. - * libgnat/a-chtgbk.ads: Likewise. - * libgnat/a-chtgbo.adb: Likewise. - * libgnat/a-chtgbo.ads: Likewise. - * libgnat/a-chtgke.adb: Likewise. - * libgnat/a-chtgke.ads: Likewise. - * libgnat/a-chtgop.adb: Likewise. - * libgnat/a-chtgop.ads: Likewise. - * libgnat/a-chzla1.ads: Likewise. - * libgnat/a-chzla9.ads: Likewise. - * libgnat/a-cidlli.adb: Likewise. - * libgnat/a-cidlli.ads: Likewise. - * libgnat/a-cihama.adb: Likewise. - * libgnat/a-cihama.ads: Likewise. - * libgnat/a-cihase.adb: Likewise. - * libgnat/a-cihase.ads: Likewise. - * libgnat/a-cimutr.adb: Likewise. - * libgnat/a-cimutr.ads: Likewise. - * libgnat/a-ciorma.adb: Likewise. - * libgnat/a-ciorma.ads: Likewise. - * libgnat/a-ciormu.adb: Likewise. - * libgnat/a-ciormu.ads: Likewise. - * libgnat/a-ciorse.adb: Likewise. - * libgnat/a-ciorse.ads: Likewise. - * libgnat/a-clrefi.adb: Likewise. - * libgnat/a-clrefi.ads: Likewise. - * libgnat/a-coboho.adb: Likewise. - * libgnat/a-coboho.ads: Likewise. - * libgnat/a-cobove.adb: Likewise. - * libgnat/a-cobove.ads: Likewise. - * libgnat/a-cofove.adb: Likewise. - * libgnat/a-cofove.ads: Likewise. - * libgnat/a-cofuba.adb: Likewise. - * libgnat/a-cofuba.ads: Likewise. - * libgnat/a-cofuma.adb: Likewise. - * libgnat/a-cofuma.ads: Likewise. - * libgnat/a-cofuse.adb: Likewise. - * libgnat/a-cofuse.ads: Likewise. - * libgnat/a-cofuve.adb: Likewise. - * libgnat/a-cofuve.ads: Likewise. - * libgnat/a-cogeso.adb: Likewise. - * libgnat/a-cogeso.ads: Likewise. - * libgnat/a-cohama.adb: Likewise. - * libgnat/a-cohama.ads: Likewise. - * libgnat/a-cohase.adb: Likewise. - * libgnat/a-cohase.ads: Likewise. - * libgnat/a-cohata.ads: Likewise. - * libgnat/a-coinho.adb: Likewise. - * libgnat/a-coinho.ads: Likewise. - * libgnat/a-coinho__shared.adb: Likewise. - * libgnat/a-coinho__shared.ads: Likewise. - * libgnat/a-coinve.adb: Likewise. - * libgnat/a-coinve.ads: Likewise. - * libgnat/a-colien.adb: Likewise. - * libgnat/a-colien.ads: Likewise. - * libgnat/a-colire.adb: Likewise. - * libgnat/a-colire.ads: Likewise. - * libgnat/a-comlin.adb: Likewise. - * libgnat/a-comlin.ads: Likewise. - * libgnat/a-comutr.adb: Likewise. - * libgnat/a-comutr.ads: Likewise. - * libgnat/a-conhel.adb: Likewise. - * libgnat/a-conhel.ads: Likewise. - * libgnat/a-convec.adb: Likewise. - * libgnat/a-convec.ads: Likewise. - * libgnat/a-coorma.adb: Likewise. - * libgnat/a-coorma.ads: Likewise. - * libgnat/a-coormu.adb: Likewise. - * libgnat/a-coormu.ads: Likewise. - * libgnat/a-coorse.adb: Likewise. - * libgnat/a-coorse.ads: Likewise. - * libgnat/a-coprnu.adb: Likewise. - * libgnat/a-coprnu.ads: Likewise. - * libgnat/a-crbltr.ads: Likewise. - * libgnat/a-crbtgk.adb: Likewise. - * libgnat/a-crbtgk.ads: Likewise. - * libgnat/a-crbtgo.adb: Likewise. - * libgnat/a-crbtgo.ads: Likewise. - * libgnat/a-crdlli.adb: Likewise. - * libgnat/a-crdlli.ads: Likewise. - * libgnat/a-csquin.ads: Likewise. - * libgnat/a-cuprqu.adb: Likewise. - * libgnat/a-cuprqu.ads: Likewise. - * libgnat/a-cusyqu.adb: Likewise. - * libgnat/a-cusyqu.ads: Likewise. - * libgnat/a-cwila1.ads: Likewise. - * libgnat/a-cwila9.ads: Likewise. - * libgnat/a-decima.adb: Likewise. - * libgnat/a-decima.ads: Likewise. - * libgnat/a-dhfina.adb: Likewise. - * libgnat/a-dhfina.ads: Likewise. - * libgnat/a-diocst.adb: Likewise. - * libgnat/a-diocst.ads: Likewise. - * libgnat/a-direct.adb: Likewise. - * libgnat/a-direct.ads: Likewise. - * libgnat/a-direio.adb: Likewise. - * libgnat/a-direio.ads: Likewise. - * libgnat/a-dirval.adb: Likewise. - * libgnat/a-dirval.ads: Likewise. - * libgnat/a-dirval__mingw.adb: Likewise. - * libgnat/a-einuoc.adb: Likewise. - * libgnat/a-einuoc.ads: Likewise. - * libgnat/a-elchha.adb: Likewise. - * libgnat/a-elchha.ads: Likewise. - * libgnat/a-elchha__vxworks-ppc-full.adb: Likewise. - * libgnat/a-envvar.adb: Likewise. - * libgnat/a-excach.adb: Likewise. - * libgnat/a-except.adb: Likewise. - * libgnat/a-except.ads: Likewise. - * libgnat/a-excpol.adb: Likewise. - * libgnat/a-excpol__abort.adb: Likewise. - * libgnat/a-exctra.adb: Likewise. - * libgnat/a-exctra.ads: Likewise. - * libgnat/a-exexda.adb: Likewise. - * libgnat/a-exexpr.adb: Likewise. - * libgnat/a-exextr.adb: Likewise. - * libgnat/a-exstat.adb: Likewise. - * libgnat/a-finali.adb: Likewise. - * libgnat/a-finali.ads: Likewise. - * libgnat/a-locale.adb: Likewise. - * libgnat/a-locale.ads: Likewise. - * libgnat/a-nbnbin.adb: Likewise. - * libgnat/a-nbnbin__gmp.adb: Likewise. - * libgnat/a-nbnbre.adb: Likewise. - * libgnat/a-ngcefu.adb: Likewise. - * libgnat/a-ngcoar.adb: Likewise. - * libgnat/a-ngcoty.adb: Likewise. - * libgnat/a-ngcoty.ads: Likewise. - * libgnat/a-ngelfu.adb: Likewise. - * libgnat/a-ngelfu.ads: Likewise. - * libgnat/a-ngrear.adb: Likewise. - * libgnat/a-ngrear.ads: Likewise. - * libgnat/a-nudira.adb: Likewise. - * libgnat/a-nudira.ads: Likewise. - * libgnat/a-nuflra.adb: Likewise. - * libgnat/a-nuflra.ads: Likewise. - * libgnat/a-numaux.ads: Likewise. - * libgnat/a-numaux__darwin.adb: Likewise. - * libgnat/a-numaux__darwin.ads: Likewise. - * libgnat/a-numaux__libc-x86.ads: Likewise. - * libgnat/a-numaux__vxworks.ads: Likewise. - * libgnat/a-numaux__x86.adb: Likewise. - * libgnat/a-numaux__x86.ads: Likewise. - * libgnat/a-rbtgbk.adb: Likewise. - * libgnat/a-rbtgbk.ads: Likewise. - * libgnat/a-rbtgbo.adb: Likewise. - * libgnat/a-rbtgbo.ads: Likewise. - * libgnat/a-rbtgso.adb: Likewise. - * libgnat/a-rbtgso.ads: Likewise. - * libgnat/a-sbecin.adb: Likewise. - * libgnat/a-sbecin.ads: Likewise. - * libgnat/a-sbhcin.adb: Likewise. - * libgnat/a-sbhcin.ads: Likewise. - * libgnat/a-sblcin.adb: Likewise. - * libgnat/a-sblcin.ads: Likewise. - * libgnat/a-secain.adb: Likewise. - * libgnat/a-secain.ads: Likewise. - * libgnat/a-sequio.adb: Likewise. - * libgnat/a-sequio.ads: Likewise. - * libgnat/a-sfecin.ads: Likewise. - * libgnat/a-sfhcin.ads: Likewise. - * libgnat/a-sflcin.ads: Likewise. - * libgnat/a-shcain.adb: Likewise. - * libgnat/a-shcain.ads: Likewise. - * libgnat/a-siocst.adb: Likewise. - * libgnat/a-siocst.ads: Likewise. - * libgnat/a-slcain.adb: Likewise. - * libgnat/a-slcain.ads: Likewise. - * libgnat/a-ssicst.adb: Likewise. - * libgnat/a-ssicst.ads: Likewise. - * libgnat/a-stboha.adb: Likewise. - * libgnat/a-stmaco.ads: Likewise. - * libgnat/a-storio.adb: Likewise. - * libgnat/a-strbou.adb: Likewise. - * libgnat/a-strbou.ads: Likewise. - * libgnat/a-stream.adb: Likewise. - * libgnat/a-stream.ads: Likewise. - * libgnat/a-strfix.adb: Likewise. - * libgnat/a-strhas.adb: Likewise. - * libgnat/a-strmap.adb: Likewise. - * libgnat/a-strmap.ads: Likewise. - * libgnat/a-strsea.adb: Likewise. - * libgnat/a-strsea.ads: Likewise. - * libgnat/a-strsup.adb: Likewise. - * libgnat/a-strsup.ads: Likewise. - * libgnat/a-strunb.adb: Likewise. - * libgnat/a-strunb.ads: Likewise. - * libgnat/a-strunb__shared.adb: Likewise. - * libgnat/a-strunb__shared.ads: Likewise. - * libgnat/a-ststio.adb: Likewise. - * libgnat/a-ststio.ads: Likewise. - * libgnat/a-stunau.adb: Likewise. - * libgnat/a-stunau.ads: Likewise. - * libgnat/a-stunau__shared.adb: Likewise. - * libgnat/a-stunha.adb: Likewise. - * libgnat/a-stuten.adb: Likewise. - * libgnat/a-stwibo.adb: Likewise. - * libgnat/a-stwibo.ads: Likewise. - * libgnat/a-stwifi.adb: Likewise. - * libgnat/a-stwiha.adb: Likewise. - * libgnat/a-stwima.adb: Likewise. - * libgnat/a-stwima.ads: Likewise. - * libgnat/a-stwise.adb: Likewise. - * libgnat/a-stwise.ads: Likewise. - * libgnat/a-stwisu.adb: Likewise. - * libgnat/a-stwisu.ads: Likewise. - * libgnat/a-stwiun.adb: Likewise. - * libgnat/a-stwiun.ads: Likewise. - * libgnat/a-stwiun__shared.adb: Likewise. - * libgnat/a-stwiun__shared.ads: Likewise. - * libgnat/a-stzbou.adb: Likewise. - * libgnat/a-stzbou.ads: Likewise. - * libgnat/a-stzfix.adb: Likewise. - * libgnat/a-stzhas.adb: Likewise. - * libgnat/a-stzmap.adb: Likewise. - * libgnat/a-stzmap.ads: Likewise. - * libgnat/a-stzsea.adb: Likewise. - * libgnat/a-stzsea.ads: Likewise. - * libgnat/a-stzsup.adb: Likewise. - * libgnat/a-stzsup.ads: Likewise. - * libgnat/a-stzunb.adb: Likewise. - * libgnat/a-stzunb.ads: Likewise. - * libgnat/a-stzunb__shared.adb: Likewise. - * libgnat/a-stzunb__shared.ads: Likewise. - * libgnat/a-suecin.adb: Likewise. - * libgnat/a-suecin.ads: Likewise. - * libgnat/a-suenco.adb: Likewise. - * libgnat/a-suenst.adb: Likewise. - * libgnat/a-suewst.adb: Likewise. - * libgnat/a-suezst.adb: Likewise. - * libgnat/a-suhcin.adb: Likewise. - * libgnat/a-suhcin.ads: Likewise. - * libgnat/a-sulcin.adb: Likewise. - * libgnat/a-sulcin.ads: Likewise. - * libgnat/a-suteio.adb: Likewise. - * libgnat/a-suteio.ads: Likewise. - * libgnat/a-suteio__shared.adb: Likewise. - * libgnat/a-swbwha.adb: Likewise. - * libgnat/a-swmwco.ads: Likewise. - * libgnat/a-swunau.adb: Likewise. - * libgnat/a-swunau.ads: Likewise. - * libgnat/a-swunau__shared.adb: Likewise. - * libgnat/a-swuwha.adb: Likewise. - * libgnat/a-swuwti.adb: Likewise. - * libgnat/a-swuwti.ads: Likewise. - * libgnat/a-swuwti__shared.adb: Likewise. - * libgnat/a-szbzha.adb: Likewise. - * libgnat/a-szmzco.ads: Likewise. - * libgnat/a-szunau.adb: Likewise. - * libgnat/a-szunau.ads: Likewise. - * libgnat/a-szunau__shared.adb: Likewise. - * libgnat/a-szuzha.adb: Likewise. - * libgnat/a-szuzti.adb: Likewise. - * libgnat/a-szuzti.ads: Likewise. - * libgnat/a-szuzti__shared.adb: Likewise. - * libgnat/a-tags.adb: Likewise. - * libgnat/a-tags.ads: Likewise. - * libgnat/a-teioed.adb: Likewise. - * libgnat/a-teioed.ads: Likewise. - * libgnat/a-textio.adb: Likewise. - * libgnat/a-textio.ads: Likewise. - * libgnat/a-tiboio.adb: Likewise. - * libgnat/a-ticoau.adb: Likewise. - * libgnat/a-ticoau.ads: Likewise. - * libgnat/a-ticoio.adb: Likewise. - * libgnat/a-ticoio.ads: Likewise. - * libgnat/a-tideau.adb: Likewise. - * libgnat/a-tideau.ads: Likewise. - * libgnat/a-tideio.adb: Likewise. - * libgnat/a-tideio.ads: Likewise. - * libgnat/a-tienau.adb: Likewise. - * libgnat/a-tienau.ads: Likewise. - * libgnat/a-tienio.adb: Likewise. - * libgnat/a-tifiio.adb: Likewise. - * libgnat/a-tiflau.adb: Likewise. - * libgnat/a-tiflau.ads: Likewise. - * libgnat/a-tiflio.adb: Likewise. - * libgnat/a-tiflio.ads: Likewise. - * libgnat/a-tigeau.adb: Likewise. - * libgnat/a-tigeau.ads: Likewise. - * libgnat/a-tigeli.adb: Likewise. - * libgnat/a-tiinau.adb: Likewise. - * libgnat/a-tiinau.ads: Likewise. - * libgnat/a-tiinio.adb: Likewise. - * libgnat/a-tiinio.ads: Likewise. - * libgnat/a-timoau.adb: Likewise. - * libgnat/a-timoau.ads: Likewise. - * libgnat/a-timoio.adb: Likewise. - * libgnat/a-timoio.ads: Likewise. - * libgnat/a-tiocst.adb: Likewise. - * libgnat/a-tiocst.ads: Likewise. - * libgnat/a-tirsfi.adb: Likewise. - * libgnat/a-tirsfi.ads: Likewise. - * libgnat/a-titest.adb: Likewise. - * libgnat/a-undesu.adb: Likewise. - * libgnat/a-wichha.adb: Likewise. - * libgnat/a-wichun.adb: Likewise. - * libgnat/a-wichun.ads: Likewise. - * libgnat/a-witeio.adb: Likewise. - * libgnat/a-witeio.ads: Likewise. - * libgnat/a-wrstfi.adb: Likewise. - * libgnat/a-wrstfi.ads: Likewise. - * libgnat/a-wtcoau.adb: Likewise. - * libgnat/a-wtcoau.ads: Likewise. - * libgnat/a-wtcoio.adb: Likewise. - * libgnat/a-wtcstr.adb: Likewise. - * libgnat/a-wtcstr.ads: Likewise. - * libgnat/a-wtdeau.adb: Likewise. - * libgnat/a-wtdeau.ads: Likewise. - * libgnat/a-wtdeio.adb: Likewise. - * libgnat/a-wtedit.adb: Likewise. - * libgnat/a-wtedit.ads: Likewise. - * libgnat/a-wtenau.adb: Likewise. - * libgnat/a-wtenau.ads: Likewise. - * libgnat/a-wtenio.adb: Likewise. - * libgnat/a-wtfiio.adb: Likewise. - * libgnat/a-wtflau.adb: Likewise. - * libgnat/a-wtflau.ads: Likewise. - * libgnat/a-wtflio.adb: Likewise. - * libgnat/a-wtgeau.adb: Likewise. - * libgnat/a-wtgeau.ads: Likewise. - * libgnat/a-wtinau.adb: Likewise. - * libgnat/a-wtinau.ads: Likewise. - * libgnat/a-wtinio.adb: Likewise. - * libgnat/a-wtmoau.adb: Likewise. - * libgnat/a-wtmoau.ads: Likewise. - * libgnat/a-wtmoio.adb: Likewise. - * libgnat/a-wtmoio.ads: Likewise. - * libgnat/a-wttest.adb: Likewise. - * libgnat/a-wwboio.adb: Likewise. - * libgnat/a-zchhan.adb: Likewise. - * libgnat/a-zchuni.adb: Likewise. - * libgnat/a-zchuni.ads: Likewise. - * libgnat/a-zrstfi.adb: Likewise. - * libgnat/a-zrstfi.ads: Likewise. - * libgnat/a-ztcoau.adb: Likewise. - * libgnat/a-ztcoio.adb: Likewise. - * libgnat/a-ztcstr.adb: Likewise. - * libgnat/a-ztcstr.ads: Likewise. - * libgnat/a-ztdeau.adb: Likewise. - * libgnat/a-ztdeau.ads: Likewise. - * libgnat/a-ztdeio.adb: Likewise. - * libgnat/a-ztedit.adb: Likewise. - * libgnat/a-ztedit.ads: Likewise. - * libgnat/a-ztenau.adb: Likewise. - * libgnat/a-ztenau.ads: Likewise. - * libgnat/a-ztenio.adb: Likewise. - * libgnat/a-ztexio.adb: Likewise. - * libgnat/a-ztexio.ads: Likewise. - * libgnat/a-ztfiio.adb: Likewise. - * libgnat/a-ztflau.adb: Likewise. - * libgnat/a-ztflau.ads: Likewise. - * libgnat/a-ztflio.adb: Likewise. - * libgnat/a-ztgeau.adb: Likewise. - * libgnat/a-ztgeau.ads: Likewise. - * libgnat/a-ztinau.adb: Likewise. - * libgnat/a-ztinau.ads: Likewise. - * libgnat/a-ztinio.adb: Likewise. - * libgnat/a-ztmoau.adb: Likewise. - * libgnat/a-ztmoau.ads: Likewise. - * libgnat/a-ztmoio.adb: Likewise. - * libgnat/a-zttest.adb: Likewise. - * libgnat/a-zzboio.adb: Likewise. - * libgnat/g-allein.ads: Likewise. - * libgnat/g-alleve.adb: Likewise. - * libgnat/g-alleve.ads: Likewise. - * libgnat/g-alleve__hard.adb: Likewise. - * libgnat/g-alleve__hard.ads: Likewise. - * libgnat/g-altcon.adb: Likewise. - * libgnat/g-altcon.ads: Likewise. - * libgnat/g-altive.ads: Likewise. - * libgnat/g-alveop.adb: Likewise. - * libgnat/g-alveop.ads: Likewise. - * libgnat/g-alvety.ads: Likewise. - * libgnat/g-alvevi.ads: Likewise. - * libgnat/g-arrspl.adb: Likewise. - * libgnat/g-arrspl.ads: Likewise. - * libgnat/g-awk.adb: Likewise. - * libgnat/g-awk.ads: Likewise. - * libgnat/g-binenv.adb: Likewise. - * libgnat/g-binenv.ads: Likewise. - * libgnat/g-brapre.ads: Likewise. - * libgnat/g-bubsor.adb: Likewise. - * libgnat/g-bubsor.ads: Likewise. - * libgnat/g-busora.adb: Likewise. - * libgnat/g-busora.ads: Likewise. - * libgnat/g-busorg.adb: Likewise. - * libgnat/g-busorg.ads: Likewise. - * libgnat/g-byorma.adb: Likewise. - * libgnat/g-byorma.ads: Likewise. - * libgnat/g-bytswa.adb: Likewise. - * libgnat/g-bytswa.ads: Likewise. - * libgnat/g-calend.adb: Likewise. - * libgnat/g-calend.ads: Likewise. - * libgnat/g-casuti.adb: Likewise. - * libgnat/g-casuti.ads: Likewise. - * libgnat/g-catiio.adb: Likewise. - * libgnat/g-catiio.ads: Likewise. - * libgnat/g-cgi.adb: Likewise. - * libgnat/g-cgi.ads: Likewise. - * libgnat/g-cgicoo.adb: Likewise. - * libgnat/g-cgicoo.ads: Likewise. - * libgnat/g-cgideb.adb: Likewise. - * libgnat/g-cgideb.ads: Likewise. - * libgnat/g-comlin.adb: Likewise. - * libgnat/g-comlin.ads: Likewise. - * libgnat/g-comver.adb: Likewise. - * libgnat/g-comver.ads: Likewise. - * libgnat/g-cppexc.adb: Likewise. - * libgnat/g-cppexc.ads: Likewise. - * libgnat/g-crc32.adb: Likewise. - * libgnat/g-crc32.ads: Likewise. - * libgnat/g-ctrl_c.adb: Likewise. - * libgnat/g-ctrl_c.ads: Likewise. - * libgnat/g-curexc.ads: Likewise. - * libgnat/g-debpoo.adb: Likewise. - * libgnat/g-debpoo.ads: Likewise. - * libgnat/g-debuti.adb: Likewise. - * libgnat/g-debuti.ads: Likewise. - * libgnat/g-decstr.adb: Likewise. - * libgnat/g-decstr.ads: Likewise. - * libgnat/g-deutst.ads: Likewise. - * libgnat/g-diopit.adb: Likewise. - * libgnat/g-diopit.ads: Likewise. - * libgnat/g-dirope.adb: Likewise. - * libgnat/g-dirope.ads: Likewise. - * libgnat/g-dynhta.adb: Likewise. - * libgnat/g-dynhta.ads: Likewise. - * libgnat/g-dyntab.adb: Likewise. - * libgnat/g-dyntab.ads: Likewise. - * libgnat/g-eacodu.adb: Likewise. - * libgnat/g-encstr.adb: Likewise. - * libgnat/g-encstr.ads: Likewise. - * libgnat/g-enutst.ads: Likewise. - * libgnat/g-excact.adb: Likewise. - * libgnat/g-excact.ads: Likewise. - * libgnat/g-except.ads: Likewise. - * libgnat/g-exctra.adb: Likewise. - * libgnat/g-exctra.ads: Likewise. - * libgnat/g-expect.adb: Likewise. - * libgnat/g-expect.ads: Likewise. - * libgnat/g-exptty.adb: Likewise. - * libgnat/g-exptty.ads: Likewise. - * libgnat/g-flocon.ads: Likewise. - * libgnat/g-forstr.adb: Likewise. - * libgnat/g-forstr.ads: Likewise. - * libgnat/g-graphs.adb: Likewise. - * libgnat/g-graphs.ads: Likewise. - * libgnat/g-heasor.adb: Likewise. - * libgnat/g-heasor.ads: Likewise. - * libgnat/g-hesora.adb: Likewise. - * libgnat/g-hesora.ads: Likewise. - * libgnat/g-hesorg.adb: Likewise. - * libgnat/g-hesorg.ads: Likewise. - * libgnat/g-htable.adb: Likewise. - * libgnat/g-htable.ads: Likewise. - * libgnat/g-io-put__vxworks.adb: Likewise. - * libgnat/g-io.adb: Likewise. - * libgnat/g-io.ads: Likewise. - * libgnat/g-io_aux.adb: Likewise. - * libgnat/g-io_aux.ads: Likewise. - * libgnat/g-lists.adb: Likewise. - * libgnat/g-lists.ads: Likewise. - * libgnat/g-locfil.adb: Likewise. - * libgnat/g-locfil.ads: Likewise. - * libgnat/g-mbdira.adb: Likewise. - * libgnat/g-mbdira.ads: Likewise. - * libgnat/g-mbflra.adb: Likewise. - * libgnat/g-mbflra.ads: Likewise. - * libgnat/g-md5.adb: Likewise. - * libgnat/g-md5.ads: Likewise. - * libgnat/g-memdum.adb: Likewise. - * libgnat/g-memdum.ads: Likewise. - * libgnat/g-moreex.adb: Likewise. - * libgnat/g-moreex.ads: Likewise. - * libgnat/g-os_lib.adb: Likewise. - * libgnat/g-os_lib.ads: Likewise. - * libgnat/g-pehage.adb: Likewise. - * libgnat/g-pehage.ads: Likewise. - * libgnat/g-rannum.adb: Likewise. - * libgnat/g-rannum.ads: Likewise. - * libgnat/g-regexp.adb: Likewise. - * libgnat/g-regexp.ads: Likewise. - * libgnat/g-regist.adb: Likewise. - * libgnat/g-regist.ads: Likewise. - * libgnat/g-regpat.adb: Likewise. - * libgnat/g-regpat.ads: Likewise. - * libgnat/g-rewdat.adb: Likewise. - * libgnat/g-rewdat.ads: Likewise. - * libgnat/g-sechas.adb: Likewise. - * libgnat/g-sechas.ads: Likewise. - * libgnat/g-sehamd.adb: Likewise. - * libgnat/g-sehamd.ads: Likewise. - * libgnat/g-sehash.adb: Likewise. - * libgnat/g-sehash.ads: Likewise. - * libgnat/g-sercom.adb: Likewise. - * libgnat/g-sercom.ads: Likewise. - * libgnat/g-sercom__linux.adb: Likewise. - * libgnat/g-sercom__mingw.adb: Likewise. - * libgnat/g-sestin.ads: Likewise. - * libgnat/g-sets.adb: Likewise. - * libgnat/g-sets.ads: Likewise. - * libgnat/g-sha1.adb: Likewise. - * libgnat/g-sha1.ads: Likewise. - * libgnat/g-sha224.ads: Likewise. - * libgnat/g-sha256.ads: Likewise. - * libgnat/g-sha384.ads: Likewise. - * libgnat/g-sha512.ads: Likewise. - * libgnat/g-shsh32.adb: Likewise. - * libgnat/g-shsh32.ads: Likewise. - * libgnat/g-shsh64.adb: Likewise. - * libgnat/g-shsh64.ads: Likewise. - * libgnat/g-shshco.adb: Likewise. - * libgnat/g-shshco.ads: Likewise. - * libgnat/g-soccon.ads: Likewise. - * libgnat/g-socket.adb: Likewise. - * libgnat/g-socket.ads: Likewise. - * libgnat/g-socket__dummy.adb: Likewise. - * libgnat/g-socket__dummy.ads: Likewise. - * libgnat/g-socthi.adb: Likewise. - * libgnat/g-socthi.ads: Likewise. - * libgnat/g-socthi__dummy.adb: Likewise. - * libgnat/g-socthi__dummy.ads: Likewise. - * libgnat/g-socthi__mingw.adb: Likewise. - * libgnat/g-socthi__mingw.ads: Likewise. - * libgnat/g-socthi__vxworks.adb: Likewise. - * libgnat/g-socthi__vxworks.ads: Likewise. - * libgnat/g-soliop.ads: Likewise. - * libgnat/g-soliop__lynxos.ads: Likewise. - * libgnat/g-soliop__mingw.ads: Likewise. - * libgnat/g-soliop__qnx.ads: Likewise. - * libgnat/g-soliop__solaris.ads: Likewise. - * libgnat/g-sothco.adb: Likewise. - * libgnat/g-sothco.ads: Likewise. - * libgnat/g-sothco__dummy.adb: Likewise. - * libgnat/g-sothco__dummy.ads: Likewise. - * libgnat/g-souinf.ads: Likewise. - * libgnat/g-spchge.adb: Likewise. - * libgnat/g-spchge.ads: Likewise. - * libgnat/g-speche.adb: Likewise. - * libgnat/g-speche.ads: Likewise. - * libgnat/g-spipat.adb: Likewise. - * libgnat/g-spipat.ads: Likewise. - * libgnat/g-spitbo.adb: Likewise. - * libgnat/g-spitbo.ads: Likewise. - * libgnat/g-sptabo.ads: Likewise. - * libgnat/g-sptain.ads: Likewise. - * libgnat/g-sptavs.ads: Likewise. - * libgnat/g-sse.ads: Likewise. - * libgnat/g-ssvety.ads: Likewise. - * libgnat/g-sthcso.adb: Likewise. - * libgnat/g-stheme.adb: Likewise. - * libgnat/g-strhas.ads: Likewise. - * libgnat/g-string.adb: Likewise. - * libgnat/g-string.ads: Likewise. - * libgnat/g-strspl.ads: Likewise. - * libgnat/g-stseme.adb: Likewise. - * libgnat/g-stsifd__sockets.adb: Likewise. - * libgnat/g-table.adb: Likewise. - * libgnat/g-table.ads: Likewise. - * libgnat/g-tasloc.adb: Likewise. - * libgnat/g-tasloc.ads: Likewise. - * libgnat/g-timsta.adb: Likewise. - * libgnat/g-timsta.ads: Likewise. - * libgnat/g-traceb.adb: Likewise. - * libgnat/g-traceb.ads: Likewise. - * libgnat/g-trasym.adb: Likewise. - * libgnat/g-trasym.ads: Likewise. - * libgnat/g-tty.adb: Likewise. - * libgnat/g-tty.ads: Likewise. - * libgnat/g-u3spch.adb: Likewise. - * libgnat/g-u3spch.ads: Likewise. - * libgnat/g-utf_32.adb: Likewise. - * libgnat/g-utf_32.ads: Likewise. - * libgnat/g-wispch.adb: Likewise. - * libgnat/g-wispch.ads: Likewise. - * libgnat/g-wistsp.ads: Likewise. - * libgnat/g-zspche.adb: Likewise. - * libgnat/g-zspche.ads: Likewise. - * libgnat/g-zstspl.ads: Likewise. - * libgnat/gnat.ads: Likewise. - * libgnat/i-c.adb: Likewise. - * libgnat/i-cexten.ads: Likewise. - * libgnat/i-cobol.adb: Likewise. - * libgnat/i-cobol.ads: Likewise. - * libgnat/i-cpoint.adb: Likewise. - * libgnat/i-cpoint.ads: Likewise. - * libgnat/i-cstrea.adb: Likewise. - * libgnat/i-cstrea.ads: Likewise. - * libgnat/i-cstrin.adb: Likewise. - * libgnat/i-cstrin.ads: Likewise. - * libgnat/i-fortra.adb: Likewise. - * libgnat/i-pacdec.adb: Likewise. - * libgnat/i-pacdec.ads: Likewise. - * libgnat/i-vxwoio.adb: Likewise. - * libgnat/i-vxwoio.ads: Likewise. - * libgnat/i-vxwork.ads: Likewise. - * libgnat/i-vxwork__x86.ads: Likewise. - * libgnat/interfac.ads: Likewise. - * libgnat/memtrack.adb: Likewise. - * libgnat/s-addima.adb: Likewise. - * libgnat/s-addima.ads: Likewise. - * libgnat/s-addope.adb: Likewise. - * libgnat/s-addope.ads: Likewise. - * libgnat/s-aotase.adb: Likewise. - * libgnat/s-aotase.ads: Likewise. - * libgnat/s-arit64.adb: Likewise. - * libgnat/s-arit64.ads: Likewise. - * libgnat/s-assert.adb: Likewise. - * libgnat/s-assert.ads: Likewise. - * libgnat/s-atacco.adb: Likewise. - * libgnat/s-atacco.ads: Likewise. - * libgnat/s-atocou.adb: Likewise. - * libgnat/s-atocou.ads: Likewise. - * libgnat/s-atocou__builtin.adb: Likewise. - * libgnat/s-atocou__x86.adb: Likewise. - * libgnat/s-atoope.ads: Likewise. - * libgnat/s-atopar.adb: Likewise. - * libgnat/s-atopar.ads: Likewise. - * libgnat/s-atopex.adb: Likewise. - * libgnat/s-atopex.ads: Likewise. - * libgnat/s-atopri.adb: Likewise. - * libgnat/s-atopri.ads: Likewise. - * libgnat/s-auxdec.adb: Likewise. - * libgnat/s-auxdec.ads: Likewise. - * libgnat/s-bignum.adb: Likewise. - * libgnat/s-bignum.ads: Likewise. - * libgnat/s-bitfie.ads: Likewise. - * libgnat/s-bitops.adb: Likewise. - * libgnat/s-bitops.ads: Likewise. - * libgnat/s-bituti.adb: Likewise. - * libgnat/s-bituti.ads: Likewise. - * libgnat/s-boarop.ads: Likewise. - * libgnat/s-boustr.adb: Likewise. - * libgnat/s-boustr.ads: Likewise. - * libgnat/s-bytswa.ads: Likewise. - * libgnat/s-carsi8.adb: Likewise. - * libgnat/s-carsi8.ads: Likewise. - * libgnat/s-carun8.adb: Likewise. - * libgnat/s-carun8.ads: Likewise. - * libgnat/s-casi16.adb: Likewise. - * libgnat/s-casi16.ads: Likewise. - * libgnat/s-casi32.adb: Likewise. - * libgnat/s-casi32.ads: Likewise. - * libgnat/s-casi64.adb: Likewise. - * libgnat/s-casi64.ads: Likewise. - * libgnat/s-casuti.adb: Likewise. - * libgnat/s-casuti.ads: Likewise. - * libgnat/s-caun16.adb: Likewise. - * libgnat/s-caun16.ads: Likewise. - * libgnat/s-caun32.adb: Likewise. - * libgnat/s-caun32.ads: Likewise. - * libgnat/s-caun64.adb: Likewise. - * libgnat/s-caun64.ads: Likewise. - * libgnat/s-chepoo.ads: Likewise. - * libgnat/s-commun.adb: Likewise. - * libgnat/s-commun.ads: Likewise. - * libgnat/s-conca2.adb: Likewise. - * libgnat/s-conca2.ads: Likewise. - * libgnat/s-conca3.adb: Likewise. - * libgnat/s-conca3.ads: Likewise. - * libgnat/s-conca4.adb: Likewise. - * libgnat/s-conca4.ads: Likewise. - * libgnat/s-conca5.adb: Likewise. - * libgnat/s-conca5.ads: Likewise. - * libgnat/s-conca6.adb: Likewise. - * libgnat/s-conca6.ads: Likewise. - * libgnat/s-conca7.adb: Likewise. - * libgnat/s-conca7.ads: Likewise. - * libgnat/s-conca8.adb: Likewise. - * libgnat/s-conca8.ads: Likewise. - * libgnat/s-conca9.adb: Likewise. - * libgnat/s-conca9.ads: Likewise. - * libgnat/s-crc32.adb: Likewise. - * libgnat/s-crc32.ads: Likewise. - * libgnat/s-crtl.ads: Likewise. - * libgnat/s-dfmkio.ads: Likewise. - * libgnat/s-dfmopr.ads: Likewise. - * libgnat/s-dgmgop.ads: Likewise. - * libgnat/s-diflio.adb: Likewise. - * libgnat/s-diflio.ads: Likewise. - * libgnat/s-diflmk.ads: Likewise. - * libgnat/s-digemk.ads: Likewise. - * libgnat/s-diinio.adb: Likewise. - * libgnat/s-diinio.ads: Likewise. - * libgnat/s-dilomk.ads: Likewise. - * libgnat/s-dim.ads: Likewise. - * libgnat/s-dimkio.ads: Likewise. - * libgnat/s-dimmks.ads: Likewise. - * libgnat/s-direio.adb: Likewise. - * libgnat/s-direio.ads: Likewise. - * libgnat/s-dlmkio.ads: Likewise. - * libgnat/s-dlmopr.ads: Likewise. - * libgnat/s-dmotpr.ads: Likewise. - * libgnat/s-dsaser.ads: Likewise. - * libgnat/s-dwalin.adb: Likewise. - * libgnat/s-dwalin.ads: Likewise. - * libgnat/s-elaall.adb: Likewise. - * libgnat/s-elaall.ads: Likewise. - * libgnat/s-excdeb.adb: Likewise. - * libgnat/s-excdeb.ads: Likewise. - * libgnat/s-except.adb: Likewise. - * libgnat/s-except.ads: Likewise. - * libgnat/s-excmac__arm.adb: Likewise. - * libgnat/s-excmac__arm.ads: Likewise. - * libgnat/s-excmac__gcc.adb: Likewise. - * libgnat/s-excmac__gcc.ads: Likewise. - * libgnat/s-exctab.adb: Likewise. - * libgnat/s-exctab.ads: Likewise. - * libgnat/s-exctra.adb: Likewise. - * libgnat/s-exctra.ads: Likewise. - * libgnat/s-exnint.adb: Likewise. - * libgnat/s-exnint.ads: Likewise. - * libgnat/s-exnllf.adb: Likewise. - * libgnat/s-exnllf.ads: Likewise. - * libgnat/s-exnlli.adb: Likewise. - * libgnat/s-exnlli.ads: Likewise. - * libgnat/s-expint.adb: Likewise. - * libgnat/s-expint.ads: Likewise. - * libgnat/s-explli.adb: Likewise. - * libgnat/s-explli.ads: Likewise. - * libgnat/s-expllu.adb: Likewise. - * libgnat/s-expllu.ads: Likewise. - * libgnat/s-expmod.adb: Likewise. - * libgnat/s-expmod.ads: Likewise. - * libgnat/s-expuns.adb: Likewise. - * libgnat/s-expuns.ads: Likewise. - * libgnat/s-fatflt.ads: Likewise. - * libgnat/s-fatgen.adb: Likewise. - * libgnat/s-fatgen.ads: Likewise. - * libgnat/s-fatlfl.ads: Likewise. - * libgnat/s-fatllf.ads: Likewise. - * libgnat/s-fatsfl.ads: Likewise. - * libgnat/s-ficobl.ads: Likewise. - * libgnat/s-filatt.ads: Likewise. - * libgnat/s-fileio.adb: Likewise. - * libgnat/s-fileio.ads: Likewise. - * libgnat/s-finmas.adb: Likewise. - * libgnat/s-finmas.ads: Likewise. - * libgnat/s-finroo.adb: Likewise. - * libgnat/s-finroo.ads: Likewise. - * libgnat/s-flocon.adb: Likewise. - * libgnat/s-flocon.ads: Likewise. - * libgnat/s-flocon__none.adb: Likewise. - * libgnat/s-fore.adb: Likewise. - * libgnat/s-fore.ads: Likewise. - * libgnat/s-gearop.adb: Likewise. - * libgnat/s-gearop.ads: Likewise. - * libgnat/s-genbig.adb: Likewise. - * libgnat/s-genbig.ads: Likewise. - * libgnat/s-geveop.adb: Likewise. - * libgnat/s-geveop.ads: Likewise. - * libgnat/s-gloloc.adb: Likewise. - * libgnat/s-gloloc.ads: Likewise. - * libgnat/s-gloloc__mingw.adb: Likewise. - * libgnat/s-htable.adb: Likewise. - * libgnat/s-htable.ads: Likewise. - * libgnat/s-imenne.adb: Likewise. - * libgnat/s-imenne.ads: Likewise. - * libgnat/s-imgbiu.adb: Likewise. - * libgnat/s-imgbiu.ads: Likewise. - * libgnat/s-imgboo.adb: Likewise. - * libgnat/s-imgboo.ads: Likewise. - * libgnat/s-imgcha.adb: Likewise. - * libgnat/s-imgcha.ads: Likewise. - * libgnat/s-imgdec.adb: Likewise. - * libgnat/s-imgdec.ads: Likewise. - * libgnat/s-imgenu.adb: Likewise. - * libgnat/s-imgenu.ads: Likewise. - * libgnat/s-imgint.adb: Likewise. - * libgnat/s-imgint.ads: Likewise. - * libgnat/s-imgllb.adb: Likewise. - * libgnat/s-imgllb.ads: Likewise. - * libgnat/s-imglld.adb: Likewise. - * libgnat/s-imglld.ads: Likewise. - * libgnat/s-imglli.adb: Likewise. - * libgnat/s-imglli.ads: Likewise. - * libgnat/s-imgllu.adb: Likewise. - * libgnat/s-imgllu.ads: Likewise. - * libgnat/s-imgllw.adb: Likewise. - * libgnat/s-imgllw.ads: Likewise. - * libgnat/s-imgrea.adb: Likewise. - * libgnat/s-imgrea.ads: Likewise. - * libgnat/s-imguns.adb: Likewise. - * libgnat/s-imguns.ads: Likewise. - * libgnat/s-imgwch.adb: Likewise. - * libgnat/s-imgwch.ads: Likewise. - * libgnat/s-imgwiu.adb: Likewise. - * libgnat/s-imgwiu.ads: Likewise. - * libgnat/s-io.adb: Likewise. - * libgnat/s-io.ads: Likewise. - * libgnat/s-llflex.ads: Likewise. - * libgnat/s-maccod.ads: Likewise. - * libgnat/s-mantis.adb: Likewise. - * libgnat/s-mantis.ads: Likewise. - * libgnat/s-mastop.adb: Likewise. - * libgnat/s-mastop.ads: Likewise. - * libgnat/s-memcop.ads: Likewise. - * libgnat/s-memory.adb: Likewise. - * libgnat/s-memory.ads: Likewise. - * libgnat/s-mmap.adb: Likewise. - * libgnat/s-mmap.ads: Likewise. - * libgnat/s-mmauni__long.ads: Likewise. - * libgnat/s-mmosin__mingw.adb: Likewise. - * libgnat/s-mmosin__mingw.ads: Likewise. - * libgnat/s-mmosin__unix.adb: Likewise. - * libgnat/s-mmosin__unix.ads: Likewise. - * libgnat/s-multip.adb: Likewise. - * libgnat/s-objrea.adb: Likewise. - * libgnat/s-objrea.ads: Likewise. - * libgnat/s-optide.adb: Likewise. - * libgnat/s-os_lib.adb: Likewise. - * libgnat/s-os_lib.ads: Likewise. - * libgnat/s-osprim.ads: Likewise. - * libgnat/s-osprim__darwin.adb: Likewise. - * libgnat/s-osprim__lynxos.ads: Likewise. - * libgnat/s-osprim__mingw.adb: Likewise. - * libgnat/s-osprim__posix.adb: Likewise. - * libgnat/s-osprim__posix2008.adb: Likewise. - * libgnat/s-osprim__rtems.adb: Likewise. - * libgnat/s-osprim__solaris.adb: Likewise. - * libgnat/s-osprim__unix.adb: Likewise. - * libgnat/s-osprim__vxworks.adb: Likewise. - * libgnat/s-osprim__x32.adb: Likewise. - * libgnat/s-osvers__vxworks-653.ads: Likewise. - * libgnat/s-pack03.adb: Likewise. - * libgnat/s-pack03.ads: Likewise. - * libgnat/s-pack05.adb: Likewise. - * libgnat/s-pack05.ads: Likewise. - * libgnat/s-pack06.adb: Likewise. - * libgnat/s-pack06.ads: Likewise. - * libgnat/s-pack07.adb: Likewise. - * libgnat/s-pack07.ads: Likewise. - * libgnat/s-pack09.adb: Likewise. - * libgnat/s-pack09.ads: Likewise. - * libgnat/s-pack10.adb: Likewise. - * libgnat/s-pack10.ads: Likewise. - * libgnat/s-pack11.adb: Likewise. - * libgnat/s-pack11.ads: Likewise. - * libgnat/s-pack12.adb: Likewise. - * libgnat/s-pack12.ads: Likewise. - * libgnat/s-pack13.adb: Likewise. - * libgnat/s-pack13.ads: Likewise. - * libgnat/s-pack14.adb: Likewise. - * libgnat/s-pack14.ads: Likewise. - * libgnat/s-pack15.adb: Likewise. - * libgnat/s-pack15.ads: Likewise. - * libgnat/s-pack17.adb: Likewise. - * libgnat/s-pack17.ads: Likewise. - * libgnat/s-pack18.adb: Likewise. - * libgnat/s-pack18.ads: Likewise. - * libgnat/s-pack19.adb: Likewise. - * libgnat/s-pack19.ads: Likewise. - * libgnat/s-pack20.adb: Likewise. - * libgnat/s-pack20.ads: Likewise. - * libgnat/s-pack21.adb: Likewise. - * libgnat/s-pack21.ads: Likewise. - * libgnat/s-pack22.adb: Likewise. - * libgnat/s-pack22.ads: Likewise. - * libgnat/s-pack23.adb: Likewise. - * libgnat/s-pack23.ads: Likewise. - * libgnat/s-pack24.adb: Likewise. - * libgnat/s-pack24.ads: Likewise. - * libgnat/s-pack25.adb: Likewise. - * libgnat/s-pack25.ads: Likewise. - * libgnat/s-pack26.adb: Likewise. - * libgnat/s-pack26.ads: Likewise. - * libgnat/s-pack27.adb: Likewise. - * libgnat/s-pack27.ads: Likewise. - * libgnat/s-pack28.adb: Likewise. - * libgnat/s-pack28.ads: Likewise. - * libgnat/s-pack29.adb: Likewise. - * libgnat/s-pack29.ads: Likewise. - * libgnat/s-pack30.adb: Likewise. - * libgnat/s-pack30.ads: Likewise. - * libgnat/s-pack31.adb: Likewise. - * libgnat/s-pack31.ads: Likewise. - * libgnat/s-pack33.adb: Likewise. - * libgnat/s-pack33.ads: Likewise. - * libgnat/s-pack34.adb: Likewise. - * libgnat/s-pack34.ads: Likewise. - * libgnat/s-pack35.adb: Likewise. - * libgnat/s-pack35.ads: Likewise. - * libgnat/s-pack36.adb: Likewise. - * libgnat/s-pack36.ads: Likewise. - * libgnat/s-pack37.adb: Likewise. - * libgnat/s-pack37.ads: Likewise. - * libgnat/s-pack38.adb: Likewise. - * libgnat/s-pack38.ads: Likewise. - * libgnat/s-pack39.adb: Likewise. - * libgnat/s-pack39.ads: Likewise. - * libgnat/s-pack40.adb: Likewise. - * libgnat/s-pack40.ads: Likewise. - * libgnat/s-pack41.adb: Likewise. - * libgnat/s-pack41.ads: Likewise. - * libgnat/s-pack42.adb: Likewise. - * libgnat/s-pack42.ads: Likewise. - * libgnat/s-pack43.adb: Likewise. - * libgnat/s-pack43.ads: Likewise. - * libgnat/s-pack44.adb: Likewise. - * libgnat/s-pack44.ads: Likewise. - * libgnat/s-pack45.adb: Likewise. - * libgnat/s-pack45.ads: Likewise. - * libgnat/s-pack46.adb: Likewise. - * libgnat/s-pack46.ads: Likewise. - * libgnat/s-pack47.adb: Likewise. - * libgnat/s-pack47.ads: Likewise. - * libgnat/s-pack48.adb: Likewise. - * libgnat/s-pack48.ads: Likewise. - * libgnat/s-pack49.adb: Likewise. - * libgnat/s-pack49.ads: Likewise. - * libgnat/s-pack50.adb: Likewise. - * libgnat/s-pack50.ads: Likewise. - * libgnat/s-pack51.adb: Likewise. - * libgnat/s-pack51.ads: Likewise. - * libgnat/s-pack52.adb: Likewise. - * libgnat/s-pack52.ads: Likewise. - * libgnat/s-pack53.adb: Likewise. - * libgnat/s-pack53.ads: Likewise. - * libgnat/s-pack54.adb: Likewise. - * libgnat/s-pack54.ads: Likewise. - * libgnat/s-pack55.adb: Likewise. - * libgnat/s-pack55.ads: Likewise. - * libgnat/s-pack56.adb: Likewise. - * libgnat/s-pack56.ads: Likewise. - * libgnat/s-pack57.adb: Likewise. - * libgnat/s-pack57.ads: Likewise. - * libgnat/s-pack58.adb: Likewise. - * libgnat/s-pack58.ads: Likewise. - * libgnat/s-pack59.adb: Likewise. - * libgnat/s-pack59.ads: Likewise. - * libgnat/s-pack60.adb: Likewise. - * libgnat/s-pack60.ads: Likewise. - * libgnat/s-pack61.adb: Likewise. - * libgnat/s-pack61.ads: Likewise. - * libgnat/s-pack62.adb: Likewise. - * libgnat/s-pack62.ads: Likewise. - * libgnat/s-pack63.adb: Likewise. - * libgnat/s-pack63.ads: Likewise. - * libgnat/s-parame.adb: Likewise. - * libgnat/s-parame.ads: Likewise. - * libgnat/s-parame__ae653.ads: Likewise. - * libgnat/s-parame__hpux.ads: Likewise. - * libgnat/s-parame__rtems.adb: Likewise. - * libgnat/s-parame__vxworks.adb: Likewise. - * libgnat/s-parame__vxworks.ads: Likewise. - * libgnat/s-parint.adb: Likewise. - * libgnat/s-parint.ads: Likewise. - * libgnat/s-pooglo.adb: Likewise. - * libgnat/s-pooglo.ads: Likewise. - * libgnat/s-pooloc.adb: Likewise. - * libgnat/s-pooloc.ads: Likewise. - * libgnat/s-poosiz.adb: Likewise. - * libgnat/s-poosiz.ads: Likewise. - * libgnat/s-powtab.ads: Likewise. - * libgnat/s-purexc.ads: Likewise. - * libgnat/s-rannum.adb: Likewise. - * libgnat/s-rannum.ads: Likewise. - * libgnat/s-ransee.adb: Likewise. - * libgnat/s-ransee.ads: Likewise. - * libgnat/s-regexp.adb: Likewise. - * libgnat/s-regexp.ads: Likewise. - * libgnat/s-regpat.adb: Likewise. - * libgnat/s-regpat.ads: Likewise. - * libgnat/s-resfil.adb: Likewise. - * libgnat/s-resfil.ads: Likewise. - * libgnat/s-restri.adb: Likewise. - * libgnat/s-restri.ads: Likewise. - * libgnat/s-rident.ads: Likewise. - * libgnat/s-rpc.adb: Likewise. - * libgnat/s-rpc.ads: Likewise. - * libgnat/s-scaval.adb: Likewise. - * libgnat/s-scaval.ads: Likewise. - * libgnat/s-secsta.adb: Likewise. - * libgnat/s-secsta.ads: Likewise. - * libgnat/s-sequio.adb: Likewise. - * libgnat/s-sequio.ads: Likewise. - * libgnat/s-shasto.adb: Likewise. - * libgnat/s-shasto.ads: Likewise. - * libgnat/s-soflin.adb: Likewise. - * libgnat/s-soflin.ads: Likewise. - * libgnat/s-soliin.adb: Likewise. - * libgnat/s-soliin.ads: Likewise. - * libgnat/s-sopco3.adb: Likewise. - * libgnat/s-sopco3.ads: Likewise. - * libgnat/s-sopco4.adb: Likewise. - * libgnat/s-sopco4.ads: Likewise. - * libgnat/s-sopco5.adb: Likewise. - * libgnat/s-sopco5.ads: Likewise. - * libgnat/s-spsufi.adb: Likewise. - * libgnat/s-spsufi.ads: Likewise. - * libgnat/s-stache.adb: Likewise. - * libgnat/s-stache.ads: Likewise. - * libgnat/s-stalib.adb: Likewise. - * libgnat/s-stalib.ads: Likewise. - * libgnat/s-stausa.adb: Likewise. - * libgnat/s-stausa.ads: Likewise. - * libgnat/s-stchop.adb: Likewise. - * libgnat/s-stchop.ads: Likewise. - * libgnat/s-stchop__limit.ads: Likewise. - * libgnat/s-stchop__rtems.adb: Likewise. - * libgnat/s-stchop__vxworks.adb: Likewise. - * libgnat/s-stoele.adb: Likewise. - * libgnat/s-stoele.ads: Likewise. - * libgnat/s-stopoo.adb: Likewise. - * libgnat/s-stopoo.ads: Likewise. - * libgnat/s-stposu.adb: Likewise. - * libgnat/s-stposu.ads: Likewise. - * libgnat/s-stratt.adb: Likewise. - * libgnat/s-stratt.ads: Likewise. - * libgnat/s-stratt__xdr.adb: Likewise. - * libgnat/s-strcom.adb: Likewise. - * libgnat/s-strcom.ads: Likewise. - * libgnat/s-strhas.adb: Likewise. - * libgnat/s-strhas.ads: Likewise. - * libgnat/s-string.adb: Likewise. - * libgnat/s-string.ads: Likewise. - * libgnat/s-strops.adb: Likewise. - * libgnat/s-strops.ads: Likewise. - * libgnat/s-ststop.adb: Likewise. - * libgnat/s-ststop.ads: Likewise. - * libgnat/s-tasloc.adb: Likewise. - * libgnat/s-tasloc.ads: Likewise. - * libgnat/s-thread.ads: Likewise. - * libgnat/s-thread__ae653.adb: Likewise. - * libgnat/s-traceb.adb: Likewise. - * libgnat/s-traceb.ads: Likewise. - * libgnat/s-traceb__hpux.adb: Likewise. - * libgnat/s-traceb__mastop.adb: Likewise. - * libgnat/s-traent.adb: Likewise. - * libgnat/s-traent.ads: Likewise. - * libgnat/s-trasym.adb: Likewise. - * libgnat/s-trasym.ads: Likewise. - * libgnat/s-trasym__dwarf.adb: Likewise. - * libgnat/s-tsmona.adb: Likewise. - * libgnat/s-tsmona__linux.adb: Likewise. - * libgnat/s-tsmona__mingw.adb: Likewise. - * libgnat/s-unstyp.ads: Likewise. - * libgnat/s-utf_32.adb: Likewise. - * libgnat/s-utf_32.ads: Likewise. - * libgnat/s-valboo.adb: Likewise. - * libgnat/s-valboo.ads: Likewise. - * libgnat/s-valcha.adb: Likewise. - * libgnat/s-valcha.ads: Likewise. - * libgnat/s-valdec.adb: Likewise. - * libgnat/s-valdec.ads: Likewise. - * libgnat/s-valenu.adb: Likewise. - * libgnat/s-valenu.ads: Likewise. - * libgnat/s-valint.adb: Likewise. - * libgnat/s-valint.ads: Likewise. - * libgnat/s-vallld.adb: Likewise. - * libgnat/s-vallld.ads: Likewise. - * libgnat/s-vallli.adb: Likewise. - * libgnat/s-vallli.ads: Likewise. - * libgnat/s-valllu.adb: Likewise. - * libgnat/s-valllu.ads: Likewise. - * libgnat/s-valrea.adb: Likewise. - * libgnat/s-valrea.ads: Likewise. - * libgnat/s-valuns.adb: Likewise. - * libgnat/s-valuns.ads: Likewise. - * libgnat/s-valuti.adb: Likewise. - * libgnat/s-valuti.ads: Likewise. - * libgnat/s-valwch.adb: Likewise. - * libgnat/s-valwch.ads: Likewise. - * libgnat/s-veboop.adb: Likewise. - * libgnat/s-veboop.ads: Likewise. - * libgnat/s-vector.ads: Likewise. - * libgnat/s-vercon.adb: Likewise. - * libgnat/s-vercon.ads: Likewise. - * libgnat/s-wchcnv.adb: Likewise. - * libgnat/s-wchcnv.ads: Likewise. - * libgnat/s-wchcon.adb: Likewise. - * libgnat/s-wchcon.ads: Likewise. - * libgnat/s-wchjis.adb: Likewise. - * libgnat/s-wchjis.ads: Likewise. - * libgnat/s-wchstw.adb: Likewise. - * libgnat/s-wchstw.ads: Likewise. - * libgnat/s-wchwts.adb: Likewise. - * libgnat/s-wchwts.ads: Likewise. - * libgnat/s-widboo.adb: Likewise. - * libgnat/s-widboo.ads: Likewise. - * libgnat/s-widcha.adb: Likewise. - * libgnat/s-widcha.ads: Likewise. - * libgnat/s-widenu.adb: Likewise. - * libgnat/s-widenu.ads: Likewise. - * libgnat/s-widlli.adb: Likewise. - * libgnat/s-widlli.ads: Likewise. - * libgnat/s-widllu.adb: Likewise. - * libgnat/s-widllu.ads: Likewise. - * libgnat/s-widwch.adb: Likewise. - * libgnat/s-widwch.ads: Likewise. - * libgnat/s-win32.ads: Likewise. - * libgnat/s-winext.ads: Likewise. - * libgnat/s-wwdcha.adb: Likewise. - * libgnat/s-wwdcha.ads: Likewise. - * libgnat/s-wwdenu.adb: Likewise. - * libgnat/s-wwdenu.ads: Likewise. - * libgnat/s-wwdwch.adb: Likewise. - * libgnat/s-wwdwch.ads: Likewise. - * libgnat/system-aix.ads: Likewise. - * libgnat/system-darwin-arm.ads: Likewise. - * libgnat/system-darwin-ppc.ads: Likewise. - * libgnat/system-darwin-x86.ads: Likewise. - * libgnat/system-djgpp.ads: Likewise. - * libgnat/system-dragonfly-x86_64.ads: Likewise. - * libgnat/system-freebsd.ads: Likewise. - * libgnat/system-hpux-ia64.ads: Likewise. - * libgnat/system-hpux.ads: Likewise. - * libgnat/system-linux-alpha.ads: Likewise. - * libgnat/system-linux-arm.ads: Likewise. - * libgnat/system-linux-hppa.ads: Likewise. - * libgnat/system-linux-ia64.ads: Likewise. - * libgnat/system-linux-m68k.ads: Likewise. - * libgnat/system-linux-mips.ads: Likewise. - * libgnat/system-linux-ppc.ads: Likewise. - * libgnat/system-linux-riscv.ads: Likewise. - * libgnat/system-linux-s390.ads: Likewise. - * libgnat/system-linux-sh4.ads: Likewise. - * libgnat/system-linux-sparc.ads: Likewise. - * libgnat/system-linux-x86.ads: Likewise. - * libgnat/system-lynxos178-ppc.ads: Likewise. - * libgnat/system-lynxos178-x86.ads: Likewise. - * libgnat/system-mingw.ads: Likewise. - * libgnat/system-qnx-aarch64.ads: Likewise. - * libgnat/system-rtems.ads: Likewise. - * libgnat/system-solaris-sparc.ads: Likewise. - * libgnat/system-solaris-x86.ads: Likewise. - * libgnat/system-vxworks-arm-rtp-smp.ads: Likewise. - * libgnat/system-vxworks-arm-rtp.ads: Likewise. - * libgnat/system-vxworks-arm.ads: Likewise. - * libgnat/system-vxworks-e500-kernel.ads: Likewise. - * libgnat/system-vxworks-e500-rtp-smp.ads: Likewise. - * libgnat/system-vxworks-e500-rtp.ads: Likewise. - * libgnat/system-vxworks-e500-vthread.ads: Likewise. - * libgnat/system-vxworks-ppc-kernel.ads: Likewise. - * libgnat/system-vxworks-ppc-ravenscar.ads: Likewise. - * libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise. - * libgnat/system-vxworks-ppc-rtp.ads: Likewise. - * libgnat/system-vxworks-ppc-vthread.ads: Likewise. - * libgnat/system-vxworks-ppc.ads: Likewise. - * libgnat/system-vxworks-x86-kernel.ads: Likewise. - * libgnat/system-vxworks-x86-rtp-smp.ads: Likewise. - * libgnat/system-vxworks-x86-rtp.ads: Likewise. - * libgnat/system-vxworks-x86-vthread.ads: Likewise. - * libgnat/system-vxworks-x86.ads: Likewise. - * libgnat/system-vxworks7-aarch64-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-aarch64.ads: Likewise. - * libgnat/system-vxworks7-arm-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-arm.ads: Likewise. - * libgnat/system-vxworks7-e500-kernel.ads: Likewise. - * libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-e500-rtp.ads: Likewise. - * libgnat/system-vxworks7-ppc-kernel.ads: Likewise. - * libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-ppc-rtp.ads: Likewise. - * libgnat/system-vxworks7-ppc64-kernel.ads: Likewise. - * libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-x86-kernel.ads: Likewise. - * libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise. - * libgnat/system-vxworks7-x86-rtp.ads: Likewise. - * libgnat/system-vxworks7-x86_64-kernel.ads: Likewise. - * libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise. - * libgnat/system.ads: Likewise. - * link.c: Likewise. - * live.adb: Likewise. - * live.ads: Likewise. - * locales.c: Likewise. - * make.adb: Likewise. - * make.ads: Likewise. - * make_util.adb: Likewise. - * make_util.ads: Likewise. - * makeusg.adb: Likewise. - * makeusg.ads: Likewise. - * mdll-fil.adb: Likewise. - * mdll-fil.ads: Likewise. - * mdll-utl.adb: Likewise. - * mdll-utl.ads: Likewise. - * mdll.adb: Likewise. - * mdll.ads: Likewise. - * mingw32.h: Likewise. - * mkdir.c: Likewise. - * namet-sp.adb: Likewise. - * namet-sp.ads: Likewise. - * namet.adb: Likewise. - * namet.ads: Likewise. - * namet.h: Likewise. - * nlists.adb: Likewise. - * nlists.ads: Likewise. - * nlists.h: Likewise. - * opt.adb: Likewise. - * opt.ads: Likewise. - * osint-b.adb: Likewise. - * osint-b.ads: Likewise. - * osint-c.adb: Likewise. - * osint-c.ads: Likewise. - * osint-l.adb: Likewise. - * osint-l.ads: Likewise. - * osint-m.adb: Likewise. - * osint-m.ads: Likewise. - * osint.adb: Likewise. - * osint.ads: Likewise. - * output.adb: Likewise. - * output.ads: Likewise. - * par-ch10.adb: Likewise. - * par-ch11.adb: Likewise. - * par-ch12.adb: Likewise. - * par-ch13.adb: Likewise. - * par-ch2.adb: Likewise. - * par-ch3.adb: Likewise. - * par-ch4.adb: Likewise. - * par-ch5.adb: Likewise. - * par-ch6.adb: Likewise. - * par-ch7.adb: Likewise. - * par-ch8.adb: Likewise. - * par-ch9.adb: Likewise. - * par-endh.adb: Likewise. - * par-labl.adb: Likewise. - * par-load.adb: Likewise. - * par-prag.adb: Likewise. - * par-sync.adb: Likewise. - * par-tchk.adb: Likewise. - * par-util.adb: Likewise. - * par.adb: Likewise. - * par.ads: Likewise. - * par_sco.adb: Likewise. - * par_sco.ads: Likewise. - * pprint.adb: Likewise. - * pprint.ads: Likewise. - * prep.adb: Likewise. - * prep.ads: Likewise. - * prepcomp.adb: Likewise. - * prepcomp.ads: Likewise. - * put_scos.adb: Likewise. - * put_scos.ads: Likewise. - * raise-gcc.c: Likewise. - * raise.c: Likewise. - * raise.h: Likewise. - * repinfo-input.adb: Likewise. - * repinfo-input.ads: Likewise. - * repinfo.adb: Likewise. - * repinfo.ads: Likewise. - * repinfo.h: Likewise. - * restrict.adb: Likewise. - * restrict.ads: Likewise. - * rident.ads: Likewise. - * rtfinal.c: Likewise. - * rtinit.c: Likewise. - * rtsfind.adb: Likewise. - * rtsfind.ads: Likewise. - * runtime.h: Likewise. - * s-oscons-tmplt.c: Likewise. - * sa_messages.adb: Likewise. - * sa_messages.ads: Likewise. - * scans.adb: Likewise. - * scans.ads: Likewise. - * scil_ll.adb: Likewise. - * scil_ll.ads: Likewise. - * scn.adb: Likewise. - * scn.ads: Likewise. - * scng.adb: Likewise. - * scng.ads: Likewise. - * scos.adb: Likewise. - * scos.ads: Likewise. - * scos.h: Likewise. - * sdefault.ads: Likewise. - * seh_init.c: Likewise. - * sem.adb: Likewise. - * sem.ads: Likewise. - * sem_aggr.adb: Likewise. - * sem_aggr.ads: Likewise. - * sem_attr.adb: Likewise. - * sem_attr.ads: Likewise. - * sem_aux.adb: Likewise. - * sem_aux.ads: Likewise. - * sem_case.adb: Likewise. - * sem_case.ads: Likewise. - * sem_cat.adb: Likewise. - * sem_cat.ads: Likewise. - * sem_ch10.adb: Likewise. - * sem_ch10.ads: Likewise. - * sem_ch11.adb: Likewise. - * sem_ch11.ads: Likewise. - * sem_ch12.adb: Likewise. - * sem_ch12.ads: Likewise. - * sem_ch13.adb: Likewise. - * sem_ch13.ads: Likewise. - * sem_ch2.adb: Likewise. - * sem_ch2.ads: Likewise. - * sem_ch3.adb: Likewise. - * sem_ch3.ads: Likewise. - * sem_ch4.adb: Likewise. - * sem_ch4.ads: Likewise. - * sem_ch5.adb: Likewise. - * sem_ch5.ads: Likewise. - * sem_ch6.adb: Likewise. - * sem_ch6.ads: Likewise. - * sem_ch7.adb: Likewise. - * sem_ch7.ads: Likewise. - * sem_ch8.adb: Likewise. - * sem_ch8.ads: Likewise. - * sem_ch9.adb: Likewise. - * sem_ch9.ads: Likewise. - * sem_dim.adb: Likewise. - * sem_dim.ads: Likewise. - * sem_disp.adb: Likewise. - * sem_disp.ads: Likewise. - * sem_dist.adb: Likewise. - * sem_dist.ads: Likewise. - * sem_elab.adb: Likewise. - * sem_elab.ads: Likewise. - * sem_elim.adb: Likewise. - * sem_elim.ads: Likewise. - * sem_eval.adb: Likewise. - * sem_eval.ads: Likewise. - * sem_intr.adb: Likewise. - * sem_intr.ads: Likewise. - * sem_mech.adb: Likewise. - * sem_mech.ads: Likewise. - * sem_prag.adb: Likewise. - * sem_prag.ads: Likewise. - * sem_res.adb: Likewise. - * sem_res.ads: Likewise. - * sem_scil.adb: Likewise. - * sem_scil.ads: Likewise. - * sem_smem.adb: Likewise. - * sem_smem.ads: Likewise. - * sem_type.adb: Likewise. - * sem_type.ads: Likewise. - * sem_util.adb: Likewise. - * sem_util.ads: Likewise. - * sem_warn.adb: Likewise. - * sem_warn.ads: Likewise. - * set_targ.adb: Likewise. - * set_targ.ads: Likewise. - * sfn_scan.adb: Likewise. - * sfn_scan.ads: Likewise. - * sigtramp-armdroid.c: Likewise. - * sigtramp-ios.c: Likewise. - * sigtramp-qnx.c: Likewise. - * sigtramp-vxworks.c: Likewise. - * sigtramp.h: Likewise. - * sinfo-cn.adb: Likewise. - * sinfo-cn.ads: Likewise. - * sinfo.adb: Likewise. - * sinfo.ads: Likewise. - * sinput-c.adb: Likewise. - * sinput-c.ads: Likewise. - * sinput-d.adb: Likewise. - * sinput-d.ads: Likewise. - * sinput-l.adb: Likewise. - * sinput-l.ads: Likewise. - * sinput.adb: Likewise. - * sinput.ads: Likewise. - * socket.c: Likewise. - * spark_xrefs.adb: Likewise. - * spark_xrefs.ads: Likewise. - * sprint.adb: Likewise. - * sprint.ads: Likewise. - * stand.adb: Likewise. - * stand.ads: Likewise. - * stringt.adb: Likewise. - * stringt.ads: Likewise. - * stringt.h: Likewise. - * style.adb: Likewise. - * style.ads: Likewise. - * styleg.adb: Likewise. - * styleg.ads: Likewise. - * stylesw.adb: Likewise. - * stylesw.ads: Likewise. - * switch-b.adb: Likewise. - * switch-b.ads: Likewise. - * switch-c.adb: Likewise. - * switch-c.ads: Likewise. - * switch-m.adb: Likewise. - * switch-m.ads: Likewise. - * switch.adb: Likewise. - * switch.ads: Likewise. - * symbols.adb: Likewise. - * symbols.ads: Likewise. - * sysdep.c: Likewise. - * table.adb: Likewise. - * table.ads: Likewise. - * targext.c: Likewise. - * targparm.adb: Likewise. - * targparm.ads: Likewise. - * tbuild.adb: Likewise. - * tbuild.ads: Likewise. - * tempdir.adb: Likewise. - * tempdir.ads: Likewise. - * terminals.c: Likewise. - * tracebak.c: Likewise. - * tree_gen.adb: Likewise. - * tree_gen.ads: Likewise. - * tree_in.adb: Likewise. - * tree_in.ads: Likewise. - * tree_io.adb: Likewise. - * tree_io.ads: Likewise. - * treepr.adb: Likewise. - * treepr.ads: Likewise. - * ttypes.ads: Likewise. - * types.adb: Likewise. - * types.ads: Likewise. - * types.h: Likewise. - * uintp.adb: Likewise. - * uintp.ads: Likewise. - * uintp.h: Likewise. - * uname.adb: Likewise. - * uname.ads: Likewise. - * urealp.adb: Likewise. - * urealp.ads: Likewise. - * urealp.h: Likewise. - * usage.adb: Likewise. - * usage.ads: Likewise. - * validsw.adb: Likewise. - * validsw.ads: Likewise. - * warnsw.adb: Likewise. - * warnsw.ads: Likewise. - * widechar.adb: Likewise. - * widechar.ads: Likewise. - * xeinfo.adb: Likewise. - * xnmake.adb: Likewise. - * xoscons.adb: Likewise. - * xr_tabls.adb: Likewise. - * xr_tabls.ads: Likewise. - * xref_lib.adb: Likewise. - * xref_lib.ads: Likewise. - * xsinfo.adb: Likewise. - * xsnamest.adb: Likewise. - * xtreeprs.adb: Likewise. - * xutil.adb: Likewise. - * xutil.ads: Likewise. - -2020-06-02 Javier Miranda <miranda@adacore.com> - - * sem_ch3.adb (Analyze_Object_Declaration): Set attribute - Expansion_Delayed on aggregates that initialize an object that - has aspect alignment or address clause. Done to allow ther - initialization by means of multiple assignments. - * exp_ch3.adb (Expand_N_Object_Declaration): Resolve delayed - aggregates. This patch complements the patch applied to - sem_ch3.adb - -2020-06-02 Javier Miranda <miranda@adacore.com> - - * sem_util.adb (Ensure_Minimum_Decoration): New subprogram that - ensures the minimum decoration required by - Requires_Transient_Scope() to provide its functionality when the - entity is not frozen. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * exp_ch4.adb (Expand_N_Op_Divide): Remove code dealing with - the Treat_Fixed_As_Integer flag. - (Expand_N_Op_Multiply): Likewise. - * exp_fixd.adb (Build_Divide): Do the division in an integer - type long enough to hold both operands and convert the result - to the type of the LHS. Do not set Treat_Fixed_As_Integer. - (Build_Multiply): Do not set Treat_Fixed_As_Integer. - (Build_Rem): Likewise. - * sem_ch4.adb (Analyze_Arithmetic_Op): Remove code dealing with - the Treat_Fixed_As_Integer flag. - (Check_Arithmetic_Pair): Likewise. - * sinfo.ads (Treat_Fixed_As_Integer): Delete. - (N_Has_Treat_Fixed_As_Integer): Likewise. - (Set_Treat_Fixed_As_Integer): Likewise. - * sinfo.adb (Treat_Fixed_As_Integer): Likewise. - (Set_Treat_Fixed_As_Integer): Likewise. - * sprint.ads (Syntax Extensions): Remove '#' special character. - * sprint.adb (Process_TFAI_RR_Flags): Delete. - (Sprint_Node_Actual) <N_Op_Divide>: Print '@' manually. - <N_Op_Multiply>: Likewise. - <N_Op_Mod>: Do not print '#'. - <N_Op_Rem>: Likewise. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb (Others_Check): In the positional case, use the - general expression for the comparison only when needed. - * exp_attr.adb (Expand_Fpt_Attribute;): Use a simple conversion - to the target type instead of an unchecked conversion to the - base type to do the range check, as in the other cases. - (Expand_N_Attribute_Reference) <Attribute_Storage_Size>: Do the - Max operation in the type of the storage size variable, and use - Convert_To as in the other cases. - * tbuild.adb (Convert_To): Do not get rid of an intermediate - conversion to Universal_Integer here... - * sem_res.adb (Simplify_Type_Conversion): ...but here instead. - -2020-06-02 Bob Duff <duff@adacore.com> - - * doc/gnat_ugn/gnat_utility_programs.rst: Update documentation - for --RM-style-spacing. - -2020-06-02 Bob Duff <duff@adacore.com> - - * doc/gnat_ugn/gnat_utility_programs.rst: Add documentation for - --[no-]compact switch. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * exp_aggr.adb (Build_Array_Aggr_Code): Set the type of the PAT - on the zero used to clear the array. - * exp_attr.adb (Expand_N_Attribute_Reference) - <Attribute_Alignment>: In the CW case, directly convert from the - alignment's type to the target type if the parent is an - unchecked conversion. - * sem_res.adb (Set_String_Literal_Subtype): In the dynamic case, - use the general expression for the upper bound only when needed. - Set the base type of the index as the type of the low bound. - (Simplify_Type_Conversion): Do an intermediate conversion to the - root type of the target type if the operand is an integer - literal. - * tbuild.adb (Convert_To): Get rid of an intermediate conversion - to Universal_Integer if the inner expression has integer tyoe. - * libgnat/a-sequio.adb (Byte_Swap): Make use of an equivalent - static expression in the case statement. - -2020-06-02 Thomas Quinot <quinot@adacore.com> - - * par_sco.adb (Traverse_Degenerate_Subprogram): Set statement - code to 'X'. - * scos.ads: Update comment documenting SCO data. - -2020-06-02 Gary Dismukes <dismukes@adacore.com> - - * exp_unst.adb (Register_Subprogram): Test for Address_Taken (in - addition to the existing test for In_Synchonized_Unit) when - deciding whether to reset the Reachable flag on all subprograms - enclosing the subprogram being registered. - -2020-06-02 Justin Squirek <squirek@adacore.com> - - * sem_ch6.adb (Check_Return_Obj_Accessibility): Avoid use of - parent node pointers so we are not relying on expansion done in - GNATprove mode. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * exp_attr.adb (Expand_N_Attribute_Reference) - <Attribute_Alignment>: Adjust comment and compare against proper - type. - -2020-06-02 Gary Dismukes <dismukes@adacore.com> - - * exp_unst.adb (Visit_Node): When visiting array attribute - nodes, apply Get_Referenced_Object to the attribute prefix, to - handle prefixes denoting renamed objects by picking up the Etype - of the renamed object rather than the possibly unconstrained - nominal subtype of the renaming declaration's Entity. - * sem_util.ads (Get_Referenced_Object): Update comment to - clearly indicate that any kind of node can be passed to this - function. - * sem_util.adb (Get_Referenced_Object): Add test of Is_Object to - the condition, to allow for passing names that denote types and - subtypes. - -2020-06-02 Bob Duff <duff@adacore.com> - - * snames.ads-tmpl: Add comments explaining that enumeration - types have to be kept in synch with subtypes of Name_Id. - -2020-06-02 Piotr Trojanek <trojanek@adacore.com> - - * sem_util.adb (Check_No_Hidden_State): Remove dead code. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * exp_pakd.adb (Expand_Packed_Bit_Reference): Change type of - reference from Universal_Integer to Standard_Natural. - -2020-06-02 Piotr Trojanek <trojanek@adacore.com> - - * sem_prag.adb (Collect_States_And_Objects): Call itself on - declaration of nested packages; append abstract states - one-by-one, so that in recursive call we do not overwrite the - ones that have been already collected. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * exp_atag.ads (Build_Inherit_Predefined_Prims): Change type - of Num_Predef_Prim parameter from Int to Nat. - * exp_atag.adb (Build_Range): New procedure. - (Build_Val): Likewise. - (Build_CW_Membership): Call Build_Val. - (Build_Get_Predefined_Prim_Op_Address): Likewise. - (Build_Inherit_CPP_Prims): Likewise. - (Build_Get_Prim_Op_Address): Likewise. - (Build_Set_Predefined_Prim_Op_Address): Likewise. - (Build_Inherit_Prims): Call Build_Range. - (Build_Inherit_Predefined_Prims): Likewise. Change type of - Num_Predef_Prim parameter from Int to Nat. - -2020-06-02 Gary Dismukes <dismukes@adacore.com> - - * sem_ch3.adb: Two typo fixes. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch3.adb (Replace_Discriminants): Preserve the Etype of the - Name of N_Variant_Part nodes when rewriting it. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch3.adb (Signed_Integer_Type_Declaration): Change the type - of the bounds from Universal_Integer to Implicit_Base. - -2020-06-02 Arnaud Charlet <charlet@adacore.com> - - * bcheck.adb, binde.adb, bindo-diagnostics.adb, checks.adb, - exp_aggr.adb, exp_ch3.adb, exp_ch4.adb, exp_ch7.adb, - exp_ch9.adb, gnatname.adb, sem_case.adb, sem_ch13.adb, - sem_ch5.adb, sem_prag.adb, sem_util.adb, uintp.adb, urealp.adb, - xoscons.adb, xr_tabls.adb, xref_lib.adb: Initialize objects more - explicitly and add corresponding assertions. Remove dead code. - Also add a few Annotate pragmas to help static analysis. - * libgnat/a-caldel.adb, libgnat/a-calend.adb, - libgnat/a-ngcoty.adb, libgnat/a-ngelfu.adb, - libgnat/a-ngrear.adb, libgnat/a-strfix.adb, - libgnat/g-calend.adb, libgnat/g-catiio.adb, - libgnat/g-comlin.adb, libgnat/g-debpoo.adb, - libgnat/g-dirope.adb, libgnat/g-hesorg.adb, - libgnat/g-pehage.adb, libgnat/g-socket.adb, libgnat/i-cobol.adb, - libgnat/s-dwalin.adb, libgnat/s-dwalin.ads, - libgnat/s-fatgen.adb, libgnat/s-gearop.adb, - libgnat/s-genbig.adb, libgnat/s-imgrea.adb, - libgnat/s-os_lib.adb, libgnat/s-rannum.adb, - libgnat/s-regpat.adb, libgnat/s-trasym__dwarf.adb, - libgnat/s-valrea.adb: Ditto. - -2020-06-02 Eric Botcazou <ebotcazou@adacore.com> - - * sem_ch3.adb (Replace_Components): Rename into... - (Replace_Discriminants): ...this. Replace girder discriminants - with non-girder ones. Do not replace components. - * sem_ch13.adb (Check_Record_Representation_Clause): Deal with - non-girder discriminants correctly. - -2020-06-02 Piotr Trojanek <trojanek@adacore.com> - - * lib-xref-spark_specific.adb (Create_Heap): use a new variant - of Name_Enter to directly converts String to Make_Id. - -2020-06-02 Gary Dismukes <dismukes@adacore.com> - - * exp_attr.adb, par-ch4.adb, par-util.adb, scans.ads, scng.adb, - sem_attr.adb, sem_ch4.adb, sinfo.ads: Typo corrections and minor - reformatting. - -2020-06-02 Arnaud Charlet <charlet@adacore.com> - - * snames.ads-tmpl (Name_Img, Attribute_Img): Make it an - attribute returning renamable functions. - -2020-06-02 Yannick Moy <moy@adacore.com> - - * sem_prag.adb, sem_prag.ads (Set_Overflow_Mode): New procedure - to set overflow mode. - -2020-06-02 Piotr Trojanek <trojanek@adacore.com> - - * contracts.adb, einfo.adb, exp_ch9.adb, sem_ch12.adb, - sem_ch4.adb, sem_ch7.adb, sem_ch8.adb, sem_elab.adb, - sem_type.adb, sem_util.adb: Reuse Is_Package_Or_Generic_Package - where possible (similarly, reuse Is_Concurrent_Type if it was - possible in the same expressions). - -2020-05-30 Arnaud Charlet <charlet@adacore.com> - - * Makefile.rtl (ADA_INCLUDE_SRCS): Replace Makefile.adalib by - libada.gpr and associated project files. - (g-debpoo.o): Add missing rule to ensure subprograms are not reordered. - (setup-rts): Add generation of libgnat/libgnarl.lst. - (LIBGNAT_SRCS): Remove thread.c which is part of libgnarl. - * tracebak.c, tb-gcc.c: Merged the two files to simplify dependencies. - * libgnarl/libgnarl.gpr, libgnat/libada.gpr, - libgnat/libgnat.gpr, libgnat/libgnat_common.gpr: New files. - * doc/gnat_ugn/the_gnat_compilation_model.rst: Makefile.adalib - replaced by libada.gpr. - * libgnat/system-mingw.ads: Remove obsolete comment. - * gcc-interface/Makefile.in: Remove dependency on tb-gcc.c. - -2020-05-27 Martin Liska <mliska@suse.cz> - - * gnatvsn.ads: Bump Library_Version to 11. - -2020-05-26 Eric Botcazou <ebotcazou@adacore.com> - - PR ada/95333 - * gcc-interface/decl.c (gnat_to_gnu_param): Never make a variant of - the type. - -2020-05-26 Alexandre Oliva <oliva@adacore.com> - - * gcc-interface/lang-specs.h (ADA_DUMPS_OPTIONS): Define in - terms of DUMPS_OPTIONS. Replace occurrences of %{d*} %:dumps - with it. - -2020-05-26 Alexandre Oliva <oliva@adacore.com> - - * gcc-interface/lang-specs.h: Drop auxbase and auxbase-strip. - Use %:dumps instead of -dumpbase. Add %w for implicit .s - primary output. - * switch.adb (Is_Internal_GCC_Switch): Recognize dumpdir and - dumpbase-ext. Drop auxbase and auxbase-strip. - -2020-05-25 Yannick Moy <moy@adacore.com> - - * sem_util.adb (Check_No_Hidden_State): Stop propagation at - first block/task/entry. - -2020-05-25 Yannick Moy <moy@adacore.com> - - * doc/gnat_rm/implementation_defined_pragmas.rst: Document - changes to pragmas Compile_Time_Error/Compile_Time_Warning. - * gnat_rm.texi: Regenerate. - * libgnat/g-bytswa.adb: Change uses of Compile_Time_Error to - Compile_Time_Warning, as the actual expression may not always be - known statically. - * sem_prag.adb (Analyze_Pragma): Handle differently pragma - Compile_Time_Error in both compilation and in GNATprove mode. - (Validate_Compile_Time_Warning_Or_Error): Issue an error or - warning when the expression is not known at compile time. - * usage.adb: Add missing documentation for warning switches _c - and _r. - * warnsw.ads: Update comment. - -2020-05-25 Justin Squirek <squirek@adacore.com> - - * sem_ch6.adb (Check_Return_Obj_Accessibility): Use original - node to avoid looking at expansion done in GNATprove mode. - -2020-05-25 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity): Add new local variable - and use it throughout the function. - <E_Variable>: Rename local variable and adjust accordingly. In the - case of a renaming, materialize the entity if the renamed object is - an N_Expression_With_Actions node. - <E_Procedure>: Use Alias accessor function consistently. - -2020-05-25 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/misc.c (get_array_bit_stride): Get to the debug type, - if any, before calling gnat_get_array_descr_info. - -2020-05-25 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Tidy up. - (build_variant_list): Add GNAT_VARIANT_PART parameter and annotate its - variants if it is present. Adjust the recursive call by passing the - variant subpart of variants, if any. - (copy_and_substitute_in_layout): Rename GNU_SUBST_LIST to SUBST_LIST - and adjust throughout. For a type, pass the variant part in the - call to build_variant_list. - -2020-05-25 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_component_type): Cap the alignment - of the component type according to the component size. - -2020-05-25 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Add a - description of the various types associated with the unconstrained - type. Declare the fat pointer earlier. Set the current function - as context on the template type, and the fat pointer type on the - array type. Always mark the fat pointer type as artificial and set - it as the context for the pointer type to the array. Also reuse - GNU_ENTITY_NAME. Finish up the unconstrained type at the very end. - * gcc-interface/misc.c (gnat_get_array_descr_info): Do not handle - fat pointer types and tidy up accordingly. - * gcc-interface/utils.c (build_unc_object_type): Do not set the - context on the template type. - (gnat_pushdecl): Mark the canonical fat pointer types as artificial. - -2020-05-25 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/gigi.h (operand_type): New static inline function. - * gcc-interface/trans.c (gnat_to_gnu): Do not suppress conversion - to the resulty type at the end for array types. - * gcc-interface/utils2.c (build_binary_op) <MODIFY_EXPR>: Do not - remove conversions between array types on the LHS. - -2020-05-12 Eric Botcazou <ebotcazou@adacore.com> - - * sem_aggr.ads (Is_Single_Aggregate): New function. - * sem_aggr.adb (Is_Others_Aggregate): Use local variable. - (Is_Single_Aggregate): New function to recognize an aggregate with - a single association containing a single choice. - * fe.h (Is_Others_Aggregate): Delete. - (Is_Single_Aggregate): New declaration. - * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Call - Is_Single_Aggregate instead of Is_Others_Aggregate. - -2020-05-12 Eric Botcazou <ebotcazou@adacore.com> - - PR ada/95035 - * gcc-interface/utils.c (packable_type_hasher::equal): Also compare - the scalar storage order. - (hash_packable_type): Also hash the scalar storage order. - (hash_pad_type): Likewise. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/*.[ch]: Update copyright year. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Access>: Assert that - the prefix is not a type. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/ada-tree.h (TYPE_PACKED_ARRAY_TYPE_P): Rename into... - (TYPE_BIT_PACKED_ARRAY_TYPE_P): ...this. - (TYPE_IS_PACKED_ARRAY_TYPE_P): Rename into... - (BIT_PACKED_ARRAY_TYPE_P): ...this. - (TYPE_IMPL_PACKED_ARRAY_P): Adjust to above renaming. - * gcc-interface/gigi.h (maybe_pad_type): Remove IS_USER_TYPE parameter. - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Adjust call - to maybe_pad_type. - <E_Ordinary_Fixed_Point_Type>: Remove const qualifiers for tree. - <E_Signed_Integer_Subtype>: Remove redundant test and redundant call - to associate_original_type_to_packed_array. Turn test into assertion. - Call associate_original_type_to_packed_array and modify gnu_entity_name - accordingly. Explicitly set the parallel type for GNAT encodings. - Call create_type_decl in the misaligned case before maybe_pad_type. - <E_Array_Type>: Do not use the name of the implementation type for a - packed array when not using GNAT encodings. - <E_Array_Subtype>: Move around setting flags. Use the result of the - call to associate_original_type_to_packed_array for gnu_entity_name. - <E_Record_Subtype>: Create XVS type and XVZ variable only if debug - info is requested for the type. - Call create_type_decl if a padded type was created for a type entity. - (gnat_to_gnu_component_type): Use local variable and adjust calls to - maybe_pad_type. - (gnat_to_gnu_subprog_type): Adjust call to maybe_pad_type. - (gnat_to_gnu_field): Likewise. - (validate_size): Adjust to renaming of macro. - (set_rm_size): Likewise. - (associate_original_type_to_packed_array): Adjust return type and - return the name of the original type if GNAT encodings are not used. - * gcc-interface/misc.c (gnat_get_debug_typ): Remove obsolete stuff. - (gnat_get_fixed_point_type_info): Remove const qualifiers for tree. - (gnat_get_array_descr_info): Likewise and set variables lazily. - Remove call to maybe_debug_type. Simplify a few computations. - (enumerate_modes): Remove const qualifier for tree. - * gcc-interface/utils.c (make_type_from_size): Adjust to renaming. - (maybe_pad_type): Remove IS_USER_TYPE parameter and adjust. Remove - specific code for implementation types for packed arrays. - (compute_deferred_decl_context): Remove const qualifier for tree. - (convert): Adjust call to maybe_pad_type. - (unchecked_convert): Likewise. - * gcc-interface/utils2.c (is_simple_additive_expressio): Likewise. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/utils2.c (build_binary_op) <ARRAY_RANGE_REF>: Use - build_nonshared_array_type to build the common type and declare it. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/misc.c (gnat_init_gcc_eh): Do not override the user - for -fnon-call-exceptions in default mode. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (lvalue_required_p) <N_Selected_Component>: - Merge with N_Slice. - <N_Allocator>: Move to... - (lvalue_for_aggregate_p): ...here. New function. - (Identifier_to_gnu): For an identifier with aggregate type, also - call lvalue_for_aggregate_p if lvalue_required_p returned false - before substituting the identifier with the constant. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (gnat_to_gnu): Do not wrap boolean values if - they appear in any kind of attribute references. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Deal - with qualified "others" aggregates in the memset case. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_param): Also back-annotate the - mechanism in the case of an Out parameter only passed by copy-out. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/gigi.h (change_qualified_type): Move around. - (maybe_vector_array): Likewise. - (maybe_padded_object): New static line function. - * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Component_Size>: - Remove useless code. - <Attr_Null_Parameter>: Remove obsolete code. - (Call_to_gn): Likewise. Use maybe_padded_object to remove padding. - (gnat_to_gnu): Likewise. - <N_String_Literal>: Do not add a useless null character at the end. - <N_Indexed_Component>: Likewise and remove obsolete code. - (add_decl_expr): Likewise. - (maybe_implicit_deref): Likewise. - * gcc-interface/utils.c (maybe_unconstrained_array): Likewise. - * gcc-interface/utils2.c (gnat_invariant_expr): Likewise. - -2020-05-09 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/utils2.c: Include builtins.h. - (known_alignment) <ADDR_EXPR>: Use DECL_ALIGN for DECL_P operands - and get_object_alignment for the rest. - -2020-05-08 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Force at - least the unit size for an aliased object of a constrained nominal - subtype whose size is variable. - -2020-05-08 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Deal - with artificial maximally-sized types designed by access types. - * gcc-interface/utils.c (packable_type_hash): New structure. - (packable_type_hasher): Likewise. - (packable_type_hash_table): New hash table. - (init_gnat_utils): Initialize it. - (destroy_gnat_utils): Destroy it. - (packable_type_hasher::equal): New method. - (hash_packable_type): New static function. - (canonicalize_packable_type): Likewise. - (make_packable_type): Make sure not to use too small a type for the - size of the new fields. Canonicalize the type if it is named. - -2020-05-08 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/trans.c (Raise_Error_to_gnu): Always compute a lower - bound and an upper bound for use by the -gnateE switch for range and - comparison operators. - -2020-05-08 Eric Botcazou <ebotcazou@adacore.com> - - * gcc-interface/decl.c (gnat_to_gnu_param): Do not make a variant of - the type in LTO mode. - -2020-05-04 Mikael Pettersson <mikpelinux@gmail.com> - - PR bootstrap/94918 - * mingw32.h: Prevent windows.h from including emmintrin.h on Cygwin64. - * s-oscons-tmplt.c (Serial_Port_Descriptor): Use System.Win32.HANDLE - also on Cygwin. - -2020-03-11 Richard Wai <richard@annexi-strayline.com> - - * gcc-interface/decl.c (gnat_to_gnu_entity): Also test Is_Public on - the Alias of the entitiy, if it is present, in the main assertion. - -2020-02-06 Alexandre Oliva <oliva@adacore.com> - - * raise-gcc.c (personality_body) [__ARM_EABI_UNWINDER__]: - Initialize barrier_cache.sp when ending phase1. + * gnatvsn.ads: Bump copyright year. -2020-01-04 Eric Botcazou <ebotcazou@adacore.com> +2021-01-01 Jakub Jelinek <jakub@redhat.com> - * gnatvsn.ads: Bump copyright year. + * gnat_ugn.texi: Bump @copying's copyright year. + * gnat_rm.texi: Likewise. -2020-01-01 Jakub Jelinek <jakub@redhat.com> +2021-01-01 Jakub Jelinek <jakub@redhat.com> - Update copyright years. + * ChangeLog-2020: Rotate ChangeLog. New file. - * gnat_ugn.texi: Bump @copying's copyright year. - * gnat_rm.texi: Likewise. -Copyright (C) 2020 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff --git a/gcc/ada/ChangeLog-2020 b/gcc/ada/ChangeLog-2020 new file mode 100644 index 0000000..5ce188d --- /dev/null +++ b/gcc/ada/ChangeLog-2020 @@ -0,0 +1,13978 @@ +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-tags.ads, libgnat/a-tags.adb (CW_Membership): Move + to spec to allow inlining. + +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * checks.adb: Remove, not used. + * checks.ads: Likewise. + * exp_ch6.adb: Likewise. + * exp_ch7.adb: Likewise. + * exp_ch7.ads: Likewise. + * exp_fixd.adb: Likewise. + * exp_tss.adb: Likewise. + * exp_tss.ads: Likewise. + * exp_util.adb: Likewise. + * exp_util.ads: Likewise. + * gnat1drv.adb: Likewise. + * libgnat/s-finmas.adb: Likewise. + * libgnat/s-finmas.ads: Likewise. + * libgnat/system-aix.ads: Likewise. + * libgnat/system-darwin-arm.ads: Likewise. + * libgnat/system-darwin-ppc.ads: Likewise. + * libgnat/system-darwin-x86.ads: Likewise. + * libgnat/system-djgpp.ads: Likewise. + * libgnat/system-dragonfly-x86_64.ads: Likewise. + * libgnat/system-freebsd.ads: Likewise. + * libgnat/system-hpux-ia64.ads: Likewise. + * libgnat/system-hpux.ads: Likewise. + * libgnat/system-linux-alpha.ads: Likewise. + * libgnat/system-linux-arm.ads: Likewise. + * libgnat/system-linux-hppa.ads: Likewise. + * libgnat/system-linux-ia64.ads: Likewise. + * libgnat/system-linux-m68k.ads: Likewise. + * libgnat/system-linux-mips.ads: Likewise. + * libgnat/system-linux-ppc.ads: Likewise. + * libgnat/system-linux-riscv.ads: Likewise. + * libgnat/system-linux-s390.ads: Likewise. + * libgnat/system-linux-sh4.ads: Likewise. + * libgnat/system-linux-sparc.ads: Likewise. + * libgnat/system-linux-x86.ads: Likewise. + * libgnat/system-lynxos178-ppc.ads: Likewise. + * libgnat/system-lynxos178-x86.ads: Likewise. + * libgnat/system-mingw.ads: Likewise. + * libgnat/system-qnx-aarch64.ads: Likewise. + * libgnat/system-rtems.ads: Likewise. + * libgnat/system-solaris-sparc.ads: Likewise. + * libgnat/system-solaris-x86.ads: Likewise. + * libgnat/system-vxworks-arm-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-arm-rtp.ads: Likewise. + * libgnat/system-vxworks-arm.ads: Likewise. + * libgnat/system-vxworks-e500-kernel.ads: Likewise. + * libgnat/system-vxworks-e500-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-e500-rtp.ads: Likewise. + * libgnat/system-vxworks-e500-vthread.ads: Likewise. + * libgnat/system-vxworks-ppc-kernel.ads: Likewise. + * libgnat/system-vxworks-ppc-ravenscar.ads: Likewise. + * libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-ppc-rtp.ads: Likewise. + * libgnat/system-vxworks-ppc-vthread.ads: Likewise. + * libgnat/system-vxworks-ppc.ads: Likewise. + * libgnat/system-vxworks-x86-kernel.ads: Likewise. + * libgnat/system-vxworks-x86-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-x86-rtp.ads: Likewise. + * libgnat/system-vxworks-x86-vthread.ads: Likewise. + * libgnat/system-vxworks-x86.ads: Likewise. + * libgnat/system-vxworks7-aarch64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-aarch64.ads: Likewise. + * libgnat/system-vxworks7-arm-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-arm.ads: Likewise. + * libgnat/system-vxworks7-e500-kernel.ads: Likewise. + * libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-e500-rtp.ads: Likewise. + * libgnat/system-vxworks7-ppc-kernel.ads: Likewise. + * libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-ppc-rtp.ads: Likewise. + * libgnat/system-vxworks7-ppc64-kernel.ads: Likewise. + * libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86-kernel.ads: Likewise. + * libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86-rtp.ads: Likewise. + * libgnat/system-vxworks7-x86_64-kernel.ads: Likewise. + * libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise. + * repinfo.adb: Likewise. + * repinfo.ads: Likewise. + * rtsfind.ads: Likewise. + * sem_aux.adb: Likewise. + * sem_aux.ads: Likewise. + * sem_ch13.adb: Likewise. + * sem_ch13.ads: Likewise. + * sem_util.adb (Validity_Checks_Suppressed, TSS, + Is_All_Null_Statements, Known_Non_Negative, + Non_Limited_Designated_Type, Get_Binary_Nkind, Get_Unary_Nkind, + Is_Protected_Operation, Number_Components, Package_Body, + Validate_Independence, Independence_Checks): Likewise; update + comments. + * targparm.adb: Likewise. + * targparm.ads (AAM, AAM_Str, Fractional_Fixed_Ops, + Frontend_Layout, Make_Detach_Call, Target_Has_Fixed_Ops, Detach, + Back_End_Layout, Create_Dynamic_SO_Ref, Get_Dynamic_SO_Entity, + Is_Dynamic_SO_Ref, Is_Static_SO_Ref, + Fractional_Fixed_Ops_On_Target): Likewise. + * validsw.adb (Save_Validity_Check_Options, + Set_Default_Validity_Check_Options): Likewise. + * validsw.ads: Likewise. + +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * symbols.ads, symbols.adb: Removed no longer used. + +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * sem_util.adb (New_Requires_Transient_Scope): Renamed + Requires_Transient_Scope. + (Requires_Transient_Scope, Old_Requires_Transient_Scope, + Results_Differ): Removed. + * debug.adb: Remove -gnatdQ. + +2020-12-17 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-valrea.adb (Need_Extra): Fix comment. + +2020-12-17 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch5.adb (Analyze_Case_Statement): Move modification of + Unblocked_Exit_Count after early return statements; fix typo in + comment. + +2020-12-17 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch5.adb (Analyze_Case_Statement): Change local variable + Exp to constant; remove unreferenced Last_Choice variable; + reduce scope of other variables. + (Analyze_If_Statement): Reduce scope of a local variable; add + comment. + +2020-12-17 Piotr Trojanek <trojanek@adacore.com> + + * opt.ads (Multiple_Unit_Index): Refine type from Int to Nat. + +2020-12-17 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.adb (In_Check_Node): Add guard and rename Node to + Par, just like it is done in surrounding routines, e.g. + In_Assertion_Expression_Pragma and In_Generic_Formal_Package. + +2020-12-17 Bob Duff <duff@adacore.com> + + * libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads, + libgnat/a-cdlili.adb, libgnat/a-cdlili.ads, + libgnat/a-cidlli.adb, libgnat/a-cidlli.ads, + libgnat/a-cobove.adb, libgnat/a-cobove.ads, + libgnat/a-coinve.adb, libgnat/a-coinve.ads, + libgnat/a-convec.adb, libgnat/a-convec.ads: Add *_Vector + operations, remove default for Count, rename Append_One to be + Append. + +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * sem_res.adb (Resolve_Declare_Expression): Need to establish a + transient scope in case Expression (N) requires actions to be + wrapped. Code cleanup. + * exp_ch7.adb, exp_ch11.adb: Code cleanup. + +2020-12-17 Piotr Trojanek <trojanek@adacore.com> + + * par-ch3.adb (P_Identifier_Declarations): Reuse + Error_Msg_Ada_2020_Feature for object renaming without subtype. + * par-ch4.adb (P_Primary): Likewise for target name. + (P_Iterated_Component_Association): Likewise for iterated + component. + (P_Declare_Expression): Likewise for declare expression. + * par-ch6.adb (P_Formal_Part): Likewise for aspect on formal + parameter. + * sem_aggr.adb (Resolve_Delta_Aggregate): Ditto. + * sem_ch8.adb (Analyze_Object_Renaming): Reuse + Error_Msg_Ada_2020_Feature. + * sem_ch13.adb (Validate_Aspect_Aggregate): Reuse + Error_Msg_Ada_2020_Feature; use lower case for "aspect" and + don't use underscore for "Ada_2020"; don't give up on analysis + in Ada 2012 mode. + (Validate_Aspect_Stable_Properties): Reuse + Error_Msg_Ada_2020_Feature; use lower case for "aspect"; minor + style fixes. + +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * sem_ch4.adb (Analyze_Selected_Component): Request a compile + time error replacement in Apply_Compile_Time_Constraint_Error + in case of an invalid field. + * sem_ch3.adb (Create_Constrained_Components): Take advantage of + Gather_Components also in the case of a record extension and + also constrain records in the case of compile time known discriminant + values, as already done in gigi. + * sem_util.ads, sem_util.adb (Gather_Components): New parameter + Allow_Compile_Time to allow compile time known (but non static) + discriminant values, needed by Create_Constrained_Components, + and new parameter Include_Interface_Tag. + (Is_Dependent_Component_Of_Mutable_Object): Use Original_Node to + perform check on the original tree. + (Is_Object_Reference): Likewise. Only call Original_Node when + relevant via a new function Safe_Prefix. + (Is_Static_Discriminant_Component, In_Check_Node): New. + (Is_Actual_Out_Or_In_Out_Parameter): New. + * exp_ch4.adb (Expand_N_Selected_Component): Remove no longer needed + code preventing evaluating statically discriminants in more cases. + * exp_ch5.adb (Expand_N_Loop_Statement): Simplify expansion of loops + with an N_Raise_xxx_Error node to avoid confusing the code generator. + (Make_Component_List_Assign): Try to find a constrained type to + extract discriminant values from, so that the case statement + built gets an opportunity to be folded by + Expand_N_Case_Statement. + (Expand_Assign_Record): Update comments, code cleanups. + * sem_attr.adb (Analyze_Attribute): Perform most of the analysis + on the original prefix node to deal properly with a prefix rewritten + as a N_Raise_xxx_Error. + * sem_ch5.adb (Analyze_Loop_Parameter_Specification): Handle properly + a discrete subtype definition being rewritten as N_Raise_xxx_Error. + * sem_ch8.adb (Analyze_Object_Renaming): Handle N_Raise_xxx_Error + nodes as part of the expression being renamed. + * sem_eval.ads, sem_eval.adb (Fold, Eval_Selected_Component): New. + (Compile_Time_Known_Value, Expr_Value, Expr_Rep_Value): Evaluate + static discriminant component values. + * sem_res.adb (Resolve_Selected_Component): Call + Eval_Selected_Component. + +2020-12-17 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch4.adb (Expand_N_Unchecked_Type_Conversion): Remove + folding of discrete values. + * exp_intr.adb (Expand_Unc_Conversion): Analyze, resolve and + evaluate (if possible) calls to instances of + Ada.Unchecked_Conversion after they have been expanded into + N_Unchecked_Type_Conversion. + * sem_eval.adb (Eval_Unchecked_Conversion): Add folding of + discrete values. + +2020-12-17 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Likewise. + * exp_imgv.adb (Expand_Value_Attribute): Use RE_Value_Long_Float in + lieu of RE_Value_Long_Long_Float as fallback for fixed-point types. + Also use it for Long_Long_Float if it has same size as Long_Float. + * libgnat/s-imgrea.adb: Replace Powten_Table with Powen_LLF. + * libgnat/s-powflt.ads: New file. + * libgnat/s-powlfl.ads: Likewise. + * libgnat/s-powtab.ads: Rename to... + * libgnat/s-powllf.ads: ...this. + * libgnat/s-valflt.ads: Add with clause for System.Powten_Flt and + pass its table as actual parameter to System.Val_Real. + * libgnat/s-vallfl.ads: Likewise for System.Powten_LFlt. + * libgnat/s-valllf.ads: Likewise for System.Powten_LLF. + * libgnat/s-valrea.ads: Add Maxpow and Powten_Address parameters. + * libgnat/s-valrea.adb: Add pragma Warnings (Off). + (Need_Extra): New boolean constant. + (Precision_Limit): Set it according to Need_Extra. + (Impl): Adjust actual parameter. + (Integer_to_Rea): Add assertion on the machine radix. Take into + account the extra digit only if Need_Extra is true. Reimplement + the computation of the final value for bases 2, 4, 8, 10 and 16. + * libgnat/s-valued.adb (Impl): Adjust actual parameter. + (Scan_Decimal): Add pragma Unreferenced. + (Value_Decimal): Likewise. + * libgnat/s-valuef.adb (Impl): Adjust actual parameter. + * libgnat/s-valuer.ads (Floating): Remove. + (Round): New formal parameter. + * libgnat/s-valuer.adb (Round_Extra): New procedure. + (Scan_Decimal_Digits): Use it to round the extra digit if Round + is set to True in the instantiation. + (Scan_Integral_Digits): Likewise. + +2020-12-17 Erwan Le Guillou <leguillou@adacore.com> + + * libgnat/system-lynxos178-ppc.ads, + libgnat/system-lynxos178-x86.ads: Fix small typo in comments. + +2020-12-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_dbug.adb (Get_Encoded_Name): Generate encodings for fixed + point types only if -fgnat-encodings=all is specified. + +2020-12-17 Justin Squirek <squirek@adacore.com> + + * checks.adb (Build_Discriminant_Checks): Add condition to + replace references to the current instance of the type when we + are within an Init_Proc. + (Replace_Current_Instance): Examine a given node and replace the + current instance of the type with the corresponding _init + formal. + (Search_And_Replace_Current_Instance): Traverse proc which calls + Replace_Current_Instance in order to replace all references + within a given expression. + +2020-12-17 Piotr Trojanek <trojanek@adacore.com> + + * par-ch12.adb (P_Formal_Derived_Type_Definition): Complain + about formal type with aspect specification, which only become + legal in Ada 2020. + * par-ch9.adb (P_Protected_Operation_Declaration_Opt): Reuse + Error_Msg_Ada_2005_Extension. + (P_Entry_Declaration): Likewise. + * scng.adb (Scan): Improve diagnostics for target_name; emit + error, but otherwise continue in earlier than Ada 2020 modes. + +2020-12-17 Ed Schonberg <schonberg@adacore.com> + + * libgnat/a-cbsyqu.ads (Implementation): Provide a box + initialization for the element array used internally to + represent the queue, so that its components are properly + initialized if the given element type has default + initialization. Suppress warnings on the rest of the package in + case the element type has no default or discriminant, because it + is bound to be confusing to the user. + +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * sem_util.adb (Inherit_Predicate_Flags): No-op before Ada 2012. + +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * exp_ch7.adb (Make_Final_Call, Make_Init_Call): Take protected + types into account. + * sem_util.ads: Fix typo. + +2020-12-17 Yannick Moy <moy@adacore.com> + + * checks.adb: Rework error messages. + * exp_ch3.adb: Likewise. + * freeze.adb: Likewise. + * lib-load.adb: Likewise. + * par-ch12.adb: Likewise. + * par-ch3.adb: Likewise. + * par-ch4.adb: Likewise. + * par-ch9.adb: Likewise. + * sem_aggr.adb: Likewise. + * sem_attr.adb: Likewise. + * sem_cat.adb: Likewise. + * sem_ch10.adb: Likewise. + * sem_ch12.adb: Likewise. + (Instantiate_Type): Fix CODEFIX comment, applicable only on + continuation message, and identify the second message as a + continuation. + * sem_ch13.adb: Rework error messages. + * sem_ch3.adb: Likewise. + * sem_ch4.adb: Likewise. + * sem_ch5.adb: Likewise. + * sem_ch6.adb: Likewise. + * sem_ch8.adb: Likewise. + * sem_ch9.adb: Likewise. + * sem_prag.adb: Likewise. + * sem_res.adb: Likewise. + * sem_util.adb: Likewise. + (Wrong_Type): Fix CODEFIX comment, applicable only on + continuation message, and identify the second message as a + continuation. + * symbols.adb: Rework error messages. + +2020-12-17 Arnaud Charlet <charlet@adacore.com> + + * sem_attr.adb (OK_Self_Reference): Return True if node does not + come from source (e.g. a rewritten aggregate). + +2020-12-17 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Parse_Aspect_Stable_Properties): Fix style; + limit the scope of local variables; remove extra assignment in + Extract_Entity. + (Validate_Aspect_Stable_Properties): Simplify with procedural + Next. + +2020-12-16 Arnaud Charlet <charlet@adacore.com> + + * ali.ads, ali.adb, bindo-writers.adb, lib-writ.adb (Scope): + Renamed to IS_Scope. + +2020-12-16 Joffrey Huguet <huguet@adacore.com> + + * libgnat/a-strfix.ads: Add postconditions and contract cases to + subprograms. + +2020-12-16 Ed Schonberg <schonberg@adacore.com> + + * sem_ch5.adb (Analyze_Iterator_Specification): If iterator + filter is present, preanalyze filter without expansion. + (Analyze_Loop_Parameter_Specification): When + loop_Parameter_Specification is rewritten as + Iterator_Specification, transfer Iterator_Filter if present. + +2020-12-16 Doug Rupp <rupp@adacore.com> + + * libgnat/s-objrea.ads (Object_Arch): Add ARM enum + * libgnat/s-objrea.adb (Initialize): Add EM_ARM case. + (Read_Address): Add ARM case to 32bit read. + * Makefile.rtl: Add trasym units to the runtime for armhf-linux. + +2020-12-16 Dmitriy Anisimkov <anisimko@adacore.com> + + * libgnat/g-expect.adb (Non_Blocking_Spawn): Deallocate elements + on Arg_List after calling Set_Up_Child_Communications. + +2020-12-16 Piotr Trojanek <trojanek@adacore.com> + + * par-ch3.adb (P_Modular_Type_Definition): Remove colon from + error message. + * sem_ch11.adb (Check_Duplication): Likewise. + * sem_ch3.adb (Derived_Type_Declaration): Likewise. + +2020-12-16 Piotr Trojanek <trojanek@adacore.com> + + * par-ch12.adb (P_Formal_Object_Declarations): Refine types to + Pos. + +2020-12-16 Piotr Trojanek <trojanek@adacore.com> + + * impunit.adb (Not_Impl_Defined_Unit): Fix typo in iteration + over Non_Imp_File_Names_12 array. + +2020-12-16 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch9.adb, sem_warn.adb: Simplify membership test. + +2020-12-16 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch6.adb, exp_util.adb, sem_ch4.adb, sem_disp.adb, + sem_elab.adb: Simplify membership test. + +2020-12-16 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-powtab.ads (Maxpow): Use explicit formula in comment. + +2020-12-16 Philippe Gil <gil@adacore.com> + + * libgnarl/s-tporft.adb (Register_Foreign_Thread): Set + Global_Task_Lock_Nesting before using allocator. + +2020-12-16 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-valrea.adb (Maxexp32): New constant array. + (Maxexp64): Likewise. + (Maxexp80): Likewise. + (Integer_to_Real): New local constants Maxexp and B. + When the exponent is too negative, do the divison in two steps. + +2020-12-16 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst + (Test_Case): Change integer to float literals. + * gnat_rm.texi: Regenerate. + +2020-12-16 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Analyze_Aspect_Specifications): Add a codefix + for extra parentheses around aspect Annotate expression; reject + "(null record)" aggregate and extra parentheses around aspect + Test_Case expression. + * sem_prag.adb (Analyze_Pragma): Reject "null", "(null record)" + and extra parentheses around pragma Contract_Cases; likewise for + pragma Subprogram_Variant. + +2020-12-16 Dmitriy Anisimkov <anisimko@adacore.com> + + * adaint.h (__gnat_in_child_after_fork): New flag to express + child process side after fork call. + * adaint.c (__gnat_portable_spawn): Set flag + __gnat_in_child_after_fork. + * expect.c (__gnat_expect_fork): Set __gnat_in_child_after_fork + to one on child side. + * libgnat/memtrack.adb + (In_Child_After_Fork): Flag to disable memory tracking. + (Allow_Trace): New routine defining if memory should be tracked. + (Alloc, Realloc, Free): Use Allow_Trace in "if" condition + instead of First_Call. + +2020-12-16 Yannick Moy <moy@adacore.com> + + * libgnat/a-tifiio.adb: Mark body not in SPARK. + * libgnat/a-tifiio.ads: Mark spec in SPARK. + * libgnat/a-tifiio__128.adb: Mark body not in SPARK. + +2020-12-16 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-valuer.adb (Scan_Decimal_Digits): Tweak overflow test. + (Scan_Integral_Digits): Likewise. + +2020-12-16 Pascal Obry <obry@adacore.com> + + * s-oscons-tmplt.c: Add some OS constants. + +2020-12-15 Pascal Obry <obry@adacore.com> + + * libgnat/g-sercom__linux.adb (Set): Use cfsetospeed and + cfsetispeed to set the baud rate. Clear non-blocking serial port + status when blocking is requested. + +2020-12-15 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-valrea.adb (Integer_to_Real): Always use Extra. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * par-ch5.adb (P_Condition): Simplify condition for warning + about extra parens and make it easier to understand. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * errout.ads (Error_Msg_Ada_2005_Extension): New routine (spec). + * errout.adb (Error_Msg_Ada_2005_Extension): New routine (body). + * par-ch10.adb: Reuse new routine; correct casing for "LIMITED + WITH". + * par-ch11.adb: Likewise. + * par-ch12.adb: Likewise. + * par-ch3.adb: Likewise. + * par-ch4.adb: Likewise; replace "box" with "<>". + * par-ch6.adb: Likewise. + * par-ch9.adb: Likewise; correct casing for "THEN ABORT". + +2020-12-15 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_ugn/gnat_and_program_execution.rst: Minor fix. + * gnat_ugn.texi: Regenerate. + * libgnat/s-valuer.ads (Precision_Limit): New formal parameter. + * libgnat/s-valuer.adb (Precision_Limit): Remove. + (Scan_Decimal_Digits): Robustify overflow check. + (Scan_Integral_Digits): Likewise. + * libgnat/s-valrea.adb: Add assertion on the size of the unsigned + type and instantiate System.Value_R with the mantissa limit. + (Integer_to_Real): Add Extra parameter and take it into account. + (Scan_Real): Pass Extra to Integer_to_Real. + (Value_Real): Likewise. + * libgnat/s-valued.adb: Add assertion on the size of the unsigned + type and instantiate System.Value_R with the mantissa limit. + * libgnat/s-valuef.adb: Likewise. + +2020-12-15 Justin Squirek <squirek@adacore.com> + + * contracts.adb, contracts.ads (Build_Postconditions_Procedure): + Add declarations for Postcond_Enabled, + Result_Object_For_Postcondition, and + Return_Success_For_Postcond, and place all postconditions within + an if statement to control their execution for interactions when + cleanup actions get generated. + (Get_Postcond_Enabled): Created to fetch object declared to + handle new expansion of postconditions. + (Get_Result_Object_For_Postcond): Created to fetch object + declared to handle new expansion of postconditions. + (Get_Return_Success_For_Postcond): Created to fetch object + declared to handle new expansion of postconditions. + * einfo.adb, einfo.ads: Modify flag Stores_Attribute_Old_Prefix + to apply to constants, variables, and types. + * exp_ch6.adb (Add_Return): Add assignment to + Return_Success_For_Postcond. + (Expand_Non_Function_Return): Add assignment to + Return_Success_For_Postcond + (Expand_Simple_Function_Return): Add assignment to + Result_Object_For_Postcond and Return_Success_For_Postcond. + * exp_ch7.adb (Build_Finalization_Master): Mark finalization + masters which finalize types created store 'Old objects as + storing 'Old objects. + (Build_Finalizer): Created to generated a unified and special + expansion for finalization when postconditions are present. + (Build_Finalizer_Helper): Renamed Build_Finalizer and added + parameter to facilitate the creation of separate finalization + routines for 'Old objects and general objects. + (Create_Finalizer): Add condition for the insertion of the + finalizer spec to avoid malformed trees. + (Expand_Cleanup_Actions): Move _postconditions and related + declarations to the new declarative section. Fix the loop to + properly stop at the subprogram declaration for the + postconditions procedure and exclude its body from being moved + to the new list of declarations to avoid freezing issues. + * exp_prag.adb (Expand_Attributes): Mark temporary created to + store 'Old objects as storing a 'Old attribute. + * sem_ch6.adb (Find_What_Applies_To): Remove strange exception + to postconditions when traversing the scope stack. + * sem_prag.adb (Find_Related_Declaration_Or_Body): Use the newly + created Enclosing_HSS function to find the HSS for a potentially + nested statement. + * sem_util.adb, sem_util.ads (Declare_Indirect_Temp): Mark types + created to store 'Old objects as storing 'Old attributes. + (Enclosing_HSS): Created to find the enclosing handled sequence + of statements for a given statement. + * snames.ads-tmpl: Add multiple names to aid in the expansion of + finalization and to control the evaluation of postconditions. + Including _finalization_controller, a new routine to centralize + finalization actions and postcondition evaluation. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * par-ch5.adb (P_Loop_Parameter_Specification): Complain about + missing -gnat2020 switch. + (P_Iterator_Specification): Likewise. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Simplify with + Append_New. + +2020-12-15 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Remove s-fatsfl$(objext) + and add s-valflt$(objext), s-vallfl$(objext), s-valllf$(objext). + * exp_attr.adb (Find_Fat_Info): Merge Short_Float and Float cases. + * exp_imgv.adb (Expand_Value_Attribute): Replace RE_Value_Real with + RE_Value_Long_Long_Float for fixed-point types and use appropriate + base type for floating-point types. + * rtsfind.ads (RTU_Id): Remove System_Fat_IEEE_Long_Float, + System_Fat_IEEE_Short_Float and System_Val_Real, add System_Val_Flt, + System_Val_LFlt and System_Val_LLF. + (RE_Id): Remove RE_Attr_IEEE_Long, RE_Fat_IEEE_Long, + RE_Attr_IEEE_Short, RE_Fat_IEEE_Short, RE_Attr_Short_Float, add + RE_Value_Float, RE_Value_Long_Float, RE_Value_Long_Long_Float, + (RE_Unit_Table): Likewise. + * libgnat/a-ticoau.ads: Add with clause for Float_Aux and make the + package generic. + (Get): Change parameter types to Num. + (Put): Likewise. + (Gets): Likewise. + (Puts): Likewise. + * libgnat/a-ticoau.adb: Remove clause and renaming for Float_Aux. + (Get): Change parameter types to Num. + (Gets): Likewise. + (Put): Likewise. + (Puts): Likewise. Add conversion to Long_Long_Float. + * libgnat/a-ticoio.adb: Remove with clause for Ada.Text_IO, add with + clause for Float_Aux, add with and use clauses for System.Val_Flt, + System.Val_LFlt and System.Val_LLF. Instantiate Float_Aux and + Complex_Aux on Float, Long_Float, and Long_Long_Float. + (OK_Float): New boolean constant. + (OK_Long_Float): Likewise. + (Get): Call appropriate Get routine from auxiliary package. + (Get): Call appropriate Gets routine from auxiliary package. + (Put): Call appropriate Put routine from auxiliary package. + (Put): Call appropriate Puts routine from auxiliary package. + * libgnat/a-tideau.adb: Remove with and use clause for Float_Aux. + * libgnat/a-tifiau.adb: Likewise. + * libgnat/a-tifiio.adb: Add with and use clause for System.Val_LLF. + Instantiate Float_Aux on Long_Long_Float. + (Get): Adjust call to Get routine from auxiliary package. + (Get): Adjust call to Gets routine from auxiliary package. + (Put): Adjust call to Put routine from auxiliary package. + (Put): Adjust call to Puts routine from auxiliary package. + * libgnat/a-tifiio__128.adb: Likewise. + (Get): Likewise. + (Get): Likewise. + (Put): Likewise. + (Put): Likewise. + * libgnat/a-tiflau.ads: Make the package generic. + (Get): Change parameter type to Num. + (Put): Likewise. + (Gets): Likewise. + (Puts): Likewise. + * libgnat/a-tiflau.adb: Remove clauses for System.Val_Real. + (Get): Change parameter type to Num and call Scan routine. + (Gets): Likewise. + (Load_Real): Move to... + (Put): Change parameter type and add conversion to Long_Long_Float. + (Puts): Likewise. + * libgnat/a-tiflio.adb: Add with and use clauses for System.Val_Flt, + System.Val_LFlt and System.Val_LLF. Instantiate Float_Aux on Float, + Long_Float and Long_Long_Float. + (OK_Float): New boolean constant. + (OK_Long_Float): Likewise. + (Get): Call appropriate Get routine from auxiliary package. + (Get): Call previous variant. + (Get): Call appropriate Gets routine from auxiliary package. + (Put): Call appropriate Put routine from auxiliary package. + (Put): Call previous variant. + (Put): Call appropriate Puts routine from auxiliary package. + * libgnat/a-tigeau.ads (Load_Real): New procedure. + * libgnat/a-tigeau.adb (Load_Real): ...here. + * libgnat/a-wtcoau.ads: Add with clause for Float_Aux and make the + package generic. + (Get): Change parameter types to Num. + (Put): Likewise. + (Gets): Likewise. + (Puts): Likewise. + * libgnat/a-wtcoau.adb: Remove clause and renaming for Float_Aux. + (Get): Change parameter types to Num. + (Gets): Likewise. + (Put): Likewise. + (Puts): Likewise. Add conversion to Long_Long_Float. + * libgnat/a-wtcoio.ads: Remove use clause for Complex_Types and use + qualified names throughout accordingly. + * libgnat/a-wtcoio.adb: Remove clause for Ada.Unchecked_Conversion, + add with clause for Float_Aux, add clauses for System.Val_Flt, + System.Val_LFlt and System.Val_LLF. Add clause for Complex_Types. + Instantiate Float_Aux and Complex_Aux on Float, Long_Float, and + Long_Long_Float. Remove LLF subtype and TFT instantiation. + (OK_Float): New boolean constant. + (OK_Long_Float): Likewise. + (Get): Call appropriate Get routine from auxiliary package. + (Get): Call appropriate Gets routine from auxiliary package. + (Put): Call appropriate Put routine from auxiliary package. + (Put): Call appropriate Puts routine from auxiliary package. + * libgnat/a-wtdeau.adb: Remove with and use clause for Float_Aux. + * libgnat/a-wtfiau.adb: Likewise. + * libgnat/a-wtfiio.adb: Add with and use clause for System.Val_LLF. + Instantiate Float_Aux on Long_Long_Float. + (Get): Adjust call to Get routine from auxiliary package. + (Get): Adjust call to Gets routine from auxiliary package. + (Put): Adjust call to Put routine from auxiliary package. + (Put): Adjust call to Puts routine from auxiliary package. + * libgnat/a-wtfiio__128.adb: Likewise. + (Get): Likewise. + (Get): Likewise. + (Put): Likewise. + (Put): Likewise. + * libgnat/a-wtflau.ads: Make the package generic. + (Get): Change parameter type to Num. + (Put): Likewise. + (Gets): Likewise. + (Puts): Likewise. + * libgnat/a-wtflau.adb: Remove clauses for System.Val_Real. + (Get): Change parameter type to Num and call Scan routine. Set + Ptr parameter lazily. + (Gets): Likewise. + (Load_Real): Move to... + (Put): Change parameter type and add conversion to Long_Long_Float. + Bump buffer length to Max_Real_Image_Length. + (Puts): Likewise. + * libgnat/a-wtflio.adb: Add with and use clauses for System.Val_Flt, + System.Val_LFlt and System.Val_LLF. Instantiate Float_Aux on Float, + Long_Float and Long_Long_Float. + (OK_Float): New boolean constant. + (OK_Long_Float): Likewise. + (Get): Call appropriate Get routine from auxiliary package. Add + pragma Unsuppress (Range_Check) and manual validity check. + (Get): Call appropriate Gets routine from auxiliary package. Add + pragma Unsuppress (Range_Check) and manual validity check. + (Put): Call appropriate Put routine from auxiliary package. + (Put): Call appropriate Puts routine from auxiliary package. + * libgnat/a-wtgeau.ads (Load_Real): New procedure. + * libgnat/a-wtgeau.adb (Load_Real): ...here. + * libgnat/a-ztcoau.ads: Add with clause for Float_Aux and make the + package generic. + (Get): Change parameter types to Num. + (Put): Likewise. + (Gets): Likewise. + (Puts): Likewise. + * libgnat/a-ztcoau.adb: Remove clause and renaming for Float_Aux. + (Get): Change parameter types to Num. + (Gets): Likewise. + (Put): Likewise. + (Puts): Likewise. Add conversion to Long_Long_Float. + * libgnat/a-ztcoio.ads: Remove use clause for Complex_Types and use + qualified names throughout accordingly. + * libgnat/a-ztcoio.adb: Remove clause for Ada.Unchecked_Conversion, + add with clause for Float_Aux, add clauses for System.Val_Flt, + System.Val_LFlt and System.Val_LLF. Add clause for Complex_Types. + Instantiate Float_Aux and Complex_Aux on Float, Long_Float, and + Long_Long_Float. Remove LLF subtype and TFT instantiation. + (OK_Float): New boolean constant. + (OK_Long_Float): Likewise. + (Get): Call appropriate Get routine from auxiliary package. + (Get): Call appropriate Gets routine from auxiliary package. + (Put): Call appropriate Put routine from auxiliary package. + (Put): Call appropriate Puts routine from auxiliary package. + * libgnat/a-ztdeau.adb: Remove with and use clause for Float_Aux. + * libgnat/a-ztfiau.adb: Likewise. + * libgnat/a-ztfiio.adb: Add with and use clause for System.Val_LLF. + Instantiate Float_Aux on Long_Long_Float. + (Get): Adjust call to Get routine from auxiliary package. + (Get): Adjust call to Gets routine from auxiliary package. + (Put): Adjust call to Put routine from auxiliary package. + (Put): Adjust call to Puts routine from auxiliary package. + * libgnat/a-ztfiio__128.adb: Likewise. + (Get): Likewise. + (Get): Likewise. + (Put): Likewise. + (Put): Likewise. + * libgnat/a-ztflau.ads: Make the package generic. + (Get): Change parameter type to Num. + (Put): Likewise. + (Gets): Likewise. + (Puts): Likewise. + * libgnat/a-ztflau.adb: Remove clauses for System.Val_Real. + (Get): Change parameter type to Num and call Scan routine. Set + Ptr parameter lazily. + (Gets): Likewise. + (Load_Real): Move to... + (Put): Change parameter type and add conversion to Long_Long_Float. + Bump buffer length to Max_Real_Image_Length. + (Puts): Likewise. + * libgnat/a-ztflio.adb: Add with and use clauses for System.Val_Flt, + System.Val_LFlt and System.Val_LLF. Instantiate Float_Aux on Float, + Long_Float and Long_Long_Float. + (OK_Float): New boolean constant. + (OK_Long_Float): Likewise. + (Get): Call appropriate Get routine from auxiliary package. Add + pragma Unsuppress (Range_Check) and manual validity check. + (Get): Call appropriate Gets routine from auxiliary package. Add + pragma Unsuppress (Range_Check) and manual validity check. + (Put): Call appropriate Put routine from auxiliary package. + (Put): Call appropriate Puts routine from auxiliary package. + * libgnat/a-ztgeau.ads (Load_Real): New procedure. + * libgnat/a-ztgeau.adb (Load_Real): ...here. + * libgnat/s-fatsfl.ads: Delete. + * libgnat/s-valflt.ads: New package. + * libgnat/s-vallfl.ads: Likewise. + * libgnat/s-valllf.ads: Likewise. + * libgnat/s-valrea.ads: Make generic. Add assertions, defensive + code and clarify intent. + (Scan_Real): Change parameter type to Num. + (Value_Real): Likewise. + * libgnat/s-valrea.adb: Instantiate Value_R on Uns. + (Integer_to_Real): Change parameter and result to Num. + Call Float_Control.Reset only if the mantissa is 64 bits. Use + a divide to compute the final value if the scale is negative. + (Scan_Real): Change result to Num. + (Value_Real): Likewise. + * libgnat/s-valuer.adb: Add assertions, defensive code and + clarify intent. + (F_Limit): Delete. + (I_Limit): Likewise. + (Precision_Limit): Always use the integer limit. + * libgnat/s-fatgen.adb: Add pragma Annotate. + +2020-12-15 Yannick Moy <moy@adacore.com> + + * libgnat/a-tiflio.adb: Mark body not in SPARK. + * libgnat/a-tiflio.ads: Mark spec in SPARK. + +2020-12-15 Arnaud Charlet <charlet@adacore.com> + + * exp_ch6.adb (Build_Procedure_Body_Form): Adjust, the + declaration of the procedure form is now insert before the + original function body rather than after. + (Expand_N_Subprogram_Declaration): Deal with private types whose + full views are arrays. + * exp_unst.adb (Unnest_Subprogram): Deal with private types. + (Needs_Fat_Pointer): Code cleanup. + * freeze.adb (Freeze_Subprogram): Ditto. + * exp_util.adb (Build_Procedure_Form): Insert the procedure form + decl before and not after. + * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Build missing + spec when needed for Transform_Function_Array. + * sem_util.adb (Get_Fullest_View): Deal with null entity. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Analyze_Aspect_Specifications): Simplify code + for aspect Priority. + * sem_prag.adb (Analyze_Pragma): Simplify code for pragma + Priority. + +2020-12-15 Arnaud Charlet <charlet@adacore.com> + + * exp_ch7.adb (Reset_Scopes_To_Block_Elab_Proc): Do not crash on + a block with no Identifier. Code cleanups. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Reuse existing code for + attribute Value when analyzing attributes Wide_Value and + Wide_Wide_Value. + +2020-12-15 Pascal Obry <obry@adacore.com> + + * libgnat/g-diopit.adb (Find): Fix possible infinite recursion + in Find iterator. + * libgnat/g-diopit.ads (Find): Update comments accordingly. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Callable and Terminated attributes; refactor calls to Set_Etype + occurring in both THEN and ELSE branches of an IF statement for + attribute Storage_Size. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Wide_Wide_Width, Wide_Width and Width attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Pred and Succ attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Size, Object_Size and Value_Size attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Consistently call + Check_Fixed_Point_Type before checking the number of attribute + expressions (like it is done for floating point types); reuse + Check_Fixed_Point_Type_0. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * exp_disp.adb (Make_Tags): Remove call to UI_To_Int. + * sem_attr.adb (Check_Array_Type): Likewise; also, refine type + of a local variable. + (Analyze_Attribute): Likewise. + (Get_Enclosing_Object): Likewise. + * sem_util.adb (Get_Enum_Lit_From_Pos): Likewise. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + First_Bit/Last_Bit and Position attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Machine_Radix and Mantissa attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Machine_Overflows and Machine_Rounds attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Large, Small, Safe_Large and Safe_Small attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Epsilon, Model_Epsilon, Model_Small, Safe_First and Safe_Las + attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Emax, Machine_Emax, Machine_Emin, Machine_Mantissa, Model_Emin, + Model_Mantissa and Safe_Emax attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Denorm and Signed_Zeros attributes. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Adjacent, Copy_Sign and Remainder attributes. + (Check_Floating_Point_Type_2): Fix style in comment. + +2020-12-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Compose, Leading_Part and Scaling attributes. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Resolve second parameter of + attribute Scaling just like it is resolved for a similar + attribute Compose. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + First/Last, First_Bit/Last_Bit and First_Valid/Last_Valid + attributes. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge similar code for + Truncation and other floating point attributes. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Merge identical code for + Ceiling, Floor, Fraction, Machine, Machine_Rounding, Model, + Rounding and Unbiased_Rounding. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-tifiio.adb: Adjust documentation. + (OK_Get_32): Compare the object size of the base type. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + * libgnat/a-tifiio__128.adb: Adjust documentation. + (OK_Get_32): Compare the object size of the base type. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (OK_Get_128): Likewise. + (OK_Put_128): Likewise. + * libgnat/a-wtfiio.adb (OK_Get_32): Likewise. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise + * libgnat/a-wtfiio__128.adb (OK_Get_32): Likewise. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (OK_Get_128): Likewise. + (OK_Put_128): Likewise. + * libgnat/a-ztfiio.adb (OK_Get_32): Likewise. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise + * libgnat/a-ztfiio__128.adb (OK_Get_32): Likewise. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (OK_Get_128): Likewise. + (OK_Put_128): Likewise. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-tifiio.adb (Get): Replace Current_Input with Current_In. + * libgnat/a-tifiio__128.adb: (Get): Likewise. + * libgnat/a-wtcoio.adb (Get): Likewise. + (Put): Replace Current_Output with Current_Out. + * libgnat/a-wtdeio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtdeio__128.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtenio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtfiio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtfiio__128.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtflio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtinio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtinio__128.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtmoio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-wtmoio__128.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztcoio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztdeio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztdeio__128.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztenio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztfiio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztfiio__128.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztflio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztinio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztinio__128.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztmoio.adb (Get): Likewise. + (Put): Likewise. + * libgnat/a-ztmoio__128.adb (Get): Likewise. + (Put): Likewise. + +2020-12-14 Justin Squirek <squirek@adacore.com> + + * sem_util.adb, sem_util.ads (In_Generic_Formal_Package): + Created to identify type declarations occurring within generic + formal packages. + * sem_res.adb (Resolve_Allocator): Add condition to avoid + emitting an error for allocators when the type being allocated + is class-wide and from a generic formal package. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-fatgen.adb (Tiny80): Add alignment clause. + +2020-12-14 Arnaud Charlet <charlet@adacore.com> + + * exp_util.adb (Process_Current_Value_Condition): Add assertion. + * libgnat/s-fatgen.adb (Scaling): Add annotation. + +2020-12-14 Arnaud Charlet <charlet@adacore.com> + + * sem_eval.adb (Fold_Shift): Compute values using the base type. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-fatgen.adb: Add with clause for Interfaces and use + type clause for Interfaces.Unsigned_64. + (Small): Comment out. + (Tiny): Likewise. + (Tiny16): New integer constant. + (Tiny32): Likewise. + (Tiny64): Likewise. + (Tiny80): New integer array constant. + (Pred): Declare a local overlay for Tiny. + (Succ): Likewise. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * exp_pakd.adb (Expand_Bit_Packed_Element_Set): Fix again packed + array type in complex cases where array is Volatile. + * exp_util.adb (Remove_Side_Effects): Do not force a renaming to + be handled by the back-end. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-fatgen.adb: Remove use clause for + System.Unsigned_Types. + (Scaling): Add renaming of System.Unsigned_Types and use type + clause for Long_Long_Unsigned. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-fatgen.ads (Compose): Add pragma Inline. + (Copy_Sign): Likewise. + (Exponent): Likewise. + (Fraction): Likewise. + * libgnat/s-fatgen.adb: Remove with clause for System, add + with and use clauses for System.Unsigned_Types. + Add pragma Warnings (Off) for non-static constants. + Remove precomputed tables of powers of radix and add a few + constants describing the floating-point format. + (Gradual_Scaling): Delete. + (Copy_Sign): Reimplement directly. + (Decompose): Likewise. + (Scaling): Likewise. + (Pred): Speed up. + (Succ): Likewise. + (Truncation): Tidy up. + (Valid): Move constants to library level. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sem_eval.adb (CV_Cache): Remove initialization at elaboration. + +2020-12-14 Gary Dismukes <dismukes@adacore.com> + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: + Correct documentation of the -gnatw.K switch to say that it + disables rather than activates the warning. + * gnat_ugn.texi: Regenerate. + +2020-12-14 Doug Rupp <rupp@adacore.com> + + * tracebak.c: Add a section for ARM Linux. + +2020-12-14 Ghjuvan Lacambre <lacambre@adacore.com> + + * par-ch3.adb (P_Discriminant_Part_Opt): Parse aspects, update + documentation. + * par-ch6.adb (P_Return_Statement): Likewise. + * par-ch9.adb (P_Entry_Index_Specification): Likewise. + +2020-12-14 Gary Dismukes <dismukes@adacore.com> + + * exp_aggr.adb (Build_Array_Aggr_Code.Gen_Assign): Move + generation of the call for DIC check past the optional + generation of calls to controlled Initialize procedures. + * exp_ch3.adb + (Build_Array_Init_Proc.Init_One_Dimension.Possible_DIC_Call): + Suppress generation of a DIC call when the array component type + is controlled. The call will now be generated later inside the + array's DI (Deep_Initialize) procedure. + * exp_ch7.adb + (Make_Deep_Array_Body.Build_Initialize_Statements): Generate a + DIC call (when needed by the array component type) after any + call to the component type's controlled Initialize procedure, or + generate the DIC call by itself if there's no Initialize to + call. + * sem_aggr.adb (Resolve_Record_Aggregate.Add_Association): + Simplify condition to only test Is_Box_Init_By_Default (previous + condition was overkill, as well as incorrect in some cases). + * sem_elab.adb (Active_Scenarios.Output_Call): For + Default_Initial_Condition, suppress call to + Output_Verification_Call when the subprogram is a partial DIC + procedure. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Round>: + Adjust commentary and set the Rounded_Result flag on the type + conversion node when the node is needed. + * exp_ch4.adb (Expand_N_Type_Conversion): Minor tweak. + (Fixup_Universal_Fixed_Operation): Look through the type conversion + only when it is to Universal_Real. + * exp_fixd.adb: Remove with and use clauses for Snames. + (Build_Divide): Remove redundant test. + (Expand_Convert_Float_To_Fixed): Use Rounded_Result flag on the + node to set the truncation parameter. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Analyze_Refinement_Clause): Simplify recently + added code for preventing cascaded errors. + +2020-12-14 Bob Duff <duff@adacore.com> + + * exp_ch6.adb (Is_Build_In_Place_Result_Type): Further narrow + the conditions under which we enable build-in-place for + controlled types. + +2020-12-14 Yannick Moy <moy@adacore.com> + + * sem_warn.adb (Output_Non_Modified_In_Out_Warnings): Use right + warning control character 'k' in both comment and call to + Errout_Msg_N. + +2020-12-14 Yannick Moy <moy@adacore.com> + + * sem_prag.adb (Analyze_Refined_State_In_Decl_Part): Refine the + error message for missing Part_Of on constituent. Avoid + cascading error. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Analyze_Depends_In_Decl_Part): Replace early + returns with goto Leave. + (Collect_Subprogram_Inputs_Outputs): Fix style in comment. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-fatgen.ads (Valid): Add again pragma Inline. + * libgnat/s-fatgen.adb (Valid): Improve commentary, tidy up left + and right, and remove superfluous trick for denormalized numbers. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Find_Role): Constant object of + access-to-constant and access-to-subprogram types are not + writable. + (Collect_Subprogram_Inputs_Outputs): In-parameters of + access-to-variable type can act as outputs of the Depends + contracts. + +2020-12-14 Piotr Trojanek <trojanek@adacore.com> + + * sa_messages.ads: Reference Subprogram_Variant in the comment + for Assertion_Check. + * sem_prag.adb (Analyze_Pragma): Add Subprogram_Variant as an + ID_ASSERTION_KIND; move Default_Initial_Condition as an + RM_ASSERTION_KIND. + +2020-12-14 Yannick Moy <moy@adacore.com> + + * inline.adb (Cannot_Inline): Add No_Info parameter to disable + info message. + * inline.ads (Cannot_Inline): When No_Info is set to True, do + not issue info message in GNATprove mode, but still mark the + subprogram as not always inlined. + * sem_res.adb (Resolve_Call): Always call Cannot_Inline inside + an assertion expression. + +2020-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-imguti.ads (Set_Decimal_Digits): Adjust documentation. + +2020-12-10 Ed Schonberg <schonberg@adacore.com> + + PR ada/98230 + * exp_attr.adb (Expand_N_Attribute_Reference, case Mod): Use base + type of argument to obtain static bound and required size. + +2020-12-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/Make-lang.in: Remove ^L characters. + * gcc-interface/decl.c (create_concat_name): Add cast. + +2020-12-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (maybe_make_gnu_thunk): Return false if the + target is local and thunk and target do not have the same context. + +2020-12-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (lvalue_for_aggregate_p): Also return true + for return statements. + * gcc-interface/utils.c (gnat_write_global_declarations): Use the + maximum index for the dummy object to avoid a name collision. + +2020-12-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <Fixed_Point_Type>: Put + back the "else" unduly removed. + +2020-12-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (Call_to_gnu): Also create a temporary for + the return value if the LHS is a bit-field and the return type is + a type padding a self-referential type. + (gnat_to_gnu): Do not remove the padding on the result if it is too + small with regard to the natural padding size. + +2020-12-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils.c (convert) <INTEGER_TYPE>: Call fold_convert + in the cases where convert_to_integer is not called. + <BOOLEAN_TYPE>: Call fold_convert instead of convert_to_integer. + +2020-12-07 Matthias Klose <doko@ubuntu.com> + + PR ada/97504 + * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <mips*-*-linux*>: Use wraplf + version of Aux_Long_Long_Float. + +2020-11-30 Pierre-Marie de Rodat <derodat@adacore.com> + + * libgnat/s-trasym.ads: Update the list of supported platforms. + +2020-11-30 Arnaud Charlet <charlet@adacore.com> + + * gcc-interface/Makefile.in, gcc-interface/trans.c: Remove ^L + characters. + +2020-11-30 Arnaud Charlet <charlet@adacore.com> + + * gcc-interface/Makefile.in (GNATLIBFLAGS): Enable checks by + default. + * libgnat/s-bitfie.ads: Suppress alignment checks. + * libgnat/s-bituti.adb: Minor reformatting. + * libgnat/s-secsta.adb (SS_Allocate): Support Size = 0. + +2020-11-30 Arnaud Charlet <charlet@adacore.com> + + * exp_ch3.adb (Replace_Discr_Ref): Removed, no longer needed. + +2020-11-30 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch5.adb (Process_Statements): Replace low-level membership + test with a high-level wrapper. + +2020-11-30 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch5.adb (Set_Assignment_Type): Combine calls to Ekind + using membership test. + (Should_Transform_BIP_Assignment): Replace assignment to a + "Result" variable with simple return statements; avoid repeated + calls to Unqual_Conv by declaring a local constant. + +2020-11-30 Piotr Trojanek <trojanek@adacore.com> + + * lib-xref.adb (Generate_Reference): Fix reference to + Analyze_Assignment. + * sem_ch5.adb (Diagnose_Non_Variable_Lhs): Reuse existing + utility function. + +2020-11-30 Eric Botcazou <ebotcazou@adacore.com> + + * contracts.adb (Check_Type_Or_Object_External_Properties): Make + sure to exclude all return objects from the SPARK legality rule + on effectively volatile variables. + * exp_ch6.adb (Expand_N_Extended_Return_Statement): Use the fast + track only when the declaration of the return object can be + dropped. + +2020-11-30 Gary Dismukes <dismukes@adacore.com> + + * einfo.ads (Is_Partial_DIC_Procedure): New function. + (Partial_DIC_Procedure): New procedure. + * einfo.adb (Is_Partial_DIC_Procedure): New function to return + whether a subprogram is a partial Default_Initial_Condition + procedure by checking the name (to avoid adding a new field). + (DIC_Procedure): Add a test that excludes partial DIC procedures + from being returned. + (Partial_DIC_Procedure): New procedure to return the partial DIC + procedure of a type, if it has one (otherwise returns Empty). + (Set_DIC_Procedure): Remove check for duplicate DIC procedures. + * exp_aggr.adb (Gen_Assign): Generate a call to the type's DIC + procedure in the case where an array component is default + initialized (due to an association with a box). + (Build_Record_Aggr_Code): For an extension aggregate, generate a + call to the ancestor type's DIC procedure (if any) when the + ancestor part is a subtype mark. For a record component + association that was specified with a box (tested for by + checking the new flag Was_Default_Init_Box_Association), + generate a call to the component type's DIC procedure (if it has + one). + * exp_ch4.adb (Expand_N_Allocator): When the allocated object is + default initialized and the designated type has a DIC aspect, + generate a call to the DIC procedure. + * exp_util.ads (Build_DIC_Call): Change the formal Obj_Id to + name Obj_Name, and change its type from Entity_Id to Node_Id + (and update comment). + (Build_DIC_Procedure_Body): Add formal Partial_DIC, remove + formal For_Freeze, and update comment accordingly. + (Build_DIC_Procedure_Declaration): Add formal Partial_DIC and + update comment. + * exp_util.adb + (Build_DIC_Call): Revised to use its Obj_Name (formerly Obj_Id) + formal directly rather than calling New_Occurrence_Of on it, to + allow arbitrary names to be passed rather than being limited to + Entity_Ids. + (Build_DIC_Procedure_Body): Call Add_Parent_DICs to generate + checks for DICs associated with any parent types, implementing + the required "additive" semantics for DICs. When building a DIC + procedure body for a partial view (when Partial_DIC is True), + call Add_Own_DIC when the type has its own DIC. In the case of + "full" DIC procedures, a call is generated to any partial DIC + procedure of the type (unless the procedure has a null body), + along with checks for any DICs inherited by the full view. + (Build_DIC_Procedure_Declaration): Add handling for partial DIC + procedures. For the suffix of a regular DIC procedure's name, + use "DIC" (instead of "Default_Initial_Condition"), and for the + suffix of a partial DIC procedure's name, use "Partial_DIC". + (Add_DIC_Check): Add the DIC pragma to the list of seen pragmas + (Pragmas_Seen). + (Add_Inherited_Tagged_DIC): Remove the formals Par_Typ, + Deriv_Typ, and Obj_Id, and add formal Expr, which denotes DIC's + expression. Remove the call to Replace_References (which is now + done in Add_Inherited_DICs). + (Add_Inherited_DICs): New procedure to locate a DIC pragma + associated with a parent type, replace its references + appropriately (such as any current instance references), and add + a check for the DIC. + (Add_Own_DIC): Add an Obj_Id formal to allow caller to pass the + _init formal of the generated DIC procedure. + (Add_Parent_DICs): New procedure to traverse a type's parents, + looking for DICs associated with those and calling + Add_Inherited_DICs to apply the appropriate DIC checks. + (Is_Verifiable_DIC_Pragma): Treat pragmas that have an Empty + first argument the same as a pragma without any arguments + (returning False for that case). + * exp_ch3.adb (Init_One_Dimension): Generate calls to the + component's DIC procedure when needed. + (Possible_DIC_Call): New function nested in Init_One_Dimension + to build a call to the array component type's DIC-checking + function when appropriate. + (Build_Array_Init_Proc): The presence of a DIC on the component + type is an additional condition for generating an init proc for + an array type. + (Build_Init_Statements): When the record component's type has a + DIC, and the component declaration does not have an + initialization expression, generate a call to the component + type's DIC procedure. + (Expand_N_Object_Declaration): Modify the call to Build_DIC_Call + to pass a new occurrence of the object's defining id rather than + the id itself. + (Freeze_Type): Only build a type's DIC procedure (if it has one) + for types that are not interfaces. + * exp_spark.adb (Expand_SPARK_N_Freeze_Type): Remove From_Freeze + actual and add a ??? comment. + (Expand_SPARK_N_Object_Declaration): Modify call to + Build_DIC_Call to pass a new occurrence of the object id rather + than the object id itself. + * sem_aggr.adb (Resolve_Record_Aggregate): Declare local flag + Is_Box_Init_By_Default and set it in cases where the component + association has a box and the component is being initialized by + default (as opposed to initialized by an initialization + expression associated with the component's declaration). + (Add_Association): If the association has a box for a component + initialized by default, the flag + Was_Default_Init_Box_Association is set on the new component + association (for later testing during expansion). + (Get_Value): Reset Is_Box_Init_By_Default to False. + * sem_ch3.adb (Build_Assertion_Bodies_For_Type): Rearrange code + to build DIC procedure bodies for a (noninterface) type that + Has_Own_DIC (for partial type views) or Has_DIC (for full type + views) as appropriate. + * sem_ch13.adb (Analyze_Aspect_Specifications, + Aspect_Default_Initial_Condition): Add an extra argument to the + DIC pragma to denote the type associated with the pragma (for + use in Build_DIC_Procedure_Body). + * sem_prag.adb (Analyze_Pragma): Allow two arguments for pragma + Default_Initial_Condition. If not already present, add an extra + argument denoting the type that the pragma is associated with. + * sem_util.adb (Propagate_DIC_Attributes): Retrieve any partial + DIC procedure associated with the type and add it to the type's + list of subprograms (Subprograms_For_Type). + * sinfo.ads (Was_Default_Init_Box_Association): New flag on + N_Component_Association nodes. Add subprograms to get and set + flag, as well as updating the documentation. + * sinfo.adb (Was_Default_Init_Box_Association): New function to + retrieve the corresponding flag (Flag14). + (Set_Was_Default_Init_Box_Association): New procedure to set the + corresponding flag (Flag14). + +2020-11-30 Arnaud Charlet <charlet@adacore.com> + + * par-ch6.adb (P_Formal_Part): Remove extra call to Scan. + * par-tchk.adb: Minor reformatting. + +2020-11-30 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-nbnbre.adb (Float_Conversions): Instantiate Conv + package only once in the body. + (Fixed_Conversions.Float_Aux): New instance. + (Fixed_Conversions.Conv_I): Likewise. + (Fixed_Conversions.Conv_U): Likewise. + (Fixed_Conversions.LLLI): New subtype. + (Fixed_Conversions.LLLU): Likewise. + (Fixed_Conversions.Too_Large): New constant. + (Fixed_Conversions.To_Big_Real): Reimplement. + (Fixed_Conversions.From_Big_Real): Likewise. + +2020-11-30 Bob Duff <duff@adacore.com> + + * exp_ch3.adb (Expand_N_Object_Declaration): Avoid crash in case + of conditional expression. + +2020-11-30 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_defined_attributes.rst (Pool_Address): + Fix pasto. + (Small_Denominator): New entry. + (Small_Numerator): Likewise. + * doc/gnat_rm/implementation_defined_characteristics.rst (3.5.9): + Relax conditions on 128-bit smalls and integer-only implementation. + * gnat_rm.texi: Regenerate. + * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Fore>: + Relax conditions on integer implementation for ordinary fixed-point + types and pass a third parameter to the routine. + <Attribute_Small_Denominator>: Raise Program_Error. + <Attribute_Small_Numerator>: Likewise. + * exp_fixd.adb (Expand_Convert_Fixed_To_Fixed): Use a scaled divide + if the numerator and denominator of the small ratio are sufficiently + small integers. + (Expand_Convert_Fixed_To_Integer): Use a scaled divide if numerator + and denominator of the small value are sufficiently small integers. + (Expand_Convert_Integer_To_Fixed): Likewise. + * exp_imgv.adb (Expand_Image_Attribute): Relax the conditions on the + integer implementation for ordinary fixed-point types. + (Expand_Value_Attribute): Likewise. + * freeze.adb (Freeze_Fixed_Point_Type): Relax conditions on 128-bit + smalls. + * sem_attr.adb (Analyze_Attribute) <Attribute_Small_Denominator>: + Check no arguments, fixed-point and set type to Universal_Integer. + <Attribute_Small_Numerator>: Likewise. + (Eval_Attribute) <Attribute_Small_Denominator>: Fold statically. + <Attribute_Small_Numerator>: Likewise. + * snames.ads-tmpl (Name_Small_Denominator): New attribute name. + (Name_Small_Numerator): Likewise. + (Attribute_Id): Add Attribute_Small_{Denominator,Numerator}. + * libgnat/a-tifiio.adb (Exact): Delete. + (Need_64): Likewise. + (OK_Get_32): New boolean constant. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (E): Adjust. + (Get procedures): Likewise. + (Put procedures): Likewise. + * libgnat/a-tifiio__128.adb (Exact): Delete. + (Need_64): Likewise. + (Need_128): Likewise. + (OK_Get_32): New boolean constant. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (OK_Get_128): Likewise. + (OK_Put_128): Likewise. + (E): Adjust. + (Get procedures): Likewise. + (Put procedures): Likewise. + * libgnat/a-wtfiio.adb (Exact): Delete. + (Need_64): Likewise. + (OK_Get_32): New boolean constant. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (E): Adjust. + (Get procedures): Likewise. + (Put procedures): Likewise. + * libgnat/a-wtfiio__128.adb (Exact): Delete. + (Need_64): Likewise. + (Need_128): Likewise. + (OK_Get_32): New boolean constant. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (OK_Get_128): Likewise. + (OK_Put_128): Likewise. + (E): Adjust. + (Get procedures): Likewise. + (Put procedures): Likewise. + * libgnat/a-ztfiio.adb (Exact): Delete. + (Need_64): Likewise. + (OK_Get_32): New boolean constant. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (E): Adjust. + (Get procedures): Likewise. + (Put procedures): Likewise. + * libgnat/a-ztfiio__128.adb (Exact): Delete. + (Need_64): Likewise. + (Need_128): Likewise. + (OK_Get_32): New boolean constant. + (OK_Put_32): Likewise. + (OK_Get_64): Likewise. + (OK_Put_64): Likewise. + (OK_Get_128): Likewise. + (OK_Put_128): Likewise. + (E): Adjust. + (Get procedures): Likewise. + (Put procedures): Likewise. + * libgnat/s-fore_f.ads (Fore_Fixed): Adjust signature. + * libgnat/s-fore_f.adb (Fore_Fixed): Reimplement. + * libgnat/s-fofi32.ads (Fore_Fixed32): Adjust signature. + * libgnat/s-fofi64.ads (Fore_Fixed64): Likewise. + * libgnat/s-fofi128.ads (Fore_Fixed128): Likewise. + * libgnat/s-imagef.ads: Adjust description. + * libgnat/s-imagef.adb (Maxdigs): Move around. + (Set_Image_Integer): Remove assertion. + * libgnat/s-valuef.ads: Adjust description. + * libgnat/s-valuef.adb (Integer_To_Fixed): Minor tweak. + +2020-11-30 Ghjuvan Lacambre <lacambre@adacore.com> + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: + Describe -gnateb switch. + * doc/gnat_ugn/the_gnat_compilation_model.rst: Mention -gnateb + switch in configuration pragma files section. + * gnat_ugn.texi: Regenerate. + * lib-writ.adb (Write_ALI): Strip directories from configuration + files path if needed. + * opt.ads: Declare Config_Files_Store_Basename option. + * par.adb (Par): Save configuration file checksum. + * switch-c.adb (Scan_Front_End_Switches): Set + Config_Files_Store_Basename true if -gnateb is present. + +2020-11-30 Arnaud Charlet <charlet@adacore.com> + + * exp_dist.adb (RCI_Cache): Initialize. + +2020-11-30 Arnaud Charlet <charlet@adacore.com> + + * terminals.c (allocate_pty_desc): Copy one less byte since the + last byte will always be set to 0. + +2020-11-30 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst (-xdr): + Document that XDR is not supported for 128-bit integer types. + * gnat_ugn.texi: Regenerate. + * exp_strm.adb (Build_Elementary_Input_Call): Deal with types + larger than Long_Long_Integer. + (Build_Elementary_Write_Call): Likewise. + * rtsfind.ads (RE_Id): Add RE_I_LLL{I,U] and RE_W_LLL{I,U}. + (RE_Unit_Table): Add entries for them. + * libgnat/s-stratt.ads (I_LLLI): New inline function. + (I_LLLU): Likewise. + (W_LLLI): New inline procedure. + (W_LLLU): Likewise. + * libgnat/s-stratt.adb (S_LLLI): New subtype of SEA. + (S_LLLU): Likewise. + (From_LLLI): New instance of Unchecked_Conversion. + (From_LLLU): Likewise. + (To_LLLI): Likewise. + (To_LLLU): Likewise. + (I_LLLI): Implement. + (I_LLLU): Likewise. + (W_LLLI): Likewise. + (W_LLLU): Likewise. + +2020-11-30 Ed Schonberg <schonberg@adacore.com> + + * exp_ch5.adb (Expand_Iterator_Loop_Over_Container): Check the + signature of the private operation Get_Element_Access to prevent + accidental use of a user-defined homonym subprogram. + +2020-11-30 Yannick Moy <moy@adacore.com> + + * spark_xrefs.ads: Add comment for Heap that it may remain + Empty. + +2020-11-30 Pascal Obry <obry@adacore.com> + + * libgnat/g-sercom__linux.adb (Set): Fix control flags of the + serial port setting. + +2020-11-30 Pascal Obry <obry@adacore.com> + + * libgnat/g-sercom__linux.adb: Minor style fixes. + +2020-11-30 Piotr Trojanek <trojanek@adacore.com> + + * exp_util.adb (Get_Current_Value_Condition): Don't use current + value tracking in GNATprove mode. + * sem_res.adb (Resolve_Comparison_Op): Remove incomplete + special-casing for folding in GNATprove mode. + +2020-11-30 Bob Duff <duff@adacore.com> + + * errout.adb (Error_Msg_NEL): Do not call Set_Posted if errors + are being ignored. + (Error_Msg): Change Errors_Must_Be_Ignored to use the getter. + * sem_ch8.adb (Find_Direct_Name): Do not skip all the error + checks when ignoring errors, but instead do not add an entry to + the Urefs table if errors are being ignored. + * exp_ch5.adb: Minor comment fix. + +2020-11-30 Yannick Moy <moy@adacore.com> + + * sem_aggr.adb (Resolve_Array_Aggregate): Improve error message. + +2020-11-30 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-valuef.adb (Integer_To_Fixed): Do not modify numerator + or denominator in order to reduce the exponent. + +2020-11-30 Arnaud Charlet <charlet@adacore.com> + + * ali-util.adb (Get_File_Checksum): Remove dead code. + * exp_ch4.adb (Expand_Boolean_Operator, Expand_N_Op_Not, + Make_Boolean_Array_Op): Take Transform_Function_Array into + account. + * exp_ch6.adb (Expand_Call_Helper): Update comment. Code + cleanup. + * exp_util.adb (Build_Procedure_Form): Use new predefined name + Name_UP_RESULT. + * snames.ads-tmpl (Name_UP_RESULT): New predefined name. Code + cleanup: remove unused names from the project parser, moved to + gprbuild sources. + * xsnamest.adb: Add support for uppercase names. + +2020-11-30 Ed Schonberg <schonberg@adacore.com> + + * sem_util.adb (Enter_Name): When an inherited operation for a + local derived type is hidden by an explicit declaration of a + non-overloadable entity in the same scope, make the inherited + operation non-visible to prevent its accidental use elsewhere. + +2020-11-29 John David Anglin <danglin@gcc.gnu.org> + + PR ada/97504 + * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <hppa*-*-hpux*>: Use wraplf + version of Aux_Long_Long_Float. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-valuef.adb (Integer_To_Fixed): Take into account the + extra digit when scaling up the input. + * libgnat/s-valuer.adb (Scan_Decimal_Digits): Restrict previous + change to fixed-point types. + (Scan_Integral_Digits): Likewise. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * sem_res.adb (Parent_Is_Boolean): Simplify. + (Resolve_Op_Not): Reduce scope of a local variable. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * cstand.adb: Simplify with Append_New_Elmt. + * sem_util.adb: Likewise. + +2020-11-27 Arnaud Charlet <charlet@adacore.com> + + * sem_eval.adb (Fold_Shift): Fix evaluation of Shift_Right on + negative values. + +2020-11-27 Arnaud Charlet <charlet@adacore.com> + + * exp_ch6.adb (Expand_Call): Properly split + Transform_Function_Array and Modify_Tree_For_C. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * sem_eval.ads (Compile_Time_Compare): Restore parameter Diff to + be of an access type. + * sem_eval.adb (Compile_Time_Compare): Adapt body and callers. + * sem_attr.adb (Eval_Attribute): Adapt callers. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-valuer.adb (Scan_Decimal_Digits): Round Extra. + (Scan_Integral_Digits): Likewise. + +2020-11-27 Yannick Moy <moy@adacore.com> + + * checks.adb (Selected_Range_Checks): Adapt the condition for + applying range checks so that it is not done inside generics. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * exp_fixd.adb (Build_Double_Divide): Only use a 128-bit + division if one of the operands is larger than 64 bits. + (Build_Double_Divide_Code): Likewise. + (Build_Scaled_Divide): Likewise. + (Build_Scaled_Divide_Code): Likewise. + +2020-11-27 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-os_lib.adb (To_GM_Time): Return valid and consistent + values for Invalid_Time. + +2020-11-27 Steve Baird <baird@adacore.com> + + * snames.ads-tmpl: Define new Name_Stable_Properties Name_Id + value. + * aspects.ads, aspects.adb: Add new Aspect_Stable_Properties + enumeration literal to Aspect_Id type. Add Class_Present + parameter to Find_Aspect and related + functions (Find_Value_Of_Aspect and Has_Aspect). + * sem_util.adb (Has_Nontrivial_Precondition): Fix + previously-latent bug uncovered by adding Class_Present + parameter to Aspect.Find_Aspect. The code was wrong before, but + with the change the bug was more likely to make a user-visible + difference. + * sem_ch6.adb (Analyze_Operator_Symbol): If a string literal + like "abs" or "-" occurs in a Stable_Properties aspect + specification, then it is to be interpreted as an operator + symbol and not as a string literal. + * sem_ch13.ads: Export new Parse_Aspect_Stable_Properties + function, analogous to the existing Parse_Aspect_Aggregate + exported procedure. + * sem_ch13.adb: (Parse_Aspect_Stable_Properties): New function; + analogous to existing Parse_Aspect_Aggregate. + (Validate_Aspect_Stable_Properties): New procedure; analogous to + existing Validate_Aspect_Aggregate. Called from the same case + statement (casing on an Aspect_Id value) where + Validate_Aspect_Aggregate is called. + (Resolve_Aspect_Stable_Properties): New procedure; analogous to + existing Resolve_Aspect_Aggregate. Called from the same two case + statements (each casing on an Aspect_Id value) where + Resolve_Aspect_Aggregate is called. + (Analyze_Aspect_Specifications): Set Has_Delayed_Aspects and + Is_Delayed_Aspect attributes for Aspect_Stable_Properties aspect + specifications. + (Check_Aspect_At_End_Of_Declarations): The syntactic + "expression" for a Stable_Properties aspect specification is not + semantically an expression; it doesn't have a type. Thus, force + T to be empty in this case. + * contracts.adb (Expand_Subprogram_Contract): Add call to new + local procedure, + Expand_Subprogram_Contract.Add_Stable_Property_Contracts, which + generates Postcondition pragmas corresponding to stable property + checks. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst: + (Assertion_Policy): Move "Default_Initial_Condition" from + ID_ASSERTION_KIND to RM_ASSERTION_KIND section. + * gnat_rm.texi: Regenerate. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst + (Assertion_Policy): Add "Default_Initial_Condition", + "Initial_Condition" and "Subprogram_Variant". + * gnat_rm.texi: Regenerate. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Is_Valid_Assertion_Kind): Return False on + "Assertion_Policy" + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * make.adb (GNAT_Flag): Change to "-gnatg". + (Compile): Adjust comments accordingly. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch4.adb (Rewrite_Comparison): Add assertion to confirm + that evaluation folds comparisons with static operands; when + folding comparison with non-static operands, the resulting + literal is non-static. + * sem_eval.adb (Eval_Relational_Op): Refactor nested IF + statement for the special case in the THEN branch; move code for + the "general case" out of the ELSE branch. + * sem_res.adb (Resolve_Comparison_Op): Only apply a dubious + special-case for GNATprove in the GNATprove_Mode. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * sem_eval.ads (Compile_Time_Compare): Change parameter Diff + from access to mode out. + * sem_eval.adb (Compile_Time_Compare): Adapt body and callers. + * sem_attr.adb (Eval_Attribute): Adapt callers. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_N_Op_Multiply): Move down block calling + Narrow_Large_Operation if the type is Universal_Integer. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-nbnbre.adb: Remove clauses for System.Img_Real and + add them for System.Unsigned_Types. + (Float_Conversions.To_Big_Real): Reimplement. + (Float_Conversions.From_Big_Real): Likewise. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * checks.ads (Determine_Range_To_Discrete): New procedure. + * checks.adb (Apply_Scalar_Range_Check): Call it to determine + a range for the expression when the target type is discrete. + And also apply the tests for discrete types to fixed-point + types when they are treated as integers. + (Apply_Type_Conversion_Checks): Apply checks to conversions + involving fixed-point types when they are treated as integers. + (Determine_Range) <N_Type_Conversion>: Factor out code into... + (Determine_Range_To_Discrete): ...this new procedure and add + support for fixed-point types when they are treated as integers. + * einfo.ads (Type_High_Bound): Remove obsolete sentence. + (Type_Low_Bound): Likewise. + * exp_ch4.adb (Discrete_Range_Check): Remove obsolete code. + (Real_Range_Check): Likewise. + (Expand_N_Type_Conversion): In case of a no-op conversion, clear + the Do_Range_Check flag on the operand before substituting it. + Remove calls to Real_Range_Check and Discrete_Range_Check that + are not guarded by the Do_Range_Check flag, and an assertion. + * sem_res.adb (Resolve_Type_Conversion): Always apply range + checks in GNATprove mode; in normal mode, use the updated type + of the operand in the test against Universal_Fixed. Remove + obsolete code setting the Do_Range_Check flag at the end. + +2020-11-27 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Analyze_Pragma): Change "Ref Manual" to RM; + replace uses of an unnecessary "Ok" variable with RETURN + statements; replace nested IF with ELSIF. + +2020-11-27 Arnaud Charlet <charlet@adacore.com> + + * libgnarl/s-tasren.adb (Local_Complete_Rendezvous): Always call + Defer_Abort. + * libgnat/a-except.adb: Abort does not need to be deferred. + * libgnarl/s-tpobop.adb (Exceptional_Complete_Entry_Body): Abort + never needs to be undeferred here. + * exp_ch11.adb (Expand_Exception_Handlers): Remove difference + between ZCX and SJLJ. + * exp_ch9.adb (Expand_N_Asynchronous_Select): Remove different + handling for sjlj. + * exp_sel.ads, exp_sel.adb (Build_Abort_Block, + Build_Abort_Block_Handler): Ditto. + +2020-11-27 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_prag.adb (Analyze_Pragma): declare new Check_No_Return + function and call it. + +2020-11-27 Arnaud Charlet <charlet@adacore.com> + + * sem_ch12.adb (Instantiate_Object): Consistently use + New_Copy_Tree instead of New_Copy. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * exp_fixd.adb (Build_Conversion): Adjust head comment. + (Build_Divide): Likewise. + (Build_Double_Divide): Likewise. + (Build_Multiply): Likewise. + (Build_Rem): Likewise. + (Build_Scaled_Divide): Likewise. + +2020-11-27 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-genbig.ads, libgnat/s-genbig.adb (To_Bignum): New + variant taking an Unsigned_128. + * libgnat/a-nbnbin.adb (To_Big_Integer): Add support for 128 + bits signed and unsigned types. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-imagef.adb (Set_Image_Fixed): Pass the full value + of the quotient to Set_Image_Integer during the first round and + adjust the handling of the minus sign. + +2020-11-27 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbre.adb ("=", "<"): Fix. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-valuer.adb (Scan_Raw_Real): Move pragma Annotate around + and adjust its parameters. + +2020-11-27 Eric Botcazou <ebotcazou@adacore.com> + + * exp_fixd.adb (Build_Double_Divide): Use the RM size of types and + a more precise estimate for the size of the denominator. + (Build_Double_Divide_Code): Likewise. + (Build_Multiply): Use a more precise estimate for the size of the + result. + (Build_Scaled_Divide): Use the RM size of types and a more precise + estimate for the size of the numerator. + (Build_Scaled_Divide_Code): Likewise. + +2020-11-26 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * Makefile.rtl <sparc*-sun-solaris*> (THREADSLIB): Remove. + (MISCLIB): Remove -lposix4. + <*86-*-solaris2*>: Likewise. + * libgnarl/s-osinte__solaris.ads (System.OS_Interface): Remove + -lposix4 -lthread. + +2020-11-26 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbre.adb (To_Big_Real): Do not loose precision. + +2020-11-26 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Analyze_Object_Renaming): Check for AI12-0401. + +2020-11-26 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Likewise. + (GNATRTL_128BIT_OBJS): Likewise. + (GNATRTL_128BIT_PAIRS): Add new 128-bit variants. + * cstand.adb (Create_Standard): Create Standard_Integer_128. + * doc/gnat_rm/implementation_defined_characteristics.rst: Document + new limits on 64-bit platforms in entry for 3.5.9(10). + * gnat_rm.texi: Regenerate. + * exp_attr.adb: Add with and use clauses for Urealp. + (Expand_N_Attribute_Reference) <Attribute_Fore>: Call new routines + for decimal fixed-point types and common ordinary fixed-point types. + * exp_ch4.adb (Real_Range_Check): Extend conversion trick to all + ordinary fixed-point types and use Small_Integer_Type_For. + * exp_fixd.adb: Add with and use clauses for Ttypes. + (Build_Divide): Add special case for 32-bit values and deal with + 128-bit types. + (Build_Double_Divide): Deal with 128-bit types. + (Build_Double_Divide_Code): Likewise. Do not apply conversions + before calling Build_Multiply. + (Build_Multiply): Likewise. Add special case for 32-bit values. + (Build_Scaled_Divide): Deal with 128-bit types. + (Build_Scaled_Divide_Code): Likewise. Fix size computation. Do not + apply conversions before calling Build_Multiply. + (Do_Multiply_Fixed_Fixed): Minor tweak. + (Integer_Literal): Deal with 128-bit values. + * exp_imgv.adb (Has_Decimal_Small): Delete. + (Expand_Image_Attribute): Call new routines for common ordinary + fixed-point types. + (Expand_Value_Attribute): Likewise. + (Expand_Width_Attribute): Add new expansion for fixed-point types. + * freeze.adb (Freeze_Entity): Move error checks for ordinary + fixed-point types to... + (Freeze_Fixed_Point_Type): ...here. Deal with 128-bit types and + adjust limitations for 32-bnt and 64-bit types. + * rtsfind.ads (RTU_Id): Add entries for new System_Fore, System_Img, + and System_Val units and remove them for obsolete units. + (RE_Id): Add entries for Double_Divide128, Scaled_Divide128, the new + Fore, Image, Value routines and remove them for obsolete units. + (RE_Unit_Table): Likewise. + * sem_ch3.adb (Decimal_Fixed_Point_Type_Declaration): Deal with + 128-bit types. + * stand.ads (Standard_Entity_Type): Add Standard_Integer_128. + * uintp.ads (Uint_31): New deferred constant. + (Uint_Minus_18): Likewise. + (Uint_Minus_31): Likewise. + (Uint_Minus_76): Likewise. + (Uint_Minus_127): Likewise. + * urealp.ads (Ureal_2_31): New function. + (Ureal_2_63): Likewise. + (Ureal_2_127): Likewise. + (Ureal_2_M_127): Likewise. + (Ureal_2_10_18): Likewise. + (Ureal_M_2_10_18): Likewise. + (Ureal_9_10_36): Likewise. + (Ureal_M_9_10_36): Likewise. + (Ureal_10_76): Likewise. + (Ureal_M_10_76): Likewise. + (Ureal_10_36): Delete. + (Ureal_M_10_36): Likewise. + * urealp.adb (UR_2_10_18): New variable. + (UR_9_10_36): Likewise. + (UR_10_76): Likewise. + (UR_M_2_10_18): Likewise. + (UR_M_9_10_36): Likewise. + (UR_M_10_76): Likewise. + (UR_2_31): Likewise. + (UR_2_63): Likewise. + (UR_2_127): Likewise. + (UR_2_M_127): Likewise. + (UR_10_36): Delete. + (UR_M_10_36): Likewise. + (Initialize): Initialize them. + (UR_Write): Do not use awkward Ada literal style. + (Ureal_2_10_18): New function. + (Ureal_9_10_36): Likewise. + (Ureal_10_76): Likewise. + (Ureal_2_31): Likewise. + (Ureal_2_63): Likewise. + (Ureal_2_127): Likewise. + (Ureal_2_M_127): Likewise. + (Ureal_M_2_10_18): Likewise. + (Ureal_M_9_10_36): Likewise. + (Ureal_10_76): Likewise. + (Ureal_M_10_76): Likewise. + (Ureal_10_36): Delete. + (Ureal_M_10_36): Likewise. + * libgnat/a-decima__128.ads: New file. + * libgnat/a-tideau.ads, libgnat/a-tideau.adb: Reimplement as + generic unit. + * libgnat/a-tideio.adb: Reimplement. + * libgnat/a-tideio__128.adb: New file. + * libgnat/a-tifiau.ads, libgnat/a-tifiau.adb: New generic unit. + * libgnat/a-tifiio.adb: Move bulk of implementation to s-imagef + and reimplement. + * libgnat/a-tifiio__128.adb: New file. + * libgnat/a-tiflau.adb (Get): Minor consistency fix. + (Gets): Likewise. + * libgnat/a-wtdeau.ads, libgnat/a-wtdeau.adb: Reimplement as + generic unit. + * libgnat/a-wtdeio.adb: Reimplement. + * libgnat/a-wtdeio__128.adb: New file. + * libgnat/a-wtfiau.ads, libgnat/a-wtfiau.adb: New generic unit. + * libgnat/a-wtfiio.adb: Reimplement. + * libgnat/a-wtfiio__128.adb: New file. + * libgnat/a-ztdeau.ads, libgnat/a-ztdeau.adb: Reimplement as + generic unit. + * libgnat/a-ztdeio.adb: Reimplement. + * libgnat/a-ztdeio__128.adb: New file. + * libgnat/a-ztfiau.ads, libgnat/a-ztfiau.adb: New generic unit. + * libgnat/a-ztfiio.adb: Reimplement. + * libgnat/a-ztfiio__128.adb: New file. + * libgnat/g-rannum.adb (Random_Decimal_Fixed): Use a subtype of the + appropiate size for the instantiation. + (Random_Ordinary_Fixed): Likewise. + * libgnat/s-arit32.ads, libgnat/s-arit32.adb: New support unit. + * libgnat/s-fode128.ads: New instantiation. + * libgnat/s-fode32.ads: Likewise. + * libgnat/s-fode64.ads: Likewise. + * libgnat/s-fofi128.ads: Likewise. + * libgnat/s-fofi32.ads: Likewise. + * libgnat/s-fofi64.ads: Likewise. + * libgnat/s-fore_d.ads, libgnat/s-fore_d.adb: New generic unit. + * libgnat/s-fore_f.ads, libgnat/s-fore_f.adb: Likewise. + * libgnat/s-fore.ads, libgnat/s-fore.adb: Rename into... + * libgnat/s-forrea.ads, libgnat/s-forrea.adb: ...this. + * libgnat/s-imaged.ads, libgnat/s-imaged.adb: New generic unit. + * libgnat/s-imagef.ads, libgnat/s-imagef.adb: Likewise, taken + from a-tifiio.adb. + * libgnat/s-imde128.ads: New instantiation. + * libgnat/s-imde32.ads: Likewise. + * libgnat/s-imde64.ads: Likewise. + * libgnat/s-imfi128.ads: Likewise. + * libgnat/s-imfi32.ads: Likewise. + * libgnat/s-imfi64.ads: Likewise. + * libgnat/s-imgdec.ads, libgnat/s-imgdec.adb: Delete. + * libgnat/s-imglld.ads, libgnat/s-imglld.adb: Likewise. + * libgnat/s-imgrea.adb (Set_Image_Real): Replace Sign local variable + with Minus local variable for the sake of consistency. + * libgnat/s-imguti.ads, libgnat/s-imguti.adb: New support unit. + * libgnat/s-vade128.ads: New instantiation. + * libgnat/s-vade32.ads: Likewise. + * libgnat/s-vade64.ads: Likewise. + * libgnat/s-vafi128.ads: Likewise. + * libgnat/s-vafi32.ads: Likewise. + * libgnat/s-vafi64.ads: Likewise. + * libgnat/s-valdec.ads, libgnat/s-valdec.adb: Delete. + * libgnat/s-vallld.ads, libgnat/s-vallld.adb: Likewise. + * libgnat/s-valued.ads, libgnat/s-valued.adb: New generic unit. + * libgnat/s-valuef.ads, libgnat/s-valuef.adb: Likewise. + * libgnat/s-valuei.adb: Minor rewording. + * libgnat/s-valrea.adb: Move bulk of implementation to... + * libgnat/s-valuer.ads, libgnat/s-valuer.adb: ...here. New + generic unit. + * libgnat/system-aix.ads (Max_Mantissa): Adjust. + * libgnat/system-darwin-arm.ads (Max_Mantissa): Likewise. + * libgnat/system-darwin-ppc.ads (Max_Mantissa): Likewise. + * libgnat/system-darwin-x86.ads (Max_Mantissa): Likewise. + * libgnat/system-djgpp.ads (Max_Mantissa): Likewise. + * libgnat/system-dragonfly-x86_64.ads (Max_Mantissa): Likewise. + * libgnat/system-freebsd.ads (Max_Mantissa): Likewise. + * libgnat/system-hpux-ia64.ads (Max_Mantissa): Likewise. + * libgnat/system-hpux.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-alpha.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-arm.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-hppa.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-ia64.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-m68k.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-mips.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-ppc.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-riscv.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-s390.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-sh4.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-sparc.ads (Max_Mantissa): Likewise. + * libgnat/system-linux-x86.ads (Max_Mantissa): Likewise. + * libgnat/system-lynxos178-ppc.ads (Max_Mantissa): Likewise. + * libgnat/system-lynxos178-x86.ads (Max_Mantissa): Likewise. + * libgnat/system-mingw.ads (Max_Mantissa): Likewise. + * libgnat/system-qnx-aarch64.ads (Max_Mantissa): Likewise. + * libgnat/system-rtems.ads (Max_Mantissa): Likewise. + * libgnat/system-solaris-sparc.ads (Max_Mantissa): Likewise. + * libgnat/system-solaris-x86.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-arm-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-arm-rtp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-arm.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-e500-kernel.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-e500-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-e500-rtp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-e500-vthread.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-ppc-kernel.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-ppc-ravenscar.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-ppc-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-ppc-rtp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-ppc-vthread.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-ppc.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-x86-kernel.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-x86-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-x86-rtp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-x86-vthread.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks-x86.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-aarch64-rtp-smp.ads (Max_Mantissa): + Likewise. + * libgnat/system-vxworks7-aarch64.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-arm-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-arm.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-e500-kernel.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-e500-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-e500-rtp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-ppc-kernel.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-ppc-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-ppc-rtp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-ppc64-kernel.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-ppc64-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-x86-kernel.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-x86-rtp-smp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-x86-rtp.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-x86_64-kernel.ads (Max_Mantissa): Likewise. + * libgnat/system-vxworks7-x86_64-rtp-smp.ads (Max_Mantissa): Likewise. + +2020-11-26 Liaiss Merzougue <merzougue@adacore.com> + + * libgnat/s-imgrea.ads (Image_Ordinary_Fixed_Point): Add a + remark concerning the irrelevant use of Inf and -0.0 + +2020-11-26 Arnaud Charlet <charlet@adacore.com> + + * osint-c.adb (Set_Output_Object_File_Name): Add support for + .c output file. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * lib-writ.adb, sem_ch8.adb, sem_prag.adb: Use + Is_Generic_Subprogram instead of low-level membership tests. + +2020-11-26 Gary Dismukes <dismukes@adacore.com> + + * sem_ch6.adb (Analyze_Call_And_Resolve): Reformatted a comment. + * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings): + Fixed a typo. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * sem_res.adb (Resolve_Membership_Op): Replace pragma Warnings + with pragma Assert. + +2020-11-26 Ed Schonberg <schonberg@adacore.com> + + * sem_ch6.adb (Analyze_Call_And_Resolve): Add information to the + error message on an illegal procedure call, when the illegality + is due to the presence of a component of the full view of the + target object, as well as a procedure with the same name (See RM + 4.1.3 (9.2/3)). + +2020-11-26 Ed Schonberg <schonberg@adacore.com> + + * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings): + when the restriction is a configuration pragma and specifies + No_Tasking, a global flag is set to reject task declarations, + and to prevent the construction of Master entities. The flag + must not be set if the pragma is a Restriction_Warning, in which + case task declarationns are allowed. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * libgnat/a-stzhas.adb (Wide_Wide_Hash): Instantiate inside a + wrapper function. + * libgnat/a-stzhas.ads (Wide_Wide_Hash): Likewise; remove wrong + comment, because this is indeed a RM unit, as described in Ada + RM A.4.8 (1/3). + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * sem_eval.adb (Eval_Slice): Refactor repeated calls to Prefix + with a local constant (named just like in Resolve_Slice). + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * sem_eval.adb (Eval_Slice): Emit warning not just for + constants, but for any objects. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch4.adb (Indicate_Name_And_Type): Fix whitespace in + comment. + * sem_res.adb (Resolve_Call): Remove redundant parens. + * sem_util.adb (Set_Entity_With_Checks): Remove extra call to + Set_Entity. + +2020-11-26 Bob Duff <duff@adacore.com> + + * exp_ch4.adb (Expand_Concatenate): Call Set_No_Initialization + on the N_Allocator node that is supposed to allocate on the + secondary stack. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch13.adb, exp_ch9.adb, sem_ch8.adb, sem_util.adb: Replace + a combination of Is_Protected_Type and Is_Task_Type by + Is_Concurrent_Type. + +2020-11-26 Arnaud Charlet <charlet@adacore.com> + + * libgnarl/s-tassta.adb (Task_Wrapper): Fix computation of + Pattern_Size. + +2020-11-26 Bob Duff <duff@adacore.com> + + * freeze.adb (Freeze_Array_Type): Remove propagation of + Has_Own_Invariants to the first subtype. This is a no-op, + because the current (incorrect) version of Has_Own_Invariants + calls Base_Type. + * sem_prag.adb, sem_util.adb: Pass the base type to + Set_Has_Own_Invariants. + +2020-11-26 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (Aft_Value): Adjust documentation. + (Scale_Value): Likewise. + +2020-11-26 Justin Squirek <squirek@adacore.com> + + * exp_ch4.adb (Expand_N_Type_Conversion): Use the unexpanded + operand when generating accessibility checks. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * libgnat/a-cbhase.adb (Read): Remove extra whitespace. + * libgnat/a-cbmutr.ads (Read): Likewise. + * libgnat/a-cborse.adb (Read): Likewise. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch7.adb, exp_util.adb, freeze.adb: Rewrite with + Is_Access_Object_Type. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Check_Valid_Library_Unit_Pragma): Raise + exception. + (Analyze_Pragma): Remove detection of rewritten pragmas. + +2020-11-26 Joffrey Huguet <huguet@adacore.com> + + * libgnat/a-strmap.ads: Add preconditions and postconditions to + all subprograms. + +2020-11-26 Yannick Moy <moy@adacore.com> + + * sem_res.adb (Resolve_Equality_Op): Warn when -gnatwq is used + (the default) and the problematic case is encountered. + +2020-11-26 Yannick Moy <moy@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Issue a continuation message + to give proper recommendation here. + +2020-11-26 Gary Dismukes <dismukes@adacore.com> + + * exp_util.adb (Expand_Subtype_From_Expr): A typo correction, + plus other minor reformatting. + +2020-11-26 Ed Schonberg <schonberg@adacore.com> + + * sem_ch12.adb (Instantiate_Formal_Package): If previous matched + entity is overloadable, advance in the list of actuals of the + actual package, to prevent an erroneous match of two adjacent + overloadable homonyms with the same entity. + +2020-11-26 Justin Squirek <squirek@adacore.com> + + * sem_ch6.adb (First_Selector): Utility routine to return the + first selector or choice in an association. + (Check_Return_Construct_Accessibility): Modify loop to handle + named associations when iterating through discriminants. + +2020-11-26 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch12.adb: Fix casing from "Instantiation" to + "instantiation". + +2020-11-25 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb (Is_Uninitialized_Aggregate): Move... + * exp_util.adb (Is_Uninitialized_Aggregate): ... here. + (Expand_Subtype_From_Expr): If the expression is an + uninitialized aggregate, capture subtype for declared object and + remove expression to suppress further superfluous expansion. + +2020-11-25 Ed Schonberg <schonberg@adacore.com> + + * sem_eval.adb (Subtypes_Statically_Compatible): Scalar types + with compatible static bounds are statically compatible if + predicates are compatible, even if they are not static subtypes. + Same for private types without discriminants. + +2020-11-25 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch11.adb (Expand_N_Raise_Statement): Use Is_Entity_Name + consistently in tests on the name of the statement. + * exp_prag.adb (Expand_Pragma_Check): In the local propagation + case, wrap the raise statement in a block statement. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch8.adb (Expand_N_Exception_Renaming_Declaration): Move + "Nam" constant after the body of a nested subprogram; change "T" + from variable to constant. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * make.adb (Scan_Make_Arg): Merge ELSIF branches for -u and -U. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/implementation_defined_attributes.rst + (Has_Tagged_Values): Document based on the existing description + of Has_Access_Type and the comment for Has_Tagged_Component, + which is where frontend evaluates this attribute. + * gnat_rm.texi: Regenerate. + * sem_attr.adb (Analyze_Attribute): Merge processing of + Has_Access_Type and Has_Tagged_Component attributes. + * sem_util.adb (Has_Access_Type): Fix casing in comment. + * sem_util.ads (Has_Tagged_Component): Remove wrong (or + outdated) comment about the use of this routine to implement the + equality operator. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_Size_Attribute): Remove whitespace; + simplify with a membership test, which are now allowed in the + frontend code. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Analyze_One_Aspect): Fix inconsistent calls to + Make_Aitem_Pragma. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Check_Expr_Constants): Simplify with + Is_Named_Number. + * sem_prag.adb (Process_Convention): Likewise. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Analyze_One_Aspect): Detect aspect identifiers + with membership tests. + (Check_Aspect_At_End_Of_Declarations): Likewise. + (Freeze_Entity_Checks): Likewise; a local constant is no longer + needed. + (Is_Operational_Item): Similar simplification for attribute + identifiers. + (Is_Type_Related_Rep_Item): Likewise. + (Resolve_Iterable_Operation): Detect names with a membership + test. + (Validate_Independence): Replace repeated Ekind with a + membership test. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Analyze_One_Aspect): Replace duplicate of + Effective_Reads. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * einfo.adb: Use composite wrappers (e.g. + Is_Subprogram_Or_Entry) and membership tests where it appears to + improve clarity. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * einfo.adb (Is_Standard_Character_Type, + Is_Standard_String_Type): Simplify. + (Last_Formal): Use procedural variant of Next_Formal. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * einfo.adb: Replace "E" with Entity_Id in local object + declarations. + +2020-11-25 Steve Baird <baird@adacore.com> + + * exp_ch2.adb (Expand_Entity_Reference): A new local predicate + Is_Object_Renaming_Name indicates whether a given expression + occurs (after looking through qualified expressions and type + conversions) as the name of an object renaming declaration. If + Current_Value is available but this new predicate is True, then + ignore the availability of Current_Value. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch12.adb (Instantiate_Type): Remove extra whitespace. + (Validate_Access_Type_Instance): Remove dead (and duplicated) + code. + +2020-11-25 Gary Dismukes <dismukes@adacore.com> + + * exp_util.adb (Possible_Side_Effect_In_SPARK): Replace hyphen + with a space in "side-effect" (two instances). + +2020-11-25 Justin Squirek <squirek@adacore.com> + + * doc/gnat_rm/intrinsic_subprograms.rst (Shifts and Rotates): + Document behavior on negative numbers + * gnat_rm.texi: Regenerate. + * sem_eval.adb (Fold_Shift): Set modulus to be based on the RM + size for non-modular integer types. + +2020-11-25 Olivier Hainque <hainque@adacore.com> + + * adaint.c (__gnat_copy_attribs): Reinstate code based on utime + for timestamp processing on VxWorks 6. + +2020-11-25 Yannick Moy <moy@adacore.com> + + * exp_util.adb (Remove_Side_Effects): Only remove side-effects + in GNATprove mode when this is useful. + * sem_res.adb (Set_Slice_Subtype): Make sure in GNATprove mode + to define the Itype when needed, so that run-time errors can be + analyzed. + * sem_util.adb (Enclosing_Declaration): Correctly take into + account renaming declarations. + +2020-11-25 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-rannum.adb (Random_Discrete): Specifically deal with + the case where the size of the base type is larger than 64 bits. + +2020-11-25 Yannick Moy <moy@adacore.com> + + * sem_ch3.adb (Access_Type_Declaration): Set Etype before + checking for volatility compatibility. + +2020-11-25 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/g-rannum.ads (Random): New functions returning 128-bit. + * libgnat/g-rannum.adb (Random): Implement them and alphabetize. + (To_Signed): New unchecked conversion function for 128-bit. + +2020-11-25 Arnaud Charlet <charlet@adacore.com> + + * exp_ch7.adb (Build_Finalization_Master, Build_Finalizer, + Build_Object_Declarations, Make_Deep_Array_Body, + Wrap_Transient_Expression): Call Set_Debug_Info_Needed on + temporaries when Debug_Generated_Code is True. + +2020-11-25 Liaiss Merzougue <merzougue@adacore.com> + + * libgnat/s-imagei.adb + (Set_Digits): Rewrite the procedure to remove recursion. + (Image_Integer, Set_Image_Integer): Update assertions and remove + redundant ones. + * libgnat/s-imageu.adb + (Set_Image_Unsigned): Rewrite the procedure to remove recursion. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * exp_util.adb (Attribute_Constrained_Static_Value): Fix body + box. + * sem_attr.adb (Eval_Attribute): Replace repeated calls to + Attribute_Name with a captured value of the Attribute_Id; also, + remove extra parens around Is_Generic_Type. + +2020-11-25 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_prag.adb (Analyze_Pragma): Emit error on wrong argument + nkind. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb, sem_prag.adb: Use Is_Named_Number. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb, exp_util.adb: Fix style and typos in comments. + +2020-11-25 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): A variable that + is only incremented in the code has now type Nat; conversion is + now unnecessary. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Analyze_Global_Item): Call SPARK_Msg_NE with the + entity, not with its identifier. + +2020-11-24 Arnaud Charlet <charlet@adacore.com> + + * opt.ads (Generate_Asm): New flag. + * osint-c.adb (Set_Output_Object_File_Name): Accept any + extension when generating assembly. + * adabkend.adb (Scan_Compiler_Args): Recognize -S. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb, exp_ch4.adb, exp_intr.adb, sem_ch8.adb, + sem_res.adb, sem_type.adb, sem_util.adb: Reuse Is_Packed_Array. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb (Apply_Access_Check): Remove unbalanced paren. + * exp_attr.adb (Expand_N_Attribute_Reference): Fix typo in + comment. + +2020-11-24 Justin Squirek <squirek@adacore.com> + + * sem_prag.adb (Analyze_Pragma): Mark relevant pragmas as ghost + when they are within a ghost region. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * contracts.adb, freeze.adb, sem_ch12.adb, sem_prag.adb: Reuse + In_Same_List. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Is_Loop_Pragma): Avoid repeated calls to + Original_Node; remove unnecessary IF statement. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Rewrite + with a CASE statement. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Replace calls to + Sloc with a local constant Loc; remove call to + Analyze_And_Resolve and return, which is exactly what happens + anyway (and other branches in the Constrained declare block + appear to rely on analysis, resolution and returning happening + in all cases). + * sem_util.adb: Remove useless parens. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.adb (Is_Object_Reference): Delta and extension + aggregates are objects. + +2020-11-24 Ghjuvan Lacambre <lacambre@adacore.com> + + * libgnat/s-rident.ads (System.Rident): Register new restriction + IDs. + * par-ch13.adb (Get_Aspect_Specifications): Add restriction check. + * par-prag.adb (Process_Restrictions_Or_Restriction_Warnings): + Register No_Unrecognized_Aspects restriction. + * sem_prag.adb (Analyze_Pragma): Add restriction check. + * snames.ads-tmpl: Create restriction names. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Declared_Within): Return True for objects + declared within the attribute Loop_Entry prefix itself. + +2020-11-24 Yannick Moy <moy@adacore.com> + + * sem_ch3.adb (Process_Discriminants): Correctly set right + context for analyzing default value of discriminant. + +2020-11-24 Arnaud Charlet <charlet@adacore.com> + + * sem_type.adb (Add_One_Interp.Is_Universal_Operation): Account + for universal_access = operator. + (Disambiguate): Take into account preference on universal_access + = operator when relevant. + (Disambiguate.Is_User_Defined_Anonymous_Access_Equality): New. + +2020-11-24 Arnaud Charlet <charlet@adacore.com> + + * exp_util.adb (Is_Finalizable_Transient): Take into account return + statements containing N_Expression_With_Actions. Also clean up a + condition to make it more readable. + * exp_ch6.adb: Fix typo. + +2020-11-24 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-wtdeio.adb (TFT): Delete and adjust throughout. + * libgnat/a-wtenau.adb (TFT): Likewise. + * libgnat/a-wtfiio.adb (TFT): Likewise. + * libgnat/a-wtflio.adb (TFT): Likewise. + * libgnat/a-wtinio.adb (TFT): Likewise. + * libgnat/a-wtinio__128.adb (TFT): Likewise. + * libgnat/a-wtmoio.adb (TFT): Likewise. + * libgnat/a-wtmoio__128.adb (TFT): Likewise. + * libgnat/a-ztdeio.adb (TFT): Likewise. + * libgnat/a-ztenau.adb (TFT): Likewise. + * libgnat/a-ztfiio.adb (TFT): Likewise. + * libgnat/a-ztflio.adb (TFT): Likewise. + * libgnat/a-ztinio.adb (TFT): Likewise. + * libgnat/a-ztinio__128.adb (TFT): Likewise. + * libgnat/a-ztmoio.adb (TFT): Likewise. + * libgnat/a-ztmoio__128.adb (TFT): Likewise. + +2020-11-24 Arnaud Charlet <charlet@adacore.com> + + * sem_ch13.adb (Validate_Literal_Aspect): Add support for named + numbers and in particular overload of the Real_Literal function. + * sem_res.adb (Resolve): Add support for named numbers in + Real_Literal and Integer_Literal resolution. + * einfo.adb, einfo.ads (Related_Expression, + Set_Related_Expression): Allow E_Function. + * uintp.ads (UI_Image_Max): Bump size of buffer to avoid loosing + precision. + * sem_eval.adb: Fix typo in comment. + * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads (From_String): + Return a Valid_Big_Integer. + * libgnat/a-nbnbre.adb, libgnat/a-nbnbre.ads (From_String): New + variant taking two strings. Return a Valid_Big_Real. + +2020-11-24 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Analyze_Associations) <Explicit_Freeze_Check>: Test + that the instance is in a statement sequence instead of local scope. + (Freeze_Subprogram_Body): Use the special delayed placement with + regard to the parent instance only if its Sloc is strictly greater. + (Install_Body): Likewise. + +2020-11-24 Steve Baird <baird@adacore.com> + + * sem_ch13.adb (Validate_Literal_Aspect): Call to Base_Type + needed in order to correctly check result type of String_Literal + function when the first named subtype differs from the base + type (e.g.: + type T is range 1 .. 10 with String_Literal => ... ; + ). + +2020-11-24 Yannick Moy <moy@adacore.com> + + * sem_prag.adb (Analyze_Global_Item): Handle specially the + current instance of a PO. + * sem_util.ads (Is_Effectively_Volatile, + Is_Effectively_Volatile_For_Reading): Add parameter + Ignore_Protected. + * sem_util.adb (Is_Effectively_Volatile, + Is_Effectively_Volatile_For_Reading): Add parameter + Ignore_Protected to compute the query results ignoring protected + objects/types. + (Is_Effectively_Volatile_Object, + Is_Effectively_Volatile_Object_For_Reading): Adapt to new + signature. + +2020-11-24 Ghjuvan Lacambre <lacambre@adacore.com> + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: + Update documentation on -gnatyk. + * gnat_ugn.texi: Regenerate. + +2020-11-24 Yannick Moy <moy@adacore.com> + + * sem_ch10.adb (Analyze_Compilation_Unit): Move aspects from + body to the newly created spec. + +2020-11-24 Arnaud Charlet <charlet@adacore.com> + + * exp_ch6.adb (Add_Cond_Expression_Extra_Actual): Simplify + handling of function calls and remove bug in handling of + transient objects. Minor reformatting along the way. + +2020-11-24 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbin.adb (From_String): Implement fully. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Delta_Array_Aggregate): If the choice is + a subtype_indication then call + Resolve_Discrete_Subtype_Indication; both for choices + immediately inside array delta aggregates and inside + iterated_component_association within array delta aggregates. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * lib-load.adb, lib-writ.adb, lib.adb, par-load.adb, + rtsfind.adb, sem_ch10.adb: Use Present where possible. + +2020-11-24 Yannick Moy <moy@adacore.com> + + * sem_prag.adb (Analyze_Depends_Global): Reject Global and + Depends on null procedure. + +2020-11-24 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbre.adb (From_String): Handle properly '_' + characters. + +2020-11-24 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_Array_Aggregate, + Expand_SPARK_N_Aggregate): Remove, no longer needed. + * sem_aggr.adb (Resolve_Iterated_Component_Association): Only + remove references in the analyzed expression when generating + code and the expression needs to be analyzed anew after being + rewritten into a loop. + +2020-11-24 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_defined_characteristics.rst: Complete + entry of 3.5.9(10). + * gnat_rm.texi: Regenerate. + +2020-11-20 Maciej W. Rozycki <macro@linux-mips.org> + + * adaint.c (__gnat_number_of_cpus): Check for the presence of + _SC_NPROCESSORS_ONLN rather than a list of OS-specific macros + to decide whether to use `sysconf'. + +2020-11-20 Jakub Jelinek <jakub@redhat.com> + + PR other/97911 + * gcc-interface/Make-lang.in (ada.serial): Change from goal to a + variable. + (.PHONY): Drop ada.serial and ada.prev. + (gnat1$(exeext)): Depend on $(ada.serial) rather than ada.serial. + +2020-11-19 Eric Botcazou <ebotcazou@adacore.com> + + PR ada/97805 + * adaint.c: Include climits in C++ and limits.h otherwise. + +2020-11-19 Eric Botcazou <ebotcazou@adacore.com> + + * exp_dbug.adb (Is_Handled_Scale_Factor): Delete. + (Get_Encoded_Name): Do not call it. + * gcc-interface/decl.c (gnat_to_gnu_entity) <Fixed_Point_Type>: + Tidy up and always use a meaningful description for arbitrary + scale factors. + * gcc-interface/misc.c (gnat_get_fixed_point_type_info): Remove + obsolete block and adjust the description of the scale factor. + +2020-11-18 Jakub Jelinek <jakub@redhat.com> + + * gcc-interface/Make-lang.in (ada.serial): New goal. + (.PHONY): Add ada.serial ada.prev. + (gnat1$(exeext)): Depend on ada.prev. Call LINK_PROGRESS. + +2020-11-18 Matthias Klose <doko@ubuntu.com> + + PR ada/97859 + * Makefile.rtl (powerpc% linux%): Also match powerpc64le cpu. + +2020-11-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/gigi.h: Remove ^L characters throughout. + * gcc-interface/decl.c: Likewise. + * gcc-interface/utils.c: Likewise. + * gcc-interface/utils2.c: Likewise. + * gcc-interface/trans.c (gnat_to_gnu) <N_Allocator>: Do not explicitly + go to the base type for the Has_Constrained_Partial_View flag. + +2020-11-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (build_binary_op_trapv): Convert operands + to the result type before doing generic overflow checking. + +2020-11-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (can_be_lower_p): Remove. + (Regular_Loop_to_gnu): Add ENTRY_COND unconditionally if + BOTTOM_COND is non-zero. + +2020-11-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Constant>: In case + the constant is not being defined, get the expression in type + annotation mode only if its type is elementary. + +2020-11-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (gnat_to_gnu) <N_Op_Shift>: Also convert + GNU_MAX_SHIFT if the type of the operation has been changed. + * gcc-interface/utils.c (can_materialize_object_renaming_p): Add + pair of missing parentheses. + +2020-11-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/Makefile.in: Force target_cpu to powerpc if the + nominal target is powerpc64-suse-linux. + +2020-11-07 Iain Sandoe <iain@sandoe.co.uk> + + * gcc-interface/misc.c (gnat_printable_name): Change + DECL_IS_BUILTIN -> DECL_IS_UNDECLARED_BUILTIN. + +2020-10-28 Alexandre Oliva <oliva@adacore.com> + + PR ada/97504 + * Makefile.rtl (LIBGNAT_TARGET_PAIRS> <riscv*-*-*>: Use wraplf + version of Aux_Long_Long_Float. + +2020-10-27 Doug Rupp <rupp@adacore.com> + + * Makefile.rtl: Add vx7r2cert spec file to ARM, PowerPC and x86 + targets. + * vxworks7-cert-rtp-link.spec: New spec file. + +2020-10-27 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add g-spogwa object. + * libgnat/g-spogwa.adb: Fix style errors. + +2020-10-27 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_Array_Aggregate): Dedicated + routine for array aggregates; mostly reuses existing code, but + calls itself recursively for multi-dimensional array aggregates. + (Expand_SPARK_N_Aggregate): Call Expand_SPARK_Array_Aggregate to + do the actual expansion, starting from the first index of the + array type. + +2020-10-27 Ed Schonberg <schonberg@adacore.com> + + * sem_aggr.adb (Resolve_Iterated_Component_Association): new + internal subprogram Remove_References, to reset semantic + information on each reference to the index variable of the + association, so that Collect_Aggregate_Bounds can work properly + on multidimensional arrays with nested associations, and + subsequent expansion into loops can verify that dimensions of + each subaggregate are compatible. + +2020-10-27 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_prag.adb (Append_Copies): Handle N_Parameter_Associations. + +2020-10-27 Eric Botcazou <ebotcazou@adacore.com> + + * ada_get_targ.adb (Digits_From_Size): Delete. + (Width_From_Size): Likewise. + * get_targ.adb (Digits_From_Size): Likewise. + (Width_From_Size): Likewise. + * get_targ.ads (Digits_From_Size): Likewise. + (Width_From_Size): Likewise. + * ttypes.ads: Remove with clause for Get_Targ. + (Standard_Short_Short_Integer_Width): Delete. + (Standard_Short_Integer_Width): Likewise. + (Standard_Integer_Width): Likewise. + (Standard_Long_Integer_Width): Likewise. + (Standard_Long_Long_Integer_Width): Likewise. + (Standard_Long_Long_Long_Integer_Width): Likewise. + (Standard_Short_Float_Digits): Likewise. + (Standard_Float_Digits): Likewise. + (Standard_Long_Float_Digits): Likewise. + (Standard_Long_Long_Float_Digits): Likewise. + * gnat1drv.adb (Adjust_Global_Switches): Adjust. + +2020-10-27 Arnaud Charlet <charlet@adacore.com> + + * exp_ch6.adb, freeze.adb, gnat1drv.adb, opt.ads, sem_ch6.adb + (Transform_Function_Array): New flag, split from Modify_Tree_For_C. + * exp_unst.adb: Minor reformatting. + +2020-10-27 Dmitriy Anisimkov <anisimko@adacore.com> + + * libgnat/g-socpol.adb (Wait): Do not exit from loop on EINTR + error and timeout is over. + +2020-10-26 Ed Schonberg <schonberg@adacore.com> + + * exp_aggr.adb (Build_Array_Aggr_Code): If the aggregate + includes an Others_Choice in an association that is an + Iterated_Component_Association, generate a proper loop for it. + +2020-10-26 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-tifiio.adb: Add missing sign in documentation. + * libgnat/s-imgrea.ads: Minor fixes in commentary. + +2020-10-26 Pat Rogers <rogers@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst: Include + "Jorvik" in pragma Profile description. + * gnat_rm.texi: Regenerate. + +2020-10-26 Bob Duff <duff@adacore.com> + + * sem_attr.adb (Check_Image_Type): Remove "|", so the compiler + will not crash. + * errout.ads: Improve comment. This has nothing to do with + -gnatQ. + +2020-10-26 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-tifiio.adb: Minor editions to documentation. + +2020-10-26 Piotr Trojanek <trojanek@adacore.com> + + * contracts.adb (Causes_Contract_Freezing): Extend condition to + match the one in Analyze_Subprogram_Body_Helper. This routine is + used both as an assertion at the very start of + Freeze_Previous_Contracts and to detect previous declaration for + which Freeze_Previous_Contracts has been executed. + +2020-10-26 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-tifiio.adb: Move around documentaton paragraph. + +2020-10-26 Piotr Trojanek <trojanek@adacore.com> + + * inline.adb (Establish_Actual_Mapping_For_Inlined_Call): Add + guard for a call to Set_Last_Assignment with the same condition + as the assertion in that routine and explain why this guard + fails in GNATprove mode. + +2020-10-26 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_defined_characteristics.rst: Adjust + the entries of 3.5.9(8) and 3.5.9(10). + * gnat_rm.texi: Regenerate. + +2020-10-26 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-tifiio.adb: Change the range of supported Small + values. + (E0, E1, E2): Adjust factors. + (Exact): Return false if the Small does not fit in 64 bits. + +2020-10-26 Dmitriy Anisimkov <anisimko@adacore.com> + + * libgnat/g-socket.adb (Wait_On_Socket): Boolean parameter + For_Read changed to Event parameter of type + GNAT.Sockets.Poll.Wait_Event_Set. Implementation is simplified + and based on call to GNAT.Sockets.Poll.Wait now. + +2020-10-26 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-tifiio.adb: Minor editions to documentation. + +2020-10-26 Yannick Moy <moy@adacore.com> + + * sem_ch12.adb (Restore_Private_Views): Do not lose the + information provided by Is_Generic_Actual_Type in GNATprove + mode. + +2020-10-26 Arnaud Charlet <charlet@adacore.com> + + * sem_warn.adb (Warn_On_Unreferenced_Entity): Suppress warning + on formal parameters of all dispatching operations. + +2020-10-26 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Delta_Array_Aggregate): Fix typos in + error message. + +2020-10-26 Olivier Hainque <hainque@adacore.com> + + * libgnat/s-dwalin.adb (Symbolic_Traceback): Always emit the hex + address at the beginning of an entry if suppression is not + requested. Consistently output a "???" for the subprogram name + when it is unknown. + +2020-10-26 Doug Rupp <rupp@adacore.com> + + * s-oscons-tmplt.c (_nfds_t): Use sizeof (unsigned long int). + +2020-10-26 Piotr Trojanek <trojanek@adacore.com> + + * par-ch4.adb (P_Iterated_Component_Association): Move code for + iterated_element_association to + Build_Iterated_Element_Association. + +2020-10-26 Yannick Moy <moy@adacore.com> + + * sem_ch12.adb (Needs_Body_Instantiated): In GNATprove mode, do + not instantiate bodies outside of the main unit. + +2020-10-26 Ed Schonberg <schonberg@adacore.com> + + * sem_aggr.adb (Resolve_Delta_Array_Aggregate): For an + association that is an iterated component association, attach + the copy of the expression to the tree prior to analysis, in + order to preserve its context. This is needed when verifying + static semantic rules that depend on context, for example that a + use of 'Old appears only within a postcondition. + +2020-10-26 Bob Duff <duff@adacore.com> + + * doc/gnat_ugn/gnat_utility_programs.rst: Document that + --no-comments-fill is now the default. + +2020-10-26 Gary Dismukes <dismukes@adacore.com> + + * sem_aggr.adb (Resolve_Extension_Aggregate): When testing for + an aggregate that is illegal due to having an ancestor type that + has unknown discriminants, add an "or else" condition testing + whether the aggregate type has unknown discriminants and that + Partial_View_Has_Unknown_Discr is also set on the ancestor type. + Extend the comment, including adding ??? about a possible + simpler test. + +2020-10-26 Bob Duff <duff@adacore.com> + + * libgnat/a-cihama.adb, libgnat/a-cohama.adb, + libgnat/a-cohase.adb (Delete): Set Position.Position, and + assert. + +2020-10-26 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Find_Direct_Name.Undefined): Handle known unit + names with 3 selectors. + +2020-10-26 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Add missing call + to Enter_Name, just like it is called for + iterated_component_association in Expand_SPARK_N_Aggregate. + +2020-10-26 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Reuse local + constant Expr and the Choice_List routine. + (Expand_SPARK_N_Aggregate): Reuse local constant Expr. + +2020-10-26 Piotr Trojanek <trojanek@adacore.com> + + * par-ch4.adb (P_Iterated_Component_Association): Fix typos in + comments. + +2020-10-26 Arnaud Charlet <charlet@adacore.com> + + * par-ch6.adb (P_Formal_Part): Ada 2020 supports scanning + aspects on formal parameters. + * doc/gnat_rm/implementation_defined_aspects.rst (Aspect + Unreferenced): Update documentation. + * gnat_rm.texi: Regenerate. + +2020-10-26 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb (Freeze_Type_Refs): When an entity in an expression + function is a type, freeze the entity and not just its type, + which would be incomplete when the type is derived and/or + tagged. + +2020-10-26 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_Update_Attribute): Handle + subtype_indication just like in Expand_Delta_Array_Aggregate. + +2020-10-25 Iain Sandoe <iain@sandoe.co.uk> + + * Makefile.rtl: Add GNATRTL_128BIT_PAIRS/OBJS for 64bit + PowerPC Darwin cases. + +2020-10-23 Iain Sandoe <iain@sandoe.co.uk> + + * adaint.c: On Darwin platforms, define st_atim to + st_atimespec. Likwise st_mtim to st_mtimespec. + +2020-10-23 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (EXTRA_GNATRTL_NONTASKING_OBJS) [IA64/Linux]: Fix typo. + +2020-10-23 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (EXTRA_GNATRTL_NONTASKING_OBJS) [IA64/Linux]: Fix typo. + +2020-10-23 Alexandre Oliva <oliva@adacore.com> + + PR ada/97504 + * Makefile.rtl (LIBGNAT_TARGET_PAIRS): Select wraplf version + of Aux_Long_Long_Float for s390 and remaining sparc and + powerpc targets. + +2020-10-23 Dmitriy Anisimkov <anisimko@adacore.com> + + * Makefile.rtl (GNATRTL_SOCKETS_OBJS): New object + g-socpol$(objext) New source files noted: g-socpol.adb, + g-socpol.ads, g-socpol__dummy.adb, g-socpol__dummy.ads, + g-sopowa.adb, g-sopowa__posix.adb, g-sopowa__mingw.adb, + g-spogwa.adb, g-spogwa.ads. + * impunit.adb (Non_Imp_File_Names_95): New base filename + g-socpol in "GNAT Library Units" section for GNAT.Sockets.Poll + unit. + * libgnat/g-socket.ads, libgnat/g-socket.adb: + (Raise_Socket_Error): Moved from body to private part of + specification to use in GNAT.Sockets.Poll. + * libgnat/g-socpol.ads, libgnat/g-socpol.adb: Main unit of the + implementation. + * libgnat/g-socpol__dummy.ads, libgnat/g-socpol__dummy.adb: + Empty unit for the systems without sockets support. + * libgnat/g-spogwa.ads, libgnat/g-spogwa.adb: Generic unit + implementing sockets poll on top of select system call. + * libgnat/g-sopowa.adb (Wait): Separate implementation for + operation systems with poll system call support. + * libgnat/g-sopowa__posix.adb (Wait): Separate implementation + for POSIX select system call. + * libgnat/g-sopowa__mingw.adb (Wait): Separate implementation + for Windows select system call. + * gsocket.h (_WIN32_WINNT): Increase to 0x0600 for winsock2.h to + allow WSAPoll related definitions. + * s-oscons-tmplt.c: Fix comment next to #endif for + #if defined (__linux__) || defined (__ANDROID__) line. Include + <poll.h> for all except VxWorks and Windows. + (SIZEOF_nfds_t): New definition. + (SIZEOF_fd_type): New definition. + (SIZEOF_pollfd_events): New definition. + (POLLIN, POLLPRI, POLLOUT, POLLERR, POLLHUP, POLLNVAL): New + definitions for VxWorks to be able to emulate poll on top of + select in it. Define POLLPRI as zero on Windows as it is not + supported there. + (Poll_Linkname): New definition, because the poll system call + has different name in Windows and POSIX. + +2020-10-23 Justin Squirek <squirek@adacore.com> + + * checks.adb (Apply_Accessibility_Check): Skip checks against + the extra accessibility of a function result when in Ada 2005 + mode or earlier. + * exp_ch3.adb (Build_Initialization_Call): Modify accessibility + level calls to use Accessibility_Level. + (Expand_N_Object_Declaration): Modify accessibility level calls + to use Accessibility_Level. + * exp_ch4.adb (Expand_Allocator_Expression): Add static check + for anonymous access discriminants. Remove unneeded propagation + of accessibility actual. + (Expand_N_In): Modify accessibility level calls to use + Accessibility_Level. + (Expand_N_Type_Conversion): Modify accessibility level calls to + use Accessibility_Level. + * exp_ch5.adb (Expand_N_Assignment_Statement): Modify + accessibility level calls to use Accessibility_Level. + * exp_ch6.adb (Expand_Call_Helper): Rewrite accessibility + calculation for the extra accessibility of result actual in + function calls, and modify accessibility level calls to use + Accessibility_Level. + (Check_Against_Result_Level): Removed. + * exp_ch9.adb (Expand_N_Requeue_Statement): Add dynamic + accessibility check for requeues + * sem_attr.adb (Resolve_Attribute): Modify accessibility level + calls to use Accessibility_Level. + * sem_ch13.adb (Associate_Storage_Pool): Modify accessibility + level calls to use Accessibility_Level. + * sem_ch4.adb (Analyze_Call): Add static check for explicitly + aliased formals in function calls within return statements. + * sem_ch6.adb (Check_Return_Construct_Accessibility): Rewrite + routine to account for non-aggregate return objects. + (Generate_Minimum_Accessibility): Created. + (Analyze_Call): Modify accessibility level calls to use + Accessibility_Level. + (Analyze_Subprogram_Body_Helper): Add generation of minimum + accessibility for the extra accessibility of the function + result. + * sem_ch9.adb (Analyze_Requeue): Modify accessibility level + calls to use Accessibility_Level. + * sem_res.adb: (Check_Aliased_Parameters): Modify accessibility + level calls to use Accessibility_Level. + (Valid_Conversion): Modify accessibility level calls to use + Accessibility_Level. + * sem_util.adb, sem_util.ads (Accessibility_Level_Helper): + Renamed to Accessibility_Level, add detection for functions in + prefix notation, and add cases where to return zero when + specified. Modified to take new, more descriptive, parameters. + (Accessibility_Level): Created. + (Function_Call_Level): Removed. + (Function_Call_Or_Allocator_Level): Created to centralize the + calculation accessibility levels for function calls and + allocators. + (Static_Accessibility_Level): Removed. + (Dynamic_Accessibility_Level): Removed. + (Get_Dynamic_Accessibility): Renamed from Get_Accessibility. + (In_Return_Value): Created to determine if a given expression + contributes to the current function's return value. + (Is_Master): Created. + (Is_Explicitly_Aliased): Created + +2020-10-23 Bob Duff <duff@adacore.com> + + * doc/gnat_ugn/gnat_utility_programs.rst: Document + --no-comments-fill. + +2020-10-23 Piotr Trojanek <trojanek@adacore.com> + + * contracts.adb (Analyze_Entry_Or_Subprogram_Contract, + Analyze_Subprogram_Body_Stub_Contract): Fix missing references + to Subprogram_Variant where similar references to Contract_Cases + are present. + * sem_prag.adb (Analyze_Contract_Case, Analyze_Variant): Check + that aggregate parameter has no expressions. + (Analyze_Pragma): Replace Contract_Cases with Subprogram_Variant + in a copy-pasted comment. + +2020-10-23 Philippe Gil <gil@adacore.com> + + * libgnat/g-socket.ads: Fix comment typo. + +2020-10-23 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst (VFA): Remove uage + restrictions in conjunction with Atomic and Aliased. + * gnat_rm.texi: Regenerate. + * aspects.ads (Aspect_Id): Add Aspect_Full_Access_Only. + (Is_Representation_Aspect): Likewise. + (Aspect_Names): Likewise. + (Aspect_Delay): Likewise. + * einfo.ads (Is_Atomic_Or_VFA): Rename into... + (Is_Full_Access): ...this. + (Is_Volatile_Full_Access): Document new usage for Full_Access_Only. + * einfo.adb (Is_Atomic_Or_VFA): Rename into... + (Is_Full_Access): ...this. + * freeze.ads (Is_Atomic_VFA_Aggregate): Rename into... + (Is_Full_Access_Aggregate): ...this. + * freeze.adb (Is_Atomic_VFA_Aggregate): Rename into... + (Is_Full_Access_Aggregate): ...this. Adjust to above renaming. + (Freeze_Array_Type): Likewise. + (Freeze_Entity): Likewise. + * exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Likewise. + (Expand_Record_Aggregate): Likewise. + * exp_ch4.adb (Expand_N_Op_Eq): Likewise. + * exp_ch5.adb (Expand_Assign_Array): Likewise. + * exp_ch8.adb (Evaluation_Required): Likewise. + * layout.adb (Layout_Type): Likewise. + (Set_Composite_Alignment): Likewise. + * sem_aux.ads (Has_Rep_Item): Delete. + * sem_aux.adb (Has_Rep_Item): Likewise. + * sem_attr.adb (Resolve_Attribute) <Attribute_Access>: Implement + new legality rules in C.6(12). + * sem_ch12.adb (Instantiate_Object): Likewise. + * sem_res.adb (Resolve_Actuals): Likewise. + * sem_ch13.adb (Inherit_Delayed_Rep_Aspects): Deal with aspect + Full_Access_Only. + (Check_False_Aspect_For_Derived_Type): Likewise. + (Make_Pragma_From_Boolean_Aspect): Test for the presence of Expr. + Deal with aspect Full_Access_Only. + (Analyze_Aspects_At_Freeze_Point): Likewise. + (Analyze_One_Aspect): Do not set Delay_Required to true even for + Always_Delay boolean aspects if they have no expression. Force + Delay_Required to true for aspect Full_Access_Only in all cases. + Reject aspect Full_Access_Only if not in Ada 2020 mode. + (Check_Aspect_At_End_Of_Declarations): Deal with empty expression. + (Check_Aspect_At_Freeze_Point): Likewise. + (Rep_Item_Entity): Delete. + (Inherit_Aspects_At_Freeze_Point): Align handling for Bit_Order + with that for Scalar_Storage_Order. + * sem_prag.adb (Check_Atomic_VFA): Delete. + (Check_VFA_Conflicts): Likewise. + (Check_Full_Access_Only): New procedure. + (Process_Atomic_Independent_Shared_Volatile): Call to implement + the new legality checks in C.6(8/2) and mark the entity last. + (Analyze_Pragma) <Pragma_Atomic_Components>: Remove obsolete check. + * sem_util.ads (Is_Atomic_Or_VFA_Object): Rename into... + (Is_Full_Access_Object): ...this. + (Is_Subcomponent_Of_Atomic_Object): Rename into... + (Is_Subcomponent_Of_Full_Access_Object): ...this. + * sem_util.adb (Inherit_Rep_Item_Chain): Use Present_In_Rep_Item. + (Is_Atomic_Or_VFA_Object): Rename into... + (Is_Full_Access_Object): ...this. + (Is_Subcomponent_Of_Atomic_Object): Rename into... + (Is_Subcomponent_Of_Full_Access_Object): ...this and adjust. + * snames.ads-tmpl (Name_Full_Access_Only): New name of aspect. + * gcc-interface/decl.c (gnat_to_gnu_entity): Adjust for renaming. + (promote_object_alignment): Likewise. + (gnat_to_gnu_field): Likewise. Rename local variable and use + specific qualifier in error message for Volatile_Full_Access. + * gcc-interface/trans.c (lvalue_required_p): Likewise. + +2020-10-23 Arnaud Charlet <charlet@adacore.com> + + * lib-writ.ads, lib-writ.adb (Write_ALI): No longer read + existing ALI files in -gnatc mode. + +2020-10-23 Arnaud Charlet <charlet@adacore.com> + + * libgnat/g-socthi__mingw.adb (C_Select): Fix logic in code and + make it explicit that we are checking against null values before + dereferencing them. + +2020-10-23 Eric Botcazou <ebotcazou@adacore.com> + + * exp_imgv.adb (Expand_Image_Attribute): For an enumeration type + subject to pragma Discard_Names, convert 'Pos to Long_Long_Integer + before applying 'Img to the result. + +2020-10-23 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb (Freeze_Type_Refs): Add guard on freezing of the + designated type of an access type appearing in the expression, + when expression includes an explicit dereference whose prefix + includes a function call. + +2020-10-23 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Handle + subtype_indication; do not apply range checks for ranges; add + comment saying that others_choices is not allowed. + +2020-10-23 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Aggregate, + Expand_SPARK_Delta_Or_Update): Expand + Iterated_Component_Association occurring within delta + aggregates. + (Expand_SPARK): Apply SPARK-specific expansion to ordinary + aggregates. + +2020-10-23 Johannes Kanig <kanig@adacore.com> + + * exp_util.adb, exp_util.ads + (Containing_Package_With_Ext_Axioms, + Has_Annotate_Pragma_For_External_Axiomatizations): Removed. + * sem_ch8.adb (Analyze_Subprogram_Renaming): Removed code + related to external axiomatizations. + * einfo.ads + (Is_Generic_Actual_Subprogram): Removed comment about external + axiomatization. + +2020-10-23 Ed Schonberg <schonberg@adacore.com> + + * sem_aggr.adb (Resolve_Aggregate): Do not call + Resolve_Container_Aggregate if compilation version is earlier + than Ada_2020. + +2020-10-23 Arnaud Charlet <charlet@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst: Improve + documentation of pragma Abort_Defer. + * gnat_rm.texi: Regenerate. + +2020-10-23 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_prag.adb (Etype_Or_Dim3): New function. + (Expand_Pragma_Cuda_Execute): Use Etype_Or_Dim3 for temporary + decls. + +2020-10-23 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-fileio.adb (Open): Fix setting of Tempfile. + +2020-10-23 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_prag.adb (Get_Launch_Kernel_Arg_Type): Renamed to + Get_Nth_Arg_Type and made more generic. + (Build_Dim3_Declaration): Now builds a CUDA.Internal.Dim3 + instead of a CUDA.Vector_Types.Dim3. + (Build_Shared_Memory_Declaration): Now infers needed type from + Launch_Kernel instead of using a hard-coded type. + (Expand_Pragma_CUDA_Execute): Build additional temporaries to + store Grids and Blocks. + * rtsfind.ads: Move Launch_Kernel from public to internal + package. + +2020-10-23 Arnaud Charlet <charlet@adacore.com> + + * sem_ch4.adb (Complete_Object_Operation): Only mark entities + referenced if we are compiling the extended main unit. + * sem_attr.adb (Analyze_Attribute [Attribute_Tag]): Record a + reference on the type and its scope. + +2020-10-23 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb (Is_Uninitialized_Aggregate): Recognize an array + aggregate with box initialization, scalar components, and no + component default values. + (Freeze_Entity, Check_Address_Clause): Call it, and simplify + freeze code for entity by removing useless assignment. + +2020-10-23 Javier Miranda <miranda@adacore.com> + + * sem_ch3.adb (Check_Abstract_Overriding): Subprogram renamings + cannot be overridden. + (Derive_Subprogram): Enable setting attribute + Requires_Overriding on functions with controlling access results + of record extensions with a null extension part require + overriding (AI95-00391/06). + +2020-10-23 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Delta_Array_Aggregate): Push scope of + the implicit loop before entering name of the index parameter, + not after; enter name no matter if the identifier has been + decorated before. + +2020-10-23 Gary Dismukes <dismukes@adacore.com> + + * sem_ch4.adb (Analyze_Call): In the case where the call is not + overloaded, check for a call to an abstract nondispatching + operation and flag an error. + +2020-10-23 Eric Botcazou <ebotcazou@adacore.com> + + * gnat1drv.adb (Adjust_Global_Switches): Rewrite again code enabling + or disabling the support for 128-bit integer types. + +2020-10-23 Arnaud Charlet <charlet@adacore.com> + + * alloc.ads, aspects.adb, aspects.ads, atree.adb, atree.ads, + casing.adb, casing.ads, csets.adb, csets.ads, debug.adb, debug.ads, + einfo.adb, einfo.ads, elists.adb, elists.ads, fname.adb, fname.ads, + gnatvsn.adb, gnatvsn.ads, hostparm.ads, indepsw-aix.adb, + indepsw-darwin.adb, indepsw-gnu.adb, indepsw.adb, indepsw.ads, + krunch.adb, krunch.ads, lib-list.adb, lib-sort.adb, lib.adb, lib.ads, + namet-sp.adb, namet-sp.ads, namet.adb, namet.ads, nlists.adb, + nlists.ads, opt.adb, opt.ads, output.adb, output.ads, rident.ads, + scans.adb, scans.ads, scil_ll.adb, scil_ll.ads, sem_aux.ads, + sem_aux.adb, sfn_scan.adb, sinfo.adb, sinfo.ads, sinput.adb, + sinput.ads, snames.adb-tmpl, snames.ads-tmpl, stand.ads, + stringt.adb, stringt.ads, table.adb, table.ads, types.adb, + types.ads, uintp.adb, uintp.ads, uname.adb, uname.ads, + urealp.adb, urealp.ads, vast.adb, vast.ads, widechar.adb, + widechar.ads: Update header. + +2020-10-23 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbin.adb (From_String): Take advantage of + Long_Long_Long_Integer. + * libgnat/s-genbig.ads, libgnat/s-genbig.adb (To_Bignum): New + function taking a Long_Long_Long_Integer. + +2020-10-23 Justin Squirek <squirek@adacore.com> + + * sem_util.adb (Accessibility_Call_Helper): In the selected + component case, test if a prefix is a function call and whether + the subprogram call is not being used in its entirety and use + the Innermost_Master_Scope_Depth in that case. + (Innermost_Master_Scope_Depth): Test against the node_par + instead of its identifier to avoid misattributing unnamed blocks + as not being from source. + (Function_Call_Level): Add calculation for whether a subprogram + call is initializing an object in its entirety. + (Subprogram_Call_Level): Renamed to Function_Call_Level. + +2020-10-23 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Check_External_Properties): Rewrite to match the + SPARK RM description. + +2020-10-23 Piotr Trojanek <trojanek@adacore.com> + + * contracts.adb (Check_Type_Or_Object_External_Properties): + Cleanup. + +2020-10-23 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Analyze_External_Property_In_Decl_Part): Set the + output parameter Expr_Val to the (implicit) pragma argument even + when returning early. + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (GNATRTL_128BIT_PAIRS): Add i-cexten.ads. + * debug.adb (d.H): Document new usage. + * doc/gnat_rm/representation_clauses_and_pragmas.rst (Size Clauses): + Document new limit on 64-bit platforms. + (Component_Size Clauses): Likewise. + (Pragma Pack for Arrays): Likewise. + (Pragma Pack for Records): Likewise. + (Record Representation Clauses): Likewise. + * gnat_rm.texi: Regenerate. + * gnat1drv.adb (Adjust_Global_Switches): Rewrite code enabling or + disabling the support for 128-bit integer types. + * switch-c.adb (Scan_Front_End_Switches): Do not deal with e128. + * usage.adb (Write_Switch_Char): Do not print -gnate128 switch. + * libgnat/i-cexten__128.ads: New file. + +2020-10-22 Javier Miranda <miranda@adacore.com> + + * einfo.ads (Has_Limited_View): New synthesized attribute. + * einfo.adb (Has_Limited_View): New synthesized attribute. + (Set_Limited_View): Complete assertion. + * sem_ch10.ads (Is_Visible_Through_Renamings): Make this routine + public to invoke it from Find_Expanded_Name and avoid reporting + spurious errors on renamings of limited-with packages. + (Load_Needed_Body): Moved to have this spec alphabetically + ordered. + * sem_ch10.adb (Is_Visible_Through_Renamings): Moved to library + level. + (Is_Limited_Withed_Unit): New subprogram. + * sem_ch3.adb (Access_Type_Declaration): Adding protection to + avoid reading attribute Entity() when not available. + * sem_ch8.adb (Analyze_Package_Renaming): Report error on + renamed package not visible through context clauses. + (Find_Expanded_Name): Report error on renamed package not + visible through context clauses; handle special case where the + prefix is a renaming of a (now visible) shadow package. + +2020-10-22 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_prag.adb (Get_Launch_Kernel_Arg_Type): New function. + (Build_Shared_Memory_Declaration): Use + Get_Launch_Kernel_Arg_Type. + (Build_Stream_Declaration): Use Get_Launch_Kernel_Arg_Type. + * rtsfind.ads: Remove RO_IC_Unsigned_Long_Long. + +2020-10-22 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-imenne.adb, libgnat/s-imgrea.adb: Add assertions. + +2020-10-22 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-imgrea.adb (Set_Image_Real): Update annotations. + +2020-10-22 Steve Baird <baird@adacore.com> + + * aspects.ads: Introduce the subtype Nonoverridable_Aspect_Id, + whose Static_Predicate reflects the list of nonoverridable + aspects given in Ada RM 13.1.1(18.7). + * sem_util.ads, sem_util.adb: Add two new visible subprograms, + Check_Inherited_Nonoverridable_Aspects and Is_Confirming. The + former is used to check the consistency of inherited + nonoverridable aspects from multiple sources. The latter + indicates whether two aspect specifications for a nonoverridable + aspect are confirming. Because of compatibility concerns in + compiling QGen, Is_Confirming always returns True if + Relaxed_RM_Semantics (i.e., -gnatd.M) is specified. + * sem_ch3.adb (Derived_Type_Declaration): Call new + Check_Inherited_Nonoverridable_Aspects procedure if interface + list is non-empty. + * sem_ch9.adb (Check_Interfaces): Call new + Check_Inherited_Nonoverridable_Aspects procedure if interface + list is non-empty. + * sem_ch13.adb (Analyze_Aspect_Specifications): When an explicit + aspect specification overrides an inherited nonoverridable + aspect, check that the explicit specification is confirming. + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.ads (Check_Compile_Time_Size): Adjust size limit. + +2020-10-22 Richard Kenner <kenner@adacore.com> + + * sprint.adb (pg, po, ps): Use {Push,Pop}_Output. + * treepr.adb (pl, pn): Likewise. + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_advice.rst: Minor fix. + * gnat_rm.texi: Regenerate. + +2020-10-22 Steve Baird <baird@adacore.com> + + * sem_util.adb (Is_Container_Aggregate): A new local predicates + which indicates whether a given expression is a container + aggregate. The implementation of this function is incomplete; in + the unusual case of a record aggregate (i.e., not a container + aggregate) of a type whose Aggregate aspect is specified, the + function will incorrectly return True. + (Immediate_Context_Implies_Is_Potentially_Unevaluated): Improve + handling of aggregate components. + (Is_Repeatedly_Evaluated): Test for container aggregate + components along with existing test for array aggregate + components. + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * exp_fixd.adb (Fpt_Value): Fold if-then-else with identical arms. + +2020-10-22 Ed Schonberg <schonberg@adacore.com> + + * par-ch4.adb (P_Iterated_Component_Association): If the + construct includes an iterator filter it corresponds to an + Iterated_Element_Association, so build the proper node for it. + * exp_aggr.adb (Expand_Container_Aggregate, Aggregate_Size): If + the component is an Iterated_Element_Association, treat it as + having a non-static size. + +2020-10-22 Ghjuvan Lacambre <lacambre@adacore.com> + + * scng.adb (Scan): Check if any letter of the token is + uppercase. + +2020-10-22 Justin Squirek <squirek@adacore.com> + + * sem_util.adb (Accessibility_Level_Helper): Conversions to + named access types get the level associated with the named + access type. + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (Has_Constrained_Partial_View): Add "base type" marker. + +2020-10-22 Gary Dismukes <dismukes@adacore.com> + + * einfo.adb (Has_Constrained_Partial_View): Apply Base_Type to Id. + * sem_res.adb (Resolve_Actuals.Check_Aliased_Parameter): Remove + "not Is_Generic_Type" test and call + Object_Type_Has_Constrained_Partial_View instead of + Has_Constrained_Partial_View. Improve related error message to + say "does not statically match" instead of just "does not + match". + +2020-10-22 Steve Baird <baird@adacore.com> + + * sem_util.ads, sem_util.adb: Declare and implement a new + predicate, Derivation_Too_Early_To_Inherit. This function + indicates whether a given derived type fails to inherit a given + streaming-related attribute from its parent type because the + declaration of the derived type precedes the corresponding + attribute_definition_clause of the parent. + * exp_tss.adb (Find_Inherited_TSS): Call + Derivation_Too_Early_To_Inherit instead of unconditionally + assuming that a parent type's streaming attribute is available + for inheritance by an immediate descendant type. + * sem_attr.adb (Stream_Attribute_Available): Call + Derivation_Too_Early_To_Inherit instead of unconditionally + assuming that a parent type's streaming attribute is available + for inheritance by an immediate descendant type. + * exp_attr.adb (Default_Streaming_Unavailable): A new predicate; + given a type, indicates whether predefined (as opposed to + user-defined) streaming operations for the type should be + implemented by raising Program_Error. + (Expand_N_Attribute_Reference): For each of the 4 + streaming-related attributes (i.e., Read, Write, Input, Output), + after determining that no user-defined implementation is + available (including a Stream_Convert pragma), call + Default_Streaming_Unavailable; if that call returns True, then + implement the streaming operation as "raise Program_Error;". + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * checks.adb (Apply_Float_Conversion_Check): Saturate the bounds + of the check to those of the base type of the expression. + +2020-10-22 Justin Squirek <squirek@adacore.com> + + * checks.adb (Apply_Accessibility_Check): Modify condition to + avoid flawed optimization and use Get_Accessibility over + Extra_Accessibility. + * exp_attr.adb: Remove inclusion of Exp_Ch2.adb. + * exp_ch2.adb, exp_ch2.ads (Param_Entity): Moved to sem_util. + * exp_ch3.ads (Init_Proc_Level_Formal): New function. + * exp_ch3.adb (Build_Init_Procedure): Add extra accessibility + formal for init procs when the associated type is a limited + record. + (Build_Initialization_Call): Add condition to handle propagation + of the new extra accessibility paramter actual needed for init + procs. + (Init_Proc_Level_Formal): Created to fetch a the extra + accessibility parameter associated with init procs if one + exists. + * exp_ch4.adb (Build_Attribute_Reference): Modify static check + to be dynamic. + * exp_ch6.adb (Add_Cond_Expression_Extra_Actual): Move logic + used to expand conditional expressions used as actuals for + anonymous access formals. + (Expand_Call_Helper): Remove extranious accessibility + calculation logic. + * exp_util.adb: Remove inclusion of Exp_Ch2.adb. + * par-ch3.adb (P_Array_Type_Definition): Properly set + Aliased_Present on access definitions + * sem_attr.adb (Resolve_Attribute): Replace instances for + Object_Access_Level with Static_Accessibility_Level. + * sem_ch13.adb (Storage_Pool): Replace instances for + Object_Access_Level with Static_Accessibility_Level. + * sem_ch6.adb (Check_Return_Construct_Accessibility): Replace + instances for Object_Access_Level with + Static_Accessibility_Level. + * sem_ch9.adb (Analyze_Requeue): Replace instances for + Object_Access_Level with Static_Accessibility_Level. + * sem_res.adb (Check_Aliased_Parameter, + Check_Allocator_Discrim_Accessibility, Valid_Conversion): + Replace instances for Object_Access_Level with + Static_Accessibility_Level. + * sem_util.adb, sem_util.ads (Accessibility_Level_Helper): + Created to centralize calculation of accessibility levels. + (Build_Component_Subtype): Replace instances for + Object_Access_Level with Static_Accessibility_Level. + (Defining_Entity): Add extra parameter to dictate whether an + error is raised or empty is return in the case of an irrelevant + N. + (Dynamic_Accessibility_Level): Rewritten to use + Accessibility_Level_Helper. + (Is_View_Conversion): Check membership against Etype to capture + nodes like explicit dereferences which have types but are not + expanded names or identifers. + (Object_Access_LeveL): Removed. + (Param_Entity): Moved from sem_util. + (Static_Accessibility_Level): Created as a replacement to + Object_Access_Level, it also uses Accessibility_Level_Helper for + its implementation. + * snames.ads-tmpl: Added new name for extra accessibility + parameter in init procs. + +2020-10-22 Piotr Trojanek <trojanek@adacore.com> + + * exp_prag.adb (Expand_Pragma_Contract_Cases, + Expand_Pragma_Loop_Variant): Reuse Append_New_To. + * sem_prag.adb (Analyze_Contract_Cases_In_Decl_Part): Fix typo. + (Analyze_Pre_Post_Condition): Refactor repeated calls to + Defining_Entity. + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_defined_characteristics.rst: Minor + fixes. + * gnat_rm.texi: Regenerate. + +2020-10-22 Piotr Trojanek <trojanek@adacore.com> + + * sem_warn.adb (Check_Unused_Withs): Move local variables from + to a nested procedure; Lunit is passed as a parameter to + Check_System_Aux and its type is refined from Node_Id to + Entity_Id; Cnode is now a constant. + +2020-10-22 Patrick Bernardi <bernardi@adacore.com> + + * libgnat/s-rident.ads (Profile_Info): Use a common profile + definition for Jorvik and GNAT Extended Ravenscar, using the + GNAT Extended Ravenscar definition. + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (64-bit platforms): Add GNATRTL_128BIT_PAIRS to + the LIBGNAT_TARGET_PAIRS list and also GNATRTL_128BIT_OBJS to + the EXTRA_GNATRTL_NONTASKING_OBJS list. + +2020-10-22 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_prag.adb (Process_Convention, + Process_Import_Or_Interface): Fix error message. + +2020-10-22 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_ch13.adb (Make_Aitem_Pragma): Turn into function. This + removes a side-effect on the Aitem variable. + (Analyze_Aspect_Specifications): Handle Suppress and Unsuppress + aspects differently from the Linker_Section aspect. + (Ceck_Aspect_At_Freeze_Point): Don't expect Suppress/Unsuppress + to be delayed anymore. + +2020-10-22 Ed Schonberg <schonberg@adacore.com> + + * sem_aggr.adb: (Resolve_Container_Aggregate): For an indexed + container, verify that expressions and component associations + are not both present. + * exp_aggr.adb: Code reorganization, additional comments. + (Expand_Container_Aggregate): Use Aggregate_Size for Iterated_ + Component_Associations for indexed aggregates. If present, the + default value of the formal in the constructor function is used + when the size of the aggregate cannot be determined statically. + +2020-10-22 Eric Botcazou <ebotcazou@adacore.com> + + * sem_attr.adb (Eval_Attribute): Fix oversight for Bit_Position. + +2020-10-22 Ed Schonberg <schonberg@adacore.com> + + * sem_util.ads, sem_util.adb (Check_Ambiguous_Aggregate): When a + subprogram call is found to be ambiguous, check whether + ambiguity is caused by an aggregate actual. and indicate that + it should carry a type qualification. + * sem_ch4.adb (Traverse_Hoonyms, Try_Primitive_Operation): Call + it. + * sem_res.adb (Report_Ambiguous_Argument): Call it. + +2020-10-22 Piotr Trojanek <trojanek@adacore.com> + + * sem_warn.adb (Check_One_Unit): Avoid repeated calls by using a + local variable Lunit; remove local constant Eitem, which was + identical to Lunit. + +2020-10-22 Alexandre Oliva <oliva@adacore.com> + + * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <x86*-vxworks*>: Select + nolibm and wraplf variants like other vxworks ports. + +2020-10-22 Martin Liska <mliska@suse.cz> + + PR c/94722 + * gcc-interface/utils.c (handle_no_stack_protect_attribute): + New. + (handle_stack_protect_attribute): Add error message for a + no_stack_protector function. + +2020-10-22 Alexandre Oliva <oliva@adacore.com> + + * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <lynxos178>: Rely on + Aux_Long_Float for all real types. + +2020-10-22 Alexandre Oliva <oliva@adacore.com> + + * Makefile.rtl (LIBGNAT_TARGET_PAIRS): Use Long Float-based + variant of Aux_Short_Float and Aux_Float on vxworks targets. + * libgnat/a-nashfl__wraplf.ads: New. + * libgnat/a-nuaufl__wraplf.ads: New. + +2020-10-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * Makefile.rtl (LIBGNAT_TARGET_PAIRS) <sparc*-sun-solaris>: + Use wraplf version of a-nallfl. + +2020-10-22 Alexandre Oliva <oliva@adacore.com> + + * Makefile.rtl (LIBGNAT_TARGET_PAIRS): Use + a-nallfl__wraplf.ads on aarch64-* and ppc*-linux-gnu targets. + * libgnat/a-nallfl__wraplf.ads: New. + +2020-10-22 Jan Hubicka <hubicka@ucw.cz> + + * gcc-interface/trans.c: Include tree-nested.h + (walk_nesting_tree): Update for new nested function info. + +2020-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add a-llltio, a-lllwti, + a-lllzti and remove a-timoau, a-wtmoau and a-ztmoau. + (GNATRTL_128BIT_PAIRS): Add a-tiinio.adb, a-timoio.adb, a-wtinio.adb, + a-wtmoio.adb, a-ztinio.adb and a-ztmoio.adb. + * impunit.adb (Non_Imp_File_Names_95): Add a-llltio, a-lllwti and + a-lllzti. + * krunch.ads: Document trick for Ada.Long_Long_Long_Integer_*_IO. + * krunch.adb (Krunch): Add trick for Ada.Long_Long_Long_Integer_*_IO. + * libgnat/a-llltio.ads: Instantiate Ada.Text_IO.Integer_IO. + * libgnat/a-lllwti.ads: Instantiate Ada.Wide_Text_IO.Integer_IO. + * libgnat/a-lllzti.ads: Instantiate Ada.Wide_Wide_Text_IO.Integer_IO. + * libgnat/a-tigeau.ads (Load_Integer): New procedure. + * libgnat/a-tigeau.adb (Load_Integer): Likewise. + * libgnat/a-tiinau.ads, libgnat/a-tiinau.adb: Change to generic + package. + * libgnat/a-tiinio.adb: Instantiate it. + * libgnat/a-tiinio__128.adb: Likewise. + * libgnat/a-timoau.ads, libgnat/a-timoau.adb: Change to generic + package. + * libgnat/a-timoio.adb: Instantiate it. + * libgnat/a-timoio__128.adb: Likewise. + * libgnat/a-wtgeau.ads (Load_Integer): New procedure. + * libgnat/a-wtgeau.adb (Load_Integer): Likewise. + * libgnat/a-wtinau.ads, libgnat/a-wtinau.adb: Change to generic + package. + * libgnat/a-wtinio.adb: Instantiate it. + * libgnat/a-wtinio__128.adb: Likewise. + * libgnat/a-wtmoau.ads, libgnat/a-wtmoau.adb: Change to generic + package. + * libgnat/a-wtmoio.adb: Instantiate it. + * libgnat/a-wtmoio__128.adb: Likewise. + * libgnat/a-ztgeau.ads (Load_Integer): New procedure. + * libgnat/a-ztgeau.adb (Load_Integer): Likewise. + * libgnat/a-ztinau.ads, libgnat/a-ztinau.adb: Change to generic + package. + * libgnat/a-ztinio.adb: Instantiate it. + * libgnat/a-ztinio__128.adb: Likewise. + * libgnat/a-ztmoau.ads, libgnat/a-ztmoau.adb: Change to generic + package. + * libgnat/a-ztmoio.adb: Instantiate it. + * libgnat/a-ztmoio__128.adb: Likewise. + +2020-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Freeze_Subprogram_Body): Do not move the freeze + node of the package body enclosing the instance when its parent + is in the same declarative part as the freeze node of the parent. + +2020-10-21 Steve Baird <baird@adacore.com> + + * exp_ch6.adb (Insert_Post_Call_Actions): When a function's + result type requires finalization and we decide to make copy of + a call to the function and subsequently refer only to the copy, + then don't forget to finalize the original function result + object. + +2020-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-widint, + s-widthi, s-widuns, s-widuns. + (GNATRTL_128BIT_OBJS): Add s-imglllb, s-imgllli, s-imglllu, s-imglllw, + s-valllli, s-vallllu, s-widllli, s-widlllu. + * exp_imgv.adb (Expand_Image_Attribute): Deal with 128-bit types. + (Expand_Value_Attribute): Likewise. + (Expand_Width_Attribute): Likewise. + * exp_put_image.adb (Build_Elementary_Put_Image_Call): Likewise. + * krunch.adb (Krunch): Deal with s-img, s-val and s-wid prefixes. + * rtsfind.ads (RTU_Id): Add System_Img_LLLI, System_Img_LLLU, + System_Val_LLLI, System_Val_LLL, System_Wid_Int, System_Wid_LLLI, + System_Wid_LLLU, System_Wid_Uns). + (RE_Id): Add RE_Image_Long_Long_Long_Integer, + RE_Image_Long_Long_Long_Unsigned, + RE_Put_Image_Long_Long_Long_Integer, + RE_Put_Image_Long_Long_Long_Unsigned, + RE_Long_Long_Long_Unsigned, RE_Value_Long_Long_Long_Integer, + RE_Value_Long_Long_Long_Unsigned, RE_Width_Integer, + RE_Width_Long_Long_Long_Integer, RE_Width_Long_Long_Long_Unsigned, + RE_Width_Unsigned, RE_Image_Long_Long_Long_Integer, + RE_Image_Long_Long_Long_Unsigned, RE_Put_Image_Long_Long_Long_Integer, + RE_Put_Image_Long_Long_Long_Unsigned, RE_Long_Long_Long_Unsigned, + RE_Value_Long_Long_Long_Integer, RE_Value_Long_Long_Long_Unsigned, + RE_Width_Integer, RE_Width_Long_Long_Long_Integer, + RE_Width_Long_Long_Long_Unsigned, RE_Width_Unsigned. + * libgnat/s-imageb.ads, libgnat/s-imageb.adb: New generic + package. + * libgnat/s-imagei.ads, libgnat/s-imagei.adb: Likewise. + * libgnat/s-imageu.ads, libgnat/s-imageu.adb: Likewise. + * libgnat/s-imagew.ads, libgnat/s-imagew.adb: Likewise. + * libgnat/s-imgbiu.ads: Instantiate System.Image_B. + * libgnat/s-imgbiu.adb: Add pragma No_Body. + * libgnat/s-imgint.ads: Instantiate System.Image_I. + * libgnat/s-imgint.adb: Add pragma No_Body. + * libgnat/s-imgllb.ads: Instantiate System.Image_B. + * libgnat/s-imgllb.adb: Add pragma No_Body0 + * libgnat/s-imglli.ads: Instantiate System.Image_I. + * libgnat/s-imglli.adb: Add pragma No_Body. + * libgnat/s-imglllb.ads: Instantiate System.Image_B. + * libgnat/s-imgllli.ads: Instantiate System.Image_I. + * libgnat/s-imglllu.ads: Instantiate System.Image_U. + * libgnat/s-imglllw.ads: Instantiate System.Image_W. + * libgnat/s-imgllu.ads: Instantiate System.Image_U. + * libgnat/s-imgllu.adb: Add pragma No_Body. + * libgnat/s-imgllw.ads: Instantiate System.Image_W. + * libgnat/s-imgllw.adb: Add pragma No_Body. + * libgnat/s-imgrea.adb: Remove clauses for System.Unsigned_Types. + * libgnat/s-imguns.ads: Instantiate System.Image_U. + * libgnat/s-imguns.adb: Add pragma No_Body. + * libgnat/s-imgwiu.ads: Instantiate System.Image_W. + * libgnat/s-imgwiu.adb: Add pragma No_Body. + * libgnat/s-putima.ads (Long_Long_Long_Unsigned): New subtype. + (Put_Image_Long_Long_Long_Unsigned): New procedure. + * libgnat/s-putima.adb (Small): Rename to Integer_Images. + (Large): Rename to LL_Integer_Images. + (LLL_Integer_Images): New instantiation. + (Put_Image_Long_Long_Long_Integer): New renaming. + (Put_Image_Long_Long_Long_Unsigned): Likewise. + * libgnat/s-valint.ads: Instantiate System.Value_I. + * libgnat/s-valint.adb: Add pragma No_Body. + * libgnat/s-vallli.ads: Instantiate System.Value_I. + * libgnat/s-vallli.adb: Add pragma No_Body. + * libgnat/s-valllli.ads: Instantiate System.Value_I. + * libgnat/s-vallllu.ads: Instantiate System.Value_U. + * libgnat/s-valllu.ads: Instantiate System.Value_U. + * libgnat/s-valllu.adb: Add pragma No_Body. + * libgnat/s-valuei.ads, libgnat/s-valuei.adb: New generic + package. + * libgnat/s-valueu.ads, libgnat/s-valueu.adb: Likewise. + * libgnat/s-valuns.ads: Instantiate System.Value_U. + * libgnat/s-valuns.adb: Add pragma No_Body. + * libgnat/s-widint.ads: Instantiate System.Width_I. + * libgnat/s-widlli.ads: Likewise. + * libgnat/s-widlli.adb: Add pragma No_Body. + * libgnat/s-widllli.ads: Instantiate System.Width_I. + * libgnat/s-widlllu.ads: Instantiate System.Width_U. + * libgnat/s-widllu.ads: Likewise. + * libgnat/s-widllu.adb: Add pragma No_Body. + * libgnat/s-widthi.ads, libgnat/s-widthi.adb: New generic + package. + * libgnat/s-widthu.ads, libgnat/s-widthu.adb: Likewise. + * libgnat/s-widuns.ads: Instantiate System.Width_U. + +2020-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * set_targ.adb (DTN): Fix oversight. + (Read_Target_Dependent_Values): Do not error out on missing + Long_Long_Long_Size entry and reuse Long_Long_Size for it. + +2020-10-21 Piotr Trojanek <trojanek@adacore.com> + + * exp_aggr.adb (Gen_Loop): Analyze copy of the expression in the + scope of the implicit loop with name of the index parameter + visible. + +2020-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (GNATRTL_128BIT_PAIRS): New variable. + (GNATRTL_128BIT_OBJS): Likewise. + (Windows): In 64-bit mode, add the former to LIBGNAT_TARGET_PAIRS and + the latter to EXTRA_GNATRTL_NONTASKING_OBJS. + (x86_64/linux): Likewise, but unconditionally. + (GNATRTL_NONTASKING_OBJS): Add s-aridou, s-exponn, s-expont, + s-exponu. + * ada_get_targ.adb (Get_Long_Long_Long_Size): New function. + * checks.adb (Apply_Arithmetic_Overflow_Strict): Use Integer_Type_For + to find an appropriate integer type; if it does not exist and the max + integer size is larger than 64, use the 128-bit arithmetic routines. + * cstand.adb (Create_Standard): Build Standard_Long_Long_Long_Integer + and its base type. Use it for Etype of Any_Integer, Any_Modular and + Any_Numeric. Use its size for Build Standard_Long_Long_Long_Unsigned + and Universal_Integer. + (Print_Standard): Print Long_Long_Long_Integer. + * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Mod>: Adjust + comment. + * exp_ch3.adb (Simple_Init_Initialize_Scalars_Type): Deal with 128-bit + types. + * exp_ch4.adb (Expand_Array_Comparison): Likewise. + (Expand_N_Op_Expon): Likewise. + (Narrow_Large_Operation): Likewise. + * exp_dbug.adb (Bounds_Match_Size): Handle 128-bit size. + * exp_fixd.adb (Build_Double_Divide_Code): Use RE_Double_Divide64. + * exp_intr.adb (Expand_Binary_Operator_Call): Handle 128-bit size. + * exp_pakd.ads (E_Array): Extend range to 127. + (Bits_Id): Fill in up to 127. + (Get_Id): Likewise. + (GetU_Id): Likewise. + (Set_Id): Likewise. + (SetU_Id): Likewise. + * exp_pakd.adb (Revert_Storage_Order): Handle 128-bit size. + * exp_util.adb (Integer_Type_For): Likewise. + (Small_Integer_Type_For): Likewise. + * fname.adb (Is_Predefined_File_Name): Do not return False for names + larger than 12 characters if they start with "s-". + * freeze.adb (Adjust_Esize_For_Alignment): Change the maximum value + to System_Max_Integer_Size. + (Check_Suspicious_Modulus): Adjust comment. + (Freeze_Entity): Likewise. + * get_targ.ads (Get_Long_Long_Long_Size): New function. + * get_targ.adb (Get_Long_Long_Long_Size): Likewise. + (Width_From_Size): Deal with 128-bit size. + * gnat1drv.adb (Adjust_Global_Switches): Deal with 128-bit types. + * impunit.adb (Get_Kind_Of_File): Bump buffer size. Accept files with + 13 characters if they start with 's'. Compare slice of Buffer. + (Not_Impl_Defined_Unit): Accept files with 13 characters if they start + with 's'. + * krunch.ads: Document length for 128-bit support units. + * krunch.adb (Krunch): Set length to 9 for 128-bit support units. + * layout.adb (Layout_Type): Use System_Max_Integer_Size as alignment + limit. + * rtsfind.ads (RTU_Id): Add System_Arith_128, + System_Compare_Array_Signed_128, System_Compare_Array_Unsigned_128, + System_Exn_LLLI, System_Exp_LLLU, System_Pack_[65..127]. + (RE_Id): Add RE_Integer_128, RE_Unsigned_128, RE_Add_With_Ovflo_Check128 + RE_Multiply_With_Ovflo_Check128, RE_Subtract_With_Ovflo_Check128, + RE_Bswap_128, RE_Compare_Array_S128, RE_Compare_Array_U128, + RE_Exn_Long_Long_Long_Integer, RE_Exp_Long_Long_Long_Integer, + RE_Exp_Long_Long_Long_Unsigned, RE_Bits_[65-127], RE_Get_[65-127], + RE_Set_[65-127], RE_IS_Is16, RE_IS_Iu16, RE_Integer_128 and + RE_Unsigned_128. Rename RE_Add_With_Ovflo_Check, RE_Double_Divide, + RE_Multiply_With_Ovflo_Check, RE_Scaled_Divide and + RE_Subtract_With_Ovflo_Check. Remove RE_IS_Iz1, RE_IS_Iz2, RE_IS_Iz4, + RE_IS_Iz8, RE_Long_Unsigned, RE_Short_Unsigned, RE_Short_Short_Unsigned + (RE_Unit_Table): Likewise. + * sem_aux.adb (Corresponding_Unsigned_Type): Deal with a size equal to + that of Standard_Long_Long_Long_Integer. + (First_Subtype): Deal with Standard_Long_Long_Long_Integer'Base. + * sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Attribute_Size>: + Check the size against powers of 2 and System_Max_Integer_Size for + objects as well. + (Set_Enum_Esize): Deal with 128-bit bounds. + * sem_ch3.adb (Set_Modular_Size): Handle 128-bit size. + (Modular_Type_Declaration): Deal with 128-bit types. + (Signed_Integer_Type_Declaration): Support derivation from + Standard_Long_Long_Long_Integer. + * sem_ch4.adb (Analyze_Mod): Handle 128-bit modulus. + * sem_intr.adb: Add with and use clauses for Ttypes. + (Check_Shift): Handle 128-bit size and modulus. + * sem_prag.adb (Analyze_Pragma) <Pragma_Initialize_Scalars>: Deal + with Signed_128 and Unsigned_128. + (Analyze_Integer_Value): Handle 128-bit size. + * sem_util.ads (Addressable): Adjust description. + * sem_util.adb (Addressable): Return true for 128 if the system + supports 128 bits. + (Set_Invalid_Binder_Values): Deal with Signed_128 and Unsigned_128. + * set_targ.ads (Long_Long_Long_Size): New variable. + * set_targ.adb (S_Long_Long_Long_Size): New constant. + (DTN): Add entry for S_Long_Long_Long_Size. + (DTV): Add entry for Long_Long_Long_Size. + (Set_Targ): Set Long_Long_Long_Size. + * snames.ads-tmpl (Name_Max_Integer_Size): New attribute name. + (Name_Signed_128): New scalar name. + (Name_Unsigned_128): Likewise. + (Scalar_Id): Adjust. + (Integer_Scalar_Id): Likewise. + (Attribute_Id): Add Attribute_Max_Integer_Size. + * stand.ads (Standard_Entity_Type): Add S_Long_Long_Long_Integer. + (Standard_Long_Long_Long_Integer): New renaming. + (Universal_Integer): Adjust description. + (Standard_Long_Long_Long_Unsigned): New variable. + * switch-c.adb (Scan_Front_End_Switches): Deal with -gnate128. + * ttypes.ads (Standard_Long_Long_Long_Integer_Size): New variable. + (Standard_Long_Long_Long_Integer_Width): Likewise. + (System_Max_Integer_Size): Turn into variable. + (System_Max_Binary_Modulus_Power): Likewise. + * uintp.ads (Uint_127): New constant. + * uintp.adb (UI_Power_2): Extednd to 128. + (UI_Power_10): Likewise. + (UI_Expon): Deal with exponent up to 128 specially. + * usage.adb (Write_Switch_Char): Print -gnate128 switch. + * libgnat/a-tifiio.adb (Put_Scaled): Call Scaled_Divide64. + * libgnat/interfac__2020.ads (Integer_128): New integer type. + (Unsigned_128): New modular type. + (Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, + Rotate_Right): New intrinsic functions operating on it. + * libgnat/s-aridou.ads, libgnat/s-aridou.adb: New generic + package. + * libgnat/s-arit64.ads, libgnat/s-arit64.adb: Instantiate + System.Arithmetic_Double. + * libgnat/s-arit128.ads, libgnat/s-arit128.adb: Likewise. + * libgnat/s-bytswa.ads: Add with clause for Interfaces, use subtypes + of unsigned types defined in Interfaces and add Bswap_128. + * libgnat/s-casi128.ads, libgnat/s-casi128.adb: New package. + * libgnat/s-caun128.ads, libgnat/s-caun128.adb: Likewise. + * libgnat/s-exnint.ads: Instantiate System.Exponn. + * libgnat/s-exnint.adb: Add pragma No_Body. + * libgnat/s-exnlli.ads: Instantiate System.Exponn. + * libgnat/s-exnlli.adb: Add pragma No_Body. + * libgnat/s-exnllli.ads: Instantiate System.Exponn. + * libgnat/s-expint.ads: Likewise. + * libgnat/s-expint.adb: Add pragma No_Body. + * libgnat/s-explli.ads: Instantiate System.Exponn. + * libgnat/s-explli.adb: Add pragma No_Body. + * libgnat/s-expllli.ads: Instantiate System.Exponn. + * libgnat/s-explllu.ads: Instantiate System.Exponu. + * libgnat/s-expllu.ads: Likewise. + * libgnat/s-expllu.adb: Add pragma No_Body. + * libgnat/s-exponn.ads, libgnat/s-exponn.adb: New generic + function. + * libgnat/s-expont.ads, libgnat/s-expont.adb: Likewise. + * libgnat/s-exponu.ads, libgnat/s-exponu.adb: Likewise. + * libgnat/s-expuns.ads, libgnat/s-expuns.adb: Likewise. + * libgnat/s-pack65.ads, libgnat/s-pack65.adb: New package. + * libgnat/s-pack66.ads, libgnat/s-pack66.adb: New package. + * libgnat/s-pack67.ads, libgnat/s-pack67.adb: New package. + * libgnat/s-pack68.ads, libgnat/s-pack68.adb: New package. + * libgnat/s-pack69.ads, libgnat/s-pack69.adb: New package. + * libgnat/s-pack70.ads, libgnat/s-pack70.adb: New package. + * libgnat/s-pack71.ads, libgnat/s-pack71.adb: New package. + * libgnat/s-pack72.ads, libgnat/s-pack72.adb: New package. + * libgnat/s-pack73.ads, libgnat/s-pack73.adb: New package. + * libgnat/s-pack74.ads, libgnat/s-pack74.adb: New package. + * libgnat/s-pack75.ads, libgnat/s-pack75.adb: New package. + * libgnat/s-pack76.ads, libgnat/s-pack76.adb: New package. + * libgnat/s-pack77.ads, libgnat/s-pack77.adb: New package. + * libgnat/s-pack78.ads, libgnat/s-pack78.adb: New package. + * libgnat/s-pack79.ads, libgnat/s-pack79.adb: New package. + * libgnat/s-pack80.ads, libgnat/s-pack80.adb: New package. + * libgnat/s-pack81.ads, libgnat/s-pack81.adb: New package. + * libgnat/s-pack82.ads, libgnat/s-pack82.adb: New package. + * libgnat/s-pack83.ads, libgnat/s-pack83.adb: New package. + * libgnat/s-pack84.ads, libgnat/s-pack84.adb: New package. + * libgnat/s-pack85.ads, libgnat/s-pack85.adb: New package. + * libgnat/s-pack86.ads, libgnat/s-pack86.adb: New package. + * libgnat/s-pack87.ads, libgnat/s-pack87.adb: New package. + * libgnat/s-pack88.ads, libgnat/s-pack88.adb: New package. + * libgnat/s-pack89.ads, libgnat/s-pack89.adb: New package. + * libgnat/s-pack90.ads, libgnat/s-pack90.adb: New package. + * libgnat/s-pack91.ads, libgnat/s-pack91.adb: New package. + * libgnat/s-pack92.ads, libgnat/s-pack92.adb: New package. + * libgnat/s-pack93.ads, libgnat/s-pack93.adb: New package. + * libgnat/s-pack94.ads, libgnat/s-pack94.adb: New package. + * libgnat/s-pack95.ads, libgnat/s-pack95.adb: New package. + * libgnat/s-pack96.ads, libgnat/s-pack96.adb: New package. + * libgnat/s-pack97.ads, libgnat/s-pack97.adb: New package. + * libgnat/s-pack98.ads, libgnat/s-pack98.adb: New package. + * libgnat/s-pack99.ads, libgnat/s-pack99.adb: New package. + * libgnat/s-pack100.ads, libgnat/s-pack100.adb: New package. + * libgnat/s-pack101.ads, libgnat/s-pack101.adb: New package. + * libgnat/s-pack102.ads, libgnat/s-pack102.adb: New package. + * libgnat/s-pack103.ads, libgnat/s-pack103.adb: New package. + * libgnat/s-pack104.ads, libgnat/s-pack104.adb: New package. + * libgnat/s-pack105.ads, libgnat/s-pack105.adb: New package. + * libgnat/s-pack106.ads, libgnat/s-pack106.adb: New package. + * libgnat/s-pack107.ads, libgnat/s-pack107.adb: New package. + * libgnat/s-pack108.ads, libgnat/s-pack108.adb: New package. + * libgnat/s-pack109.ads, libgnat/s-pack109.adb: New package. + * libgnat/s-pack110.ads, libgnat/s-pack110.adb: New package. + * libgnat/s-pack111.ads, libgnat/s-pack111.adb: New package. + * libgnat/s-pack112.ads, libgnat/s-pack112.adb: New package. + * libgnat/s-pack113.ads, libgnat/s-pack113.adb: New package. + * libgnat/s-pack114.ads, libgnat/s-pack114.adb: New package. + * libgnat/s-pack115.ads, libgnat/s-pack115.adb: New package. + * libgnat/s-pack116.ads, libgnat/s-pack116.adb: New package. + * libgnat/s-pack117.ads, libgnat/s-pack117.adb: New package. + * libgnat/s-pack118.ads, libgnat/s-pack118.adb: New package. + * libgnat/s-pack119.ads, libgnat/s-pack119.adb: New package. + * libgnat/s-pack120.ads, libgnat/s-pack120.adb: New package. + * libgnat/s-pack121.ads, libgnat/s-pack121.adb: New package. + * libgnat/s-pack122.ads, libgnat/s-pack122.adb: New package. + * libgnat/s-pack123.ads, libgnat/s-pack123.adb: New package. + * libgnat/s-pack124.ads, libgnat/s-pack124.adb: New package. + * libgnat/s-pack125.ads, libgnat/s-pack125.adb: New package. + * libgnat/s-pack126.ads, libgnat/s-pack126.adb: New package. + * libgnat/s-pack127.ads, libgnat/s-pack127.adb: New package. + * libgnat/s-rannum.ads (Random): New function returning 128-bit. + * libgnat/s-rannum.adb (Random): Implement it. + * libgnat/s-scaval.ads: Add with clause for Interfaces, use subtypes + of unsigned types defined in Interfaces. + * libgnat/s-scaval.adb: Add use clause for Interfaces. + * libgnat/s-scaval__128.ads, libgnat/s-scaval__128.adb: New + package. + * libgnat/s-unstyp.ads (Long_Long_Long_Unsigned): New modular type. + (Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left, + Rotate_Right): New intrinsic functions operating on it. + +2020-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_defined_characteristics.rst: Add + Long_Long_Long_Integer to the list of predefined integer types. + * gnat_rm.texi: Regenerate. + +2020-10-21 Yannick Moy <moy@adacore.com> + + * ada_get_targ.adb (Width_From_Size): Add case for 128 bits. + Reorder declarations in the same order as get_targ.adb to + facilitate diffs. + +2020-10-21 Piotr Trojanek <trojanek@adacore.com> + + * exp_aggr.adb (Expand_N_Aggregate): Refactor repeated calls to + Etype (N). + (Build_Array_Aggr_Code): Fix whitespace. + +2020-10-21 Dmitriy Anisimkov <anisimko@adacore.com> + + * adaint.c (__gnat_file_time): Use regular arithmetic instead of + __builtin_*_overflow routines if GCC version 4 or less and + compiler is g++. + +2020-10-21 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Array_Aggregate): Use Choice_List, which + internally calls either Choice or Discrete_Choices, depending on + the context. + +2020-10-21 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Iterated_Component_Association): Use + existing defining identifier for index parameter. + +2020-10-21 Javier Miranda <miranda@adacore.com> + + * exp_ch9.adb (Build_Task_Activation_Call): Do not generate a + call to activate tasks if we are within the scope of a protected + type and pragma Detect_Blocking is active. + +2020-10-21 Liaiss Merzougue <merzougue@adacore.com> + + * libgnat/s-carsi8.adb (Compare_Array_S8): Add pragma Assert to + avoid warning concerning Left_Len and RighLen value regarding + Bytes_Compared_As_Words. + * libgnat/s-carun8.adb (Compare_Array_U8): Likewise. + * libgnat/s-geveop.adb (Binary_Operation, Unary_Operation): Add + pragma Assert concerning divide by 0 warning. + * libgnat/s-imgcha.adb (Image_Character): Code update to prevent + constant operation warning. + (Image_Character): Add pragma Assert concerning the unchecked + String size. + * libgnat/s-imgdec.adb + (Round): Upate loop code to prevent warning concerning + Digs'First access. + (Round): Add pragma assert. + (Set): Add pragma Assert for the unchecked string size. + (Set_Digits): Add pragma Assert for the input range. + (Set_Decimal_Digits): Add pragma Assert. + (Set_Blank_And_Sign): Add pragma Assert for the input range. + * libgnat/s-arit64.adb (DoubleDivide): Add pragma Assert + concerning Du /= 0. + (Multiply_With_Ovflo_Check): Add pragma Annotate to avoid + warning concerning unsigned -> signed conversion. + * libgnat/s-imguns.adb (Set_Image_Unsigned): Add pragma Assert + to prevent overflow check warning. Add pragma Assert for + controlling S'First = 1. + * libgnat/s-imgrea.adb (Image_Floating_Point, Set, Set_Digs, + Set_Special_Fill, Convert_Integer): Add pragma Annotate to + prevent overflow check warning. + (Set_Image_Real): Add pragma Annotate to avoid dead code warning + on float check. Add pragma Assert to prevent overflow check + warning. + * libgnat/s-imgwiu.adb (Set_Digits, Set_Image_Width_Unsigned): + Add pragma assert to prevent overflow check warning. + * libgnat/s-imgllu.adb (Set_Image_Long_Long_Unsigned): Add + pragma assert to prevent overflow check warning. + * libgnat/s-imgint.adb (Set_Digits): Add Assert for input + constraint and to prevent overflow check warning, create + Non_Positive subtype, and change the T parameter as Non_Positive + instead Integer. + (Set_Image_Integer): Add pragma assert to prevent overflow check + warning. + * libgnat/s-imglli.adb (Set_Digits): Add Assert for input + constraint and to prevent overflow check warning, create + Non_Positive subtype, and change the T parameter as Non_Positive + instead Integer. + (Set_Image_Long_Long_Integer): Add pragma assert to prevent + overflow check warning. + * libgnat/s-fatgen.adb (Decompose, Pred, Succ): Add pragma + Annotate to prevent dead code due to invalid float check. + * libgnat/s-imenne.adb (Image_Enumeration_8, + Image_Enumeration_16, Image_Enumeration_32): Add pragma Assert + to prevent overflow check warning. Add Names_Index subtype for + restricting Index_table content. + +2020-10-21 Gary Dismukes <dismukes@adacore.com> + + * exp_ch6.adb (Insert_Post_Call_Actions): Test for + N_Explicit_Dereference as part of the existing test for function + calls. + +2020-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (Check_Strict_Alignment): Do not set the flag for + a bit-packed array type, even if it is a by-reference type. + +2020-10-21 Dmitriy Anisimkov <anisimko@adacore.com> + + * adaint.c (__gnat_file_time): New routine. + (__gnat_copy_attribs): Copy timestamps in nanoseconds. + * libgnat/a-direct.adb (C_Modification_Time): Bind to + __gnat_file_time. + (Modification_Time): Call to C_Modification_Time. + +2020-10-21 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Iterated_Component_Association): + Expression's copy and now has the same parent as the original + expression. + (Resolve_Array_Aggregate): Add ??? comment about a still + existing minor issue that led to discovery of the above crash. + +2020-10-21 Javier Miranda <miranda@adacore.com> + + * sem_ch12.adb (Install_Parents_Of_Generic_Context): Simplify + functionality; collect and install parents of generic child + package. + (Remove_Parents_Of_Generic_Context): Code cleanup. + (Instantiate_Package_Body): Hide parents of generic context from + visibility before installing the parent instance; restore their + visibility when the instance is analyzed + +2020-10-21 Doug Rupp <rupp@adacore.com> + + * libgnarl/s-osinte__lynxos178e.ads: Remove -mthreads switch. + +2020-10-21 Patrick Bernardi <bernardi@adacore.com> + + * env.c (__gnat_setenv): call setenv for VxWorks 7 kernel mode. + (__gnat_environ): envGet takes an int instead of a NULL pointer. + (__gnat_unsetenv): call unsetenv for VxWorks 7 kernel mode. + (__gnat_clearenv): use __gnat_unsetenv to clear environment + variables. + +2020-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Freeze_Subprogram_Body): Call + Package_Freeze_Node to retrieve the freeze node for the + enclosing body of the generic. + +2020-10-21 Justin Squirek <squirek@adacore.com> + + * exp_ch6.adb (Expand_Call_Helper): Modify calls to + Add_Extra_Actual to use Extra_Accessibility instead of + Get_Accessibility for the EF parameter. + +2020-10-21 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch6.adb (Expand_Actuals): Whitespace cleanup. + * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Make minimum + accessibility a constant object. + +2020-10-21 Patrick Bernardi <bernardi@adacore.com> + + * env.c (__gnat_environ): For VxWorks kernel simply return the + result of the envGet call. Do this for VxWorks 6 and 7 as they + both support the same API. + +2020-10-21 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_ch7.adb (Build_Finalizer): Disable warnings on referenced + entity. + +2020-10-21 Piotr Trojanek <trojanek@adacore.com> + + * einfo.ads, sem_ch3.adb, sem_util.adb: Fix comments. + +2020-10-21 Javier Miranda <miranda@adacore.com> + + * sem_ch3.adb (Build_Derived_Type): Propagate convention of + class-wide parent. + +2020-10-21 Claire Dross <dross@adacore.com> + + * libgnat/a-cofove.adb (Copy): Add explanation in case of + Capacity_Error. + (Insert_Space): Raise Capacity_Error if the new length is + greater than the capacity. + (Reserve_Capacity): Raise Capacity_Error instead of + Constraint_Error. + +2020-10-20 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Constrain_Decimal, Constrain_Enumeration, + Constrain_Float, Constrain_Integer, Constrain_Ordinary_Fixed): + Refine parameter type from Node_Id to Entity_Id. + +2020-10-20 Piotr Trojanek <trojanek@adacore.com> + + * sprint.adb (po): Set Dump_Freeze_Null to False; align colons. + (ps): Likewise. + +2020-10-20 Ed Schonberg <schonberg@adacore.com> + + * sinfo.ads, sinfo.adb: The flag Box_Present can appear in + Iterated_Element_Association nodes. + * sem_aggr.adb (Resolve_Aggregate): Call + Resolve_Container_Aggregate when type of context has + corresponding aspect. + * sem_type.adb (Covers): In Ada_2020 an aggregate is compatible + with a type that carries the corresponding aspect. + * exp_ch3.adb (Make_Controlling_Function_Wrappers): Do not + create declarations and bodies for inherited primitive functions + of null extensions that dispatch on result, when current scope + includes an immediately visible non-overloadable homonym of the + function. + * libgnat/a-cborse.adb, libgnat/a-cborse.ads, + libgnat/a-cbhase.ads, libgnat/a-cbhase.adb, + libgnat/a-cborma.adb, libgnat/a-cborma.ads, + libgnat/a-cbhama.adb, libgnat/a-cbhama.ads, + libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads, + libgnat/a-convec.ads, libgnat/a-ciorse.ads, + libgnat/a-cihase.ads, libgnat/a-cihase.adb, + libgnat/a-ciorma.ads, libgnat/a-cihama.ads, + libgnat/a-cihama.adb, libgnat/a-cidlli.ads, + libgnat/a-cidlli.adb, libgnat/a-coinve.adb, + libgnat/a-cobove.adb, libgnat/a-cobove.ads, + libgnat/a-convec.adb, libgnat/a-coinve.ads, + libgnat/a-coorse.ads, libgnat/a-cohase.adb, + libgnat/a-cohase.ads, libgnat/a-coorma.ads, + libgnat/a-cohama.adb, libgnat/a-cohama.ads, + libgnat/a-cdlili.ads: Add primitive function Empty for use in + aspect Aggregate, and add corresponding body or expression + function. + +2020-10-20 Arnaud Charlet <charlet@adacore.com> + + * aspects.adb (Has_Aspect_Specifications_Flag): Add + N_Parameter_Specification. + * par-ch13.adb (Aspect_Specifications_Present): Also handle case + of an unknown aspect on the last formal parameter (terminated by + a Tok_Right_Paren). Minor reformatting. + * par-ch6.adb (P_Formal_Part): Scan aspects on formal + parameters. + * par.adb: Fix typos. + * sem_ch6.adb (Process_Formals): Add processing of aspects and + in particular Unreferenced aspect for now. + * sinfo.ads: Allow ASPECT_SPECIFICATIONS on a + PARAMETER_SPECIFICATION. + * doc/gnat_rm/implementation_defined_aspects.rst + (Aspect Unreferenced): Update documentation. + * gnat_rm.texi: Regenerate. + +2020-10-20 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.ads, sem_util.adb (Get_Accessibility): Refine result + type from Node_Id to Entity_Id. + +2020-10-20 Piotr Trojanek <trojanek@adacore.com> + + * einfo.adb, exp_attr.adb, sem_ch13.adb, sem_util.adb: Use + Is_Formal where possible. + +2020-10-20 Steve Baird <baird@adacore.com> + + * sem_util.ads: Declare a new package, Old_Attr_Util, which in + turn declares two more packages, Conditional_Evaluation and + Indirect_Temps. Conditional_Evaluation provides a predicate for + deciding whether a given 'Old attribute reference is eligible + for conditional evaluation and, in the case where it is + eligible, a function that constructs the Boolean-valued + condition that is to be evaluated at run time in deciding + whether to evaluate the attribute prefix. Indirect_Temps + provides support for declaring a temporary which is only + initialized conditionally; more specifically, an access type and + a variable of that type are declared (unconditionally) and then + the variable is (conditionally) initialized with an allocator. + The existence of the access type and the pointer variable is + hidden from clients, except that a predicate, + Is_Access_Type_For_Indirect_Temp, is provided for identifying + such access types. This is needed because we want such an access + type to be treated like a "normal" access type (specifically + with respect to finalization of allocated objects). Other parts + of the compiler treat access types differently if + Comes_From_Source is False, or if the secondary stack storage + pool is used; this predicate is used to disable this special + treatment. + * sem_attr.adb (Uneval_Old_Msg): Improve message text to reflect + Ada202x changes. + (Analyze_Attribute): A previously-illegal 'Old attribute + reference is accepted in Ada2020 if it is eligible for + conditional evaluation. + * sem_res.adb (Valid_Conversion): Do not treat a rewritten 'Old + attribute like other rewrite substitutions. This makes a + difference, for example, in the case where we are generating the + expansion of a membership test of the form "Saooaaat'Old in + Named_Access_Type"; in this case Valid_Conversion needs to + return True (otherwise the expansion will be False - see the + call site in exp_ch4.adb). + * exp_attr.adb (Expand_N_Attribute_Reference): When expanding a + 'Old attribute reference, test for the case where the reference + is eligible for conditional evaluation. In that case, use the + new "indirect temporary" mechanism provided by Sem_Util. + * exp_prag.adb + (Expand_Attributes_In_Consequence.Expand_Attributes): If + Sem_Util.Indirect_Temp_Needed indicates that there could be + correctness problems associated with the old expansion scheme + for dealing with 'Old attributes in contract cases consequences, + then we use the new "indirect temporary" mechanism provided by + Sem_Util instead. We do not want to do this unconditionally. + * sem_util.adb: Provide a body for the new Old_Attr_Util + package. Further work is needed in several areas for + correctness: + - The function Is_Repeatedly_Evaluated does not deal with + container aggregates yet. + - The function Is_Known_On_Entry does not deal with interactions + with the Global aspect. + Each area where more work is needed is indicated with a "???" + comment in the code; a more detailed description can be found + there. Some optimization opportunties are similarly indicated + with a "???" comment. + * exp_ch3.adb (Freeze_Type): In deciding whether to generate + expansion for the list controller of an access type, take the + predicate Is_Access_Type_For_Indirect_Temp into account. If the + predicate yields True, then generate the expansion. + * exp_util.adb (Build_Allocate_Deallocate_Proc): We don't + normally finalize allocated objects that are allocated on the + secondary stack. Add an exception to this rule if the predicate + Is_Access_Type_For_Indirect_Temp yields True. As a result of + this exception, we have to deal with the fact that gigi expects + a different parameter profile if we are using the secondary + stack pool; the Pool and Alignment parameters must be omitted in + this case. + +2020-10-20 Javier Miranda <miranda@adacore.com> + + * sem_ch12.adb (Install_Parents_Of_Generic_Context, + Remove_Parents_Of_Generic_Context): New subprograms. + (Instantiate_Package_Body): Adding assertions to ensure that + installed parents are properly removed. + +2020-10-20 Claire Dross <dross@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Emit a warning on 'Update + when Warn_On_Obsolescent_Feature is set to True. + +2020-10-20 Richard Kenner <kenner@adacore.com> + + * gnat_cuda.adb (Build_Register_Function_Call): Make procedure + call instead of function, rename to + Build_Register_Procedure_Call. + (Build_CUDA_Init_Proc): Make procedure call instead of function. + +2020-10-20 Justin Squirek <squirek@adacore.com> + + * exp_ch6.adb (Expand_Branch): Properly anticipate expansion of + conditional expressions producing object declarations in + addition to assignment statements, and rename formal. + +2020-10-20 Yannick Moy <moy@adacore.com> + + * errout.adb (Write_Source_Code_Line): Adopt display closer to + GCC format. + (Output_Messages): Deal specially with info messages. + * erroutc.adb (Prescan_Message): Fix bug leading to check + messages being considered as error messages in pretty output + mode. + +2020-10-20 Justin Squirek <squirek@adacore.com> + + * exp_ch6.adb (Expand_Call_Helper): Properly handle the case + where the condition of a conditional expression has been + optimized out when calculating the value of an extra + accessibility parameter. + +2020-10-20 Bob Duff <duff@adacore.com> + + * doc/gnat_ugn/gnat_utility_programs.rst: Change "_" to "-". + +2020-10-20 Arnaud Charlet <charlet@adacore.com> + + * sem_aggr.adb (Resolve_Aggregate): Warn on not fully + initialized box aggregate. + * sem_aggr.ads: Fix typo. + * sem_res.adb (Resolve_Actuals): Fix typo in error message + format marking it incorrectly as a continuation message. + * sem_elab.adb (Check_Internal_Call_Continue): Similarly, add + missing primary message in case of a call to an actual generic + subprogram. + * sem_warn.adb (Check_References): Do not warn on read but never + assigned variables if the type is partially initialized. + * libgnat/a-except.ads, libgnat/a-ststun.ads, + libgnat/g-sechas.ads, libgnat/a-cbdlli.ads, + libgnat/a-cfdlli.ads, libgnat/a-cobove.ads, + libgnat/a-cohata.ads, libgnat/a-crbltr.ads, + libgnat/a-cbmutr.ads, libgnat/a-crdlli.ads, + libgnat/a-cbsyqu.ads: Address new warning. + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: + Update doc on -gnatwv. + * gnat_ugn.texi: Regenerate. + +2020-10-20 Gary Dismukes <dismukes@adacore.com> + + * sem_ch6.adb (Analyze_Expression_Function): Mark static + expression functions as inlined. + +2020-10-20 Arnaud Charlet <charlet@adacore.com> + + * contracts.adb (Is_Prologue_Renaming): This function was + missing support for E_Constant which can also be generated in + protected objects. + +2020-10-20 Arnaud Charlet <charlet@adacore.com> + + * bindgen.adb (Gen_Bind_Env_String): Generate Ada 2012 compatible + strings. Code cleanup. + +2020-10-20 Yannick Moy <moy@adacore.com> + + * sem_util.adb, sem_util.ads: Comment fix. + +2020-10-20 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Check_Constrained_Object): Suppress discriminant + checks when the type has default discriminants and comes from + expansion of a "for of" loop. + +2020-10-20 Bob Duff <duff@adacore.com> + + * atree.ads: Make Default_Node a constant. Remove the + modification of Comes_From_Source, and use a separate flag for + that. Change Sloc to 0; it always overwritten, and never left + as the No_Location value. + (Print_Statistics): Move to spec so we can call it from + gnat1drv. + (Num_Nodes): Rename to clarify that this is approximate. + Correct comment: nodes and entities are never deleted, the count + is never decremented, and this is not used by Xref. + (Initialize): Correct comment: Error_List is not created here. + Other minor naming and comment changes. + * atree.adb (Extend_Node, New_Copy, New_Entity, New_Node): + Streamline these. Simplify and improve efficiency. Move code + from Allocate_Initialize_Node to these, where it can be executed + unconditionally. Take advantage of automatic zeroing of the + Nodes table. + (Allocate_Initialize_Node): Remove this. It was an efficiency + bottleneck, and somewhat complicated, because it was called from + 4 places, and had all sorts of conditionals to check where it + was called from. Better to move most of that code to the call + sites, where it can be executed (or not) unconditionally. + (Allocate_New_Node): New procedure to partly replace + Allocate_Initialize_Node (called from just 2 of those 4 places). + (Comes_From_Source_Default): New flag written/read by + Set_Comes_From_Source_Default/Get_Comes_From_Source_Default. + This allows us to make Default_Node into a constant with + all-zeros value. + (Set_Paren_Count_Of_Copy): New procedure to avoid duplicated + code. + (Report): New procedure to encapsulate the call to the reporting + procedure. + (Atree_Private_Part): We now need a body for this package, to + contain package body Nodes. + (Approx_Num_Nodes_And_Entities): Was Num_Nodes. For efficiency, + compute the answer from Nodes.Last. That way we don't need to + increment a counter on every node creation. Other minor naming + and comment changes. + * gnat1drv.adb: Call Atree.Print_Statistics if -gnatd.A switch + was given. Add comment documenting the new order dependency (we + must process the command line before calling Atree.Initialize). + * debug.adb: Document -gnatd.A. + * einfo.adb, sinfo.adb: Remove useless Style_Checks pragmas. + * nlists.ads (Allocate_List_Tables): Inline makes node creation + a little faster. + * nlists.adb (Initialize): Remove local constant E, which didn't + seem to add clarity. + * treepr.adb (Print_Init): Use renamed + Approx_Num_Nodes_And_Entities function. + * types.ads: Change the Low and High bounds as described above. + * types.h: Change Low and High bounds to match types.ads. + * sem_ch8.adb, namet.adb, namet.ads: Move the computation of + Last_Name_Id from sem_ch8 to namet, and correct it to not assume + Name_Ids are positive. + * ali.adb, ali-util.adb, bindo-writers.adb, exp_dist.adb, + fmap.adb, fname-uf.adb, osint.adb: Fix various hash functions to + avoid assuming the various ranges are positive. Note that "mod" + returns a nonnegative result when the second operand is + positive. "rem" can return negative values in that case (in + particular, if the first operand is negative, which it now is). + * switch-c.adb: Allow switch -gnaten to control the value of + Nodes_Size_In_Meg. + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: + Remove traling whitespaces. + * opt.ads (Nodes_Size_In_Meg): New Variable. + +2020-10-20 Eric Botcazou <ebotcazou@adacore.com> + + * exp_util.adb (Remove_Side_Effects): Always generate a renaming + that is handled by the front-end in the case of an indexed or a + selected component whose prefix has a nonstandard representation. + +2020-10-20 Pat Rogers <rogers@adacore.com> + + * doc/gnat_rm/the_gnat_library.rst: Add Ada.Task_Initialization. + * gnat_rm.texi: Regenerate. + +2020-10-20 Yannick Moy <moy@adacore.com> + + * errout.adb: (Error_Msg-Internal): Pass the location for a line + insertion if any in the message. + (Output_Messages: Add display of source code lines if -gnatdF is + set. + (Write_Source_Code_Line): Code clean up. + * erroutc.adb (Prescan_Message): Apply prescan for continuation + lines when -gnatdF is set, and record presence of line + insertion. + * erroutc.ads (Has_Insertion_Line): New global for prescan. + (Error_Msg_Object): Add field to record line insertion if + present. + * errutil.adb (Error_Msg): Pass no location for Insertion_Sloc. + +2020-10-20 Arnaud Charlet <charlet@adacore.com> + + * exp_ch5.adb (Expand_N_Case_Statement): Do not generate + validity check when possible. + +2020-10-20 Ed Schonberg <schonberg@adacore.com> + + * exp_aggr.adb (Expand_Iterated_Component): Reorganize code to + ensure that Loop_Id is properly initialized on all paths, and + remove code duplication. + +2020-10-20 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Analyze_Subtype_Declaration): Propagate predicate + function to full view of the created type as well, if it was + created. + +2020-10-20 Arnaud Charlet <charlet@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Merge handling of + Simple_Storage_Pool and Storage_Pool. + +2020-10-20 Piotr Trojanek <trojanek@adacore.com> + + * aspects.ads: Introduce Subprogram_Variant aspect with the + following properties: GNAT-specific, with mandatory expression, + not a representation aspect, never delayed. + * contracts.adb (Expand_Subprogram_Contract): Mention new aspect + in the comment. + (Add_Contract_Item): Support addition of pragma + Subprogram_Variant to N_Contract node. + (Analyze_Entry_Or_Subprogram_Contract): Mention new aspect in + the comment; add pragma Subprogram_Variant to N_Contract node. + (Build_Postconditions_Procedure): Adapt call to + Insert_Before_First_Source_Declaration, which is now reused in + expansion of new aspect. + (Process_Contract_Cases_For): Also process Subprogram_Variant, + which is stored in N_Contract node together with Contract_Cases. + * contracts.ads (Analyze_Entry_Or_Subprogram_Contract): Mention + new aspect in the comment. + (Analyze_Entry_Or_Subprogram_Body_Contract): Likewise. + * einfo.adb (Get_Pragma): Support retrieval of new pragma. + * einfo.ads (Get_Pragma): Likewise. + * exp_ch6.adb (Check_Subprogram_Variant): New routine for + emitting call to check Subprogram_Variant expressions at run + time. + (Expand_Call_Helper): Check Subprogram_Variant expressions at + recursive calls. + * exp_prag.adb (Make_Op): Moved from expansion of pragma + Loop_Variant to Exp_Util, so it is now reused for expansion of + pragma Subprogram_Variant. + (Process_Variant): Adapt call to Make_Op after moving it to + Exp_Util. + (Expand_Pragma_Subprogram_Variant): New routine. + * exp_prag.ads (Expand_Pragma_Subprogram_Variant): Likewise. + * exp_util.adb (Make_Variant_Comparison): Moved from Exp_Prag + (see above). + * exp_util.ads (Make_Variant_Comparison): Likewise. + * inline.adb (Remove_Aspects_And_Pragmas): Handle aspect/pragma + Subprogram_Variant just like similar contracts. + * par-prag.adb (Prag): Likewise. + * sem.adb (Insert_Before_First_Source_Declaration): Moved from + Contracts (see above). + * sem.ads (Insert_Before_First_Source_Declaration): Likewise. + * sem_ch12.adb: Mention new aspect in the comment about + "Implementation of Generic Contracts", just like similar aspects + are mentioned there. + * sem_ch13.adb (Insert_Pragma): Mention new aspect in the + comment, because this routine is now used for Subprogram_Variant + just like for other similar aspects. + (Analyze_Aspect_Specifications): Mention new aspect in comments; + it is handled just like aspect Contract_Cases. + (Check_Aspect_At_Freeze_Point): Do not expect aspect + Subprogram_Variant just like we don't expect aspect + Contract_Cases. + * sem_prag.adb (Ensure_Aggregate_Form): Now also used for pragma + Subprogram_Variant, so update comment. + (Analyze_Pragma): Add initial checks for pragma + Subprogram_Variant. + (Analyze_Subprogram_Variant_In_Decl_Part): New routine with + secondary checks on the new pragma. + (Sig_Flags): Handle references within pragma Subprogram_Variant + expression just like references in similar pragma + Contract_Cases. + (Is_Valid_Assertion_Kind): Handle Subprogram_Variant just like + other similar contracts. + * sem_prag.ads (Analyze_Subprogram_Variant_In_Decl_Part): New + routine. + * sem_res.adb (Same_Or_Aliased_Subprograms): Moved to Sem_Util, + so it can be reused for detection of recursive calls where + Subprogram_Variant needs to be verified. + * sem_util.adb (Is_Subprogram_Contract_Annotation): Handle new + Subprogram_Variant annotation just like other similar + annotations. + (Same_Or_Aliased_Subprograms): Moved from Sem_Res (see above). + * sem_util.ads (Is_Subprogram_Contract_Annotation): Mention new + aspect in the comment. + (Same_Or_Aliased_Subprograms): Moved from Sem_Res (see above). + * sinfo.ads (N_Contract): Document handling of + Subprogram_Variant. + * snames.ads-tmpl: Add name for the internally generated + procedure with checks for Subprogram_Variant expression, name + for the new aspect and new pragma corresponding to aspect + Subprogram_Variant. + +2020-10-20 Piotr Trojanek <trojanek@adacore.com> + + * exp_util.ads: Reorder declaration. + +2020-10-19 Ed Schonberg <schonberg@adacore.com> + + * par-ch4.adb: (P_Aggregate_Or_Paren_Expr): Recognize + Iterated_Element_Component. + (P_Iterated_Component_Association): Rebuild node as an Iterated_ + Element_Association when Key_Expression is present, and attach + either the Loop_Parameter_Specification or the + Iterator_Specification to the new node. + * sem_aggr.adb: (Resolve_Container_Aggregate): + Resolve_Iterated_Association handles bota Iterated_Component_ + and Iterated_Element_Associations, in which case it analyzes and + resoles the orresponding Key_Expression. + * exp_aggr.adb (Expand_Iterated_Component): If a Key_Expression + is present, use it as the required parameter in the call to the + insertion routine for the destination container aggregate. Call + this routine for both kinds of Iterated_Associations. + +2020-10-19 Arnaud Charlet <charlet@adacore.com> + + * exp_ch4.adb (Expand_Concatenate): Enable needed range checks. + +2020-10-19 Bob Duff <duff@adacore.com> + + * exp_ch6.adb (Make_Build_In_Place_Call_In_Object_Declaration): + Set the Warnings_Off flag on the pointer object used in the + expansion of iterators and similar. + +2020-10-19 Eric Botcazou <ebotcazou@adacore.com> + + * Makefile.rtl (PowerPC/Linux): Use s-taspri__posix.ads instead + of s-taspri__posix-noaltstack.ads for s-taspri.ads. + +2020-10-19 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Add_Call): Remove excessive condition and + unnecessary call to Set_Has_Predicates. + +2020-10-19 Yannick Moy <moy@adacore.com> + + * debug.adb: Use debug switch -gnatdF for this alternative + display of messages. + * errout.adb (Output_Messages): Alternative display when -gnatdF + is used. + * erroutc.adb (Output_Msg_Text): Likewise. + +2020-10-19 Arnaud Charlet <charlet@adacore.com> + + * sem_ch6.adb (Check_Untagged_Equality): Check for AI12-0352. + +2020-10-19 Ed Schonberg <schonberg@adacore.com> + + * exp_ch6.adb (Add_View_Conversion_Invariants): Do not insert + generated invariant checks when the call is a function call. + These tests are properly inserted in the code in procedure + Insert_Post_Call_Actions, which takes care of finding the proper + insertion point for the checks. + (Insert_Post_Call_Actions): Add question marks to indicate + possible gap in handling function calls that appear as aggregate + components. + +2020-10-19 Arnaud Charlet <charlet@adacore.com> + + * contracts.adb (Process_Preconditions_For): Do not exclude + instances. + * sem_ch4.adb (Analyze_Quantified_Expression): Disable spurious + warning on internally generated variables. + +2020-10-19 Ghjuvan Lacambre <lacambre@adacore.com> + + * debug.adb: Document -gnatd_c flag as being used for CUDA. + * gnat_cuda.ads: New file. + * gnat_cuda.adb: New file. + * rtsfind.ads: Add Interfaces_C_Strings package and + RE_Fatbin_Wrapper, RE_Register_Fat_Binary, + RE_Register_Fat_Binary_End, RE_Register_Function, RE_Chars_Ptr, + RE_New_Char_Array entities. + * rtsfind.adb: Create new Interfaces_C_Descendant subtype, + handle it. + * sem_ch7.adb (Analyze_Package_Body_Helper): Call CUDA init + procedure. + * sem_prag.adb (Analyze_Pragma): Call Add_Cuda_Kernel procedure. + * gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add gnat_cuda.o. + +2020-10-19 Bob Duff <duff@adacore.com> + + * ghost.adb (Whole_Object_Ref): New function to compute the name + of the whole object. + (Mark_And_Set_Ghost_Assignment): Rewrite to use + Whole_Object_Ref. We need to partly analyze the left-hand side + in order to distinguish expanded names and record components. + * lib-xref.ads, lib-xref.adb (Deferred_References): Move table + to body, and add Defer_Reference to update the table, avoiding + duplicates. + (Generate_Reference): Avoid duplicates. + * sem_ch8.ads, sem_ch8.adb (Find_Direct_Name): Remove _OK + parameters, which are no longer needed. Ignore errors in + Ignore_Errors mode. + * sem_util.ads, sem_util.adb (Preanalyze_Without_Errors): Make + this public, so we can call it from Ghost. + * errout.ads, scng.adb, sem_prag.adb: Minor. + +2020-10-19 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Check if type + depends on discriminant. + +2020-10-19 Bob Duff <duff@adacore.com> + + * libgnat/a-coinve.adb, libgnat/a-cidlli.adb (Put_Image): Call + Iterate. + +2020-10-19 Arnaud Charlet <charlet@adacore.com> + + * sem_aggr.adb (Resolve_Record_Aggregate): Properly apply + subtype constraints when using a Default_Value. + * freeze.adb: Fix typo. + +2020-10-19 Yannick Moy <moy@adacore.com> + + * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Fix bug + where a call to Error_Msg_N leads to crash due to + Error_Msg_Name_1 being removed by the call, while a subsequent + call to Error_Msg_N tries to use it. The variable + Error_Msg_Name_1 should be restored prior to the next call. Also + add checking for the new rules. + +2020-10-19 Arnaud Charlet <charlet@adacore.com> + + * checks.adb (Apply_Type_Conversion_Checks): Minor code clean + up. + * exp_ch4.adb (Discrete_Range_Check): Optimize range checks. + Update comments. + (Expand_N_Type_Conversion): Generate range check when rewriting + a type conversion if needed. Add assertion. + * exp_ch6.adb (Expand_Simple_Function_Return): Minor code clean + up. + * sem_res.adb (Resolve_Type_Conversion): Apply range check when + needed. Update comments. + +2020-10-19 Yannick Moy <moy@adacore.com> + + * libgnat/a-textio.ads: Update top-level comment. + +2020-10-19 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Analyze_Contract_Cases_In_Decl_Part): Fix typo. + +2020-10-19 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch6.adb (Expand_Actuals): Simplify condition for by-copy + types. + +2020-10-19 Yannick Moy <moy@adacore.com> + + * errout.ads: Add comment regarding lack of preservation of + Errout state across successive calls to the API. + +2020-10-19 Bob Duff <duff@adacore.com> + + * exp_put_image.adb (Build_Elementary_Put_Image_Call): Use the + base type to recognize various cases of access types. + * libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads, libgnat/a-cbhama.adb, + libgnat/a-cbhama.ads, libgnat/a-cbhase.adb, libgnat/a-cbhase.ads, + libgnat/a-cbmutr.adb, libgnat/a-cbmutr.ads, libgnat/a-cborma.adb, + libgnat/a-cborma.ads, libgnat/a-cborse.adb, libgnat/a-cborse.ads, + libgnat/a-cdlili.adb, libgnat/a-cdlili.ads, libgnat/a-cidlli.adb, + libgnat/a-cidlli.ads, libgnat/a-cihama.adb, libgnat/a-cihama.ads, + libgnat/a-cihase.adb, libgnat/a-cihase.ads, libgnat/a-cimutr.adb, + libgnat/a-cimutr.ads, libgnat/a-ciorma.adb, libgnat/a-ciorma.ads, + libgnat/a-ciormu.adb, libgnat/a-ciormu.ads, libgnat/a-ciorse.adb, + libgnat/a-ciorse.ads, libgnat/a-coboho.adb, libgnat/a-coboho.ads, + libgnat/a-cobove.adb, libgnat/a-cobove.ads, libgnat/a-cohama.adb, + libgnat/a-cohama.ads, libgnat/a-cohase.adb, libgnat/a-cohase.ads, + libgnat/a-coinho.adb, libgnat/a-coinho.ads, + libgnat/a-coinho__shared.adb, libgnat/a-coinho__shared.ads, + libgnat/a-coinve.adb, libgnat/a-coinve.ads, libgnat/a-comutr.adb, + libgnat/a-comutr.ads, libgnat/a-coorma.adb, libgnat/a-coorma.ads, + libgnat/a-coormu.adb, libgnat/a-coormu.ads, libgnat/a-coorse.adb, + libgnat/a-coorse.ads, libgnat/a-strunb.adb, libgnat/a-strunb.ads, + libgnat/a-strunb__shared.adb, libgnat/a-strunb__shared.ads: + Implement Put_Image attibute. + * libgnat/a-stteou.ads, libgnat/s-putima.ads, + libgnat/a-stouut.ads, libgnat/a-stoubu.adb: Make + Ada.Strings.Text_Output, Ada.Strings.Text_Output.Utils, and + System.Put_Images Pure, so they can be with'ed by Pure units + that should have Put_Image defined. + * libgnat/a-stouut.adb: Add missing column adjustments, and + remove a redundant one. + * libgnat/s-putima.adb (Put_Arrow): New routine to print an + arrow. Avoids adding a with clause to some containers. + +2020-10-19 Bob Duff <duff@adacore.com> + + * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Require matching + parens or brackets. + * par.adb, par-tchk.adb (T_Right_Bracket): New procedure to give + an error on missing ]. + +2020-10-19 Javier Miranda <miranda@adacore.com> + + * sem_ch8.adb (Find_Direct_Name): Do not trust in the decoration + of the Entity attribute in constants associated with + discriminals of protected types. + +2020-10-19 Gary Dismukes <dismukes@adacore.com> + + * sem_disp.adb (Check_Dispatching_Context): When the enclosing + subprogram is abstract, bypass early return if the call is + tag-indeterminate, to continue with the later error checking. + +2020-10-19 Javier Miranda <miranda@adacore.com> + + * sem_ch7.adb (Uninstall_Declarations): Uninstall the + declaration of a subtype declaration defined in the private part + of a package. + +2020-10-19 Arnaud Charlet <charlet@adacore.com> + + * par-ch4.adb (P_Aggregate_Or_Paren_Expr): Simplify code since + we are always under -gnatX if we encounter a Tok_Left_Bracket. + * scng.adb (Scan): [] is an aggregate under -gnatX and a wide + character otherwise. + +2020-10-19 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch6.adb (Expand_Call_Helper): Cleanup. + +2020-10-19 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch6.adb (Is_Direct_Deep_Call): Refine type from Node_Id to + Entity_Id. + +2020-10-19 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch6.adb (May_Fold): Detect all operators, i.e. both binary + and unary ones. + +2020-10-19 Piotr Trojanek <trojanek@adacore.com> + + * inline.adb (Expand_Inlined_Call): Simplify repeated calls to + Nkind. + +2020-10-18 Alexandre Oliva <oliva@adacore.com> + + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Compile Ada.Numerics + child units Aux_Generic_Float, Aux_Long_Long_Float, Aux_Long_Float, + Aux_Float, Aux_Short_Float, Aux_Compat, and Aux_Linker_Options. + (X86_TARGET_PAIRS): Drop dummy body for Aux. Use x86 version + of Aux_Compat. + (X86_64_TARGET_PAIRS): Likewise. + (LIBGNAT_TARGET_PAIRS): On VxWorks, select the nolibm + variants. Drop the darwin version of Aux. Drop the redundant + libc-x86 numaux variants on x86* kfreebsd variants. + * libgnat/a-nagefl.ads: New Aux_Generic_Float. + * libgnat/a-naliop.ads: New Aux_Linker_Options. + * libgnat/a-naliop__nolibm.ads: New. + * libgnat/a-nallfl.ads: New Aux_Long_Long_Float. + * libgnat/a-nalofl.ads: New Aux_Long_Float. + * libgnat/a-nuaufl.ads: New Aux_Float. + * libgnat/a-nashfl.ads: New Aux_Short_Float. + * libgnat/a-ngcefu.adb (Exp): Factor out the Im (X) passed to + Sin and Cos in the Complex variant too. + * libgnat/a-ngcoty.adb: Switch to Aux_Generic_Float. Drop + redundant conversions. + * libgnat/a-ngelfu.adb: Likewise. + * libgnat/a-nuauco.ads: New Aux_Compat. + * libgnat/a-nuauco__x86.ads: New. + * libgnat/a-numaux.ads: Replace with Compat wrapper. + * libgnat/a-numaux__darwin.adb: Remove. + * libgnat/a-numaux__darwin.ads: Remove. + * libgnat/a-numaux__dummy.adb: Remove. + * libgnat/a-numaux__libc-x86.ads: Remove. + * libgnat/a-numaux__vxworks.ads: Remove. + +2020-10-16 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb, exp_aggr.adb, exp_attr.adb, exp_ch6.adb, + freeze.adb, sem_aggr.adb, sem_attr.adb, sem_ch13.adb, + sem_ch13.ads, sem_ch6.adb, sem_eval.adb, sem_util.adb: Fix style + and typos. + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + * sem_cat.adb (Is_Primary): Handle N_Range properly. + +2020-10-16 Ghjuvan Lacambre <lacambre@adacore.com> + + * elists.ads (New_Elmt_List): New functions. + * elists.adb (New_Elmt_List): New functions. + * exp_prag.adb: Add dependency on Elists. + (Expand_Pragma_CUDA_Execute): New function. + (Expand_N_Pragma): Add call to Expand_Pragma_CUDA_Execute. + * rtsfind.ads: Add CUDA.Internal, CUDA.Runtime, System.C + packages and RE_Push_Call_Configuration, + RE_Pop_Call_Configuration, RE_Launch_Kernel, RO_IC_Unsigned, + RO_IC_Unsigned_Long_Long entities. + * rtsfind.adb: Extend Interfaces_Descendant to include + Interfaces_C. + +2020-10-16 Bob Duff <duff@adacore.com> + + * par-ch4.adb (P_Name): Allow Tok_Left_Bracket in two places to + call P_Qualified_Expression. We don't need to modify other + places that call P_Qualified_Expression, because a + qualified_expression is a name in Ada 2012 and higher, so P_Name + is the right place. The parser already parses aggregates with + brackets; we just need to allow that in qualified expressions. + +2020-10-16 Javier Miranda <miranda@adacore.com> + + * sem_ch12.adb (Check_Generic_Child_Unit): When the child unit + is a renaming of a generic child unit then traverse the scope + containing the renaming declaration to locate the instance of + its parent. Otherwise the parent is not installed and the + frontend cannot process the instantiation. + +2020-10-16 Bob Duff <duff@adacore.com> + + * libgnat/a-numeri.ads: Remove the greek letter. + +2020-10-16 Ed Schonberg <schonberg@adacore.com> + + * exp_imgv.adb (Expand_Image_Attribute): Refine previous patch + to use root type (and not base type) on enumeration types. + +2020-10-16 Ed Schonberg <schonberg@adacore.com> + + * exp_imgv.adb (Expand_Image_Attribute): Use the base type + instead of the root type when type of object is private. Remove + Ada_2020 guard, because it has been checked during prior + analysis. Use Underlying_Type in all cases, as it is a no-op on + types that are not private. + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + * aspects.ads, snames.ads-tmpl: Add support for + Exclusive_Functions aspect. + * sem_ch13.adb (Analyze_Aspect_Specifications): Ditto. + * exp_ch9.adb (Build_Protected_Subprogram_Body): Take aspect + Exclusive_Functions into account. + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + * gcc-interface/Make-lang.in: Update dependencies on system.ads, + add gnatbind switch -t to avoid timestamp inconsistencies during + build. + * libgnat/system.ads: Move... + * gcc-interface/system.ads: ... here. + +2020-10-16 Gary Dismukes <dismukes@adacore.com> + + * sem_eval.adb (Subtypes_Statically_Match): Retrieve + discriminant constraints from the two types via new function + Original_Discriminant_Constraint rather than + Discriminant_Constraint. + (Original_Discriminant_Constraint): New function to locate the + nearest explicit discriminant constraint associated with a type + that may possibly have inherited a constraint from an ancestor + type. + +2020-10-16 Bob Duff <duff@adacore.com> + + * exp_ch6.adb (Expand_Simple_Function_Return): Remove obsolete + comment and code. + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + PR ada/95953 + * libgnat/a-suenco.adb (Convert): Fix handling of third UTF-8 + byte. + +2020-10-16 Steve Baird <baird@adacore.com> + + * exp_util.adb (Is_Related_To_Func_Return): Cope with the case + where the FE introduces a type conversion. + +2020-10-16 Chris Martin <cmartin@adacore.com> + + * sem_util.ads, sem_util.adb (Is_Access_Variable): New function. + (Is_Synchronized_Object): Call new function when determining if + a constant can be regarded as synchronized. + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + * exp_ch6.adb (Make_Build_In_Place_Call_In_Object_Declaration): + Call Set_BIP_Initialization_Call systematically. + * exp_ch7.adb (Process_Transient_In_Scope): Take + BIP_Initialization_Call into account to decide where to insert + the Hook. + +2020-10-16 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.adb (Is_View_Conversion): Detect qualified types. + * sem_util.ads (Is_Actual_In_Out_Parameter): Fix style in + comment. + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + * scil_ll.adb, sem_scil.adb: Update assertions. + +2020-10-16 Ed Schonberg <schonberg@adacore.com> + + * sem_attr.adb (Min_Max): Handle the case where attribute + name (qualified by required type) appears as the reducer of a + 'Reduce attribute reference. + (Resolve_Attribute) <Reduce>: Handle properly the presence of a + procedure or an attribute reference Min/Max as a reducer. + * exp_attr.adb (Expand_Attribute_Reference) <Reduce>: New + subprogram Build_Stat, to construct the combining statement + which appears in the generated loop for Reduce, and which is + either a function call when the reducer is a function or an + attribute, or a procedure call when reducer is an appropriate + procedure. BuilD_Stat is used both when the prefix of 'Reduce + is a value sequence and when it is an object + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + * exp_ch4.adb (Expand_Concatenate): Allocate result of string + concatenation on secondary stack when relevant. + +2020-10-16 Ed Schonberg <schonberg@adacore.com> + + * sem_res.adb (Resolve_Declare_Expression): Retrieve the created + block entity that is the scope of the local declarations, from + either a local object declaration or an object renaming + declaration. The block entity does not have an explicit + declaration, but appears as the scope of all locally declared + objects. + +2020-10-16 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/system-aix.ads: Likewise. + * libgnat/system-darwin-arm.ads: Likewise. + * libgnat/system-darwin-ppc.ads: Likewise. + * libgnat/system-darwin-x86.ads: Likewise. + * libgnat/system-djgpp.ads: Likewise. + * libgnat/system-dragonfly-x86_64.ads: Likewise. + * libgnat/system-freebsd.ads: Likewise. + * libgnat/system-hpux-ia64.ads: Likewise. + * libgnat/system-hpux.ads: Likewise. + * libgnat/system-linux-alpha.ads: Likewise. + * libgnat/system-linux-arm.ads: Likewise. + * libgnat/system-linux-hppa.ads: Likewise. + * libgnat/system-linux-ia64.ads: Likewise. + * libgnat/system-linux-m68k.ads: Likewise. + * libgnat/system-linux-mips.ads: Likewise. + * libgnat/system-linux-ppc.ads: Likewise. + * libgnat/system-linux-riscv.ads: Likewise. + * libgnat/system-linux-s390.ads: Likewise. + * libgnat/system-linux-sh4.ads: Likewise. + * libgnat/system-linux-sparc.ads: Likewise. + * libgnat/system-linux-x86.ads: Likewise. + * libgnat/system-lynxos178-ppc.ads: Likewise. + * libgnat/system-lynxos178-x86.ads: Likewise. + * libgnat/system-mingw.ads: Likewise. + * libgnat/system-qnx-aarch64.ads: Likewise. + * libgnat/system-rtems.ads: Likewise. + * libgnat/system-solaris-sparc.ads: Likewise. + * libgnat/system-solaris-x86.ads: Likewise. + * libgnat/system-vxworks-arm-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-arm-rtp.ads: Likewise. + * libgnat/system-vxworks-arm.ads: Likewise. + * libgnat/system-vxworks-e500-kernel.ads: Likewise. + * libgnat/system-vxworks-e500-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-e500-rtp.ads: Likewise. + * libgnat/system-vxworks-e500-vthread.ads: Likewise. + * libgnat/system-vxworks-ppc-kernel.ads: Likewise. + * libgnat/system-vxworks-ppc-ravenscar.ads: Likewise. + * libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-ppc-rtp.ads: Likewise. + * libgnat/system-vxworks-ppc-vthread.ads: Likewise. + * libgnat/system-vxworks-ppc.ads: Likewise. + * libgnat/system-vxworks-x86-kernel.ads: Likewise. + * libgnat/system-vxworks-x86-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-x86-rtp.ads: Likewise. + * libgnat/system-vxworks-x86-vthread.ads: Likewise. + * libgnat/system-vxworks-x86.ads: Likewise. + * libgnat/system-vxworks7-aarch64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-aarch64.ads: Likewise. + * libgnat/system-vxworks7-arm-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-arm.ads: Likewise. + * libgnat/system-vxworks7-e500-kernel.ads: Likewise. + * libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-e500-rtp.ads: Likewise. + * libgnat/system-vxworks7-ppc-kernel.ads: Likewise. + * libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-ppc-rtp.ads: Likewise. + * libgnat/system-vxworks7-ppc64-kernel.ads: Likewise. + * libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86-kernel.ads: Likewise. + * libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86-rtp.ads: Likewise. + * libgnat/system-vxworks7-x86_64-kernel.ads: Likewise. + * libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise. + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl, gnat1drv.adb, expander.adb + doc/gnat_rm/implementation_defined_pragmas.rst, + doc/gnat_ugn/building_executable_programs_with_gnat.rst, + doc/gnat_ugn/the_gnat_compilation_model.rst, exp_ch5.ads, + exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_util.adb, + exp_util.ads, libgnarl/s-osinte__aix.adb, + libgnarl/s-osinte__android.adb, libgnarl/s-osinte__darwin.adb, + libgnarl/s-osinte__gnu.adb, libgnarl/s-osinte__hpux-dce.adb, + libgnarl/s-osinte__lynxos178.adb, libgnarl/s-osinte__posix.adb, + libgnarl/s-osinte__qnx.adb, libgnarl/s-osinte__rtems.adb, + libgnarl/s-osinte__solaris.adb, libgnarl/s-osinte__vxworks.adb, + libgnarl/s-osinte__x32.adb, libgnarl/s-solita.adb, + libgnarl/s-taasde.adb, libgnarl/s-taprob.adb, + libgnarl/s-taprop__dummy.adb, libgnarl/s-taprop__hpux-dce.adb, + libgnarl/s-taprop__linux.adb, libgnarl/s-taprop__mingw.adb, + libgnarl/s-taprop__posix.adb, libgnarl/s-taprop__qnx.adb, + libgnarl/s-taprop__solaris.adb, libgnarl/s-taprop__vxworks.adb, + libgnarl/s-tarest.adb, libgnarl/s-tasini.adb, + libgnarl/s-taskin.adb, libgnarl/s-taspri__dummy.ads, + libgnarl/s-taspri__hpux-dce.ads, libgnarl/s-taspri__lynxos.ads, + libgnarl/s-taspri__mingw.ads, + libgnarl/s-taspri__posix-noaltstack.ads, + libgnarl/s-taspri__posix.ads, libgnarl/s-taspri__solaris.ads, + libgnarl/s-taspri__vxworks.ads, libgnarl/s-tassta.adb, + libgnarl/s-tasuti.adb, libgnarl/s-tposen.adb, + libgnat/a-except.adb, libgnat/a-except.ads, + libgnat/s-dwalin.adb, libgnat/s-dwalin.ads, + libgnat/s-mastop.ads, libgnat/s-soflin.adb, + libgnat/s-stalib.adb, libgnat/s-stalib.ads, + libgnat/s-stchop.adb, libgnat/s-stchop.ads, + libgnat/s-stchop__limit.ads, libgnat/s-traceb.ads, + libgnat/s-traent.adb, libgnat/s-traent.ads, + libgnat/s-trasym.adb, libgnat/s-trasym.ads, + libgnat/s-trasym__dwarf.adb, opt.adb, opt.ads, par-prag.adb, + sem_prag.adb, snames.ads-tmpl, switch-c.adb, targparm.adb, + targparm.ads, usage.adb: Remove support for -gnatP and pragma + Polling. + * gnat_ugn.texi: Regenerate. + * libgnat/a-excpol.adb, libgnat/a-excpol__abort.adb: Removed. + +2020-10-16 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Array_Type_Declaration): Create itype with unique + name. + +2020-10-16 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Analyze_Object_Declaration): Limit scope of a + local object by hiding it from local subprograms; simplify + nested if-then-if-then condition for an Ada 83 restriction. + (Array_Type_Declaration): Confirm with assertion when the else + branch is executed. + (Find_Type_Of_Object): Simplify membership test with a subtype + range. + +2020-10-16 Yannick Moy <moy@adacore.com> + + * sem_prag.adb (Analyze_Global_In_Decl_Part): Update check to + reject volatile object for reading. + * sem_res.adb (Resolve_Actuals, Resolve_Entity_Name): Update + check to reject volatile object for reading. + * sem_util.adb, sem_util.ads + (Check_Nonvolatile_Function_Profile, + Has_Effectively_Volatile_Profile): Detect use of volatile object + for reading. + (Has_Enabled_Property): Accept constants as well. + (Is_Effectively_Volatile_For_Reading): New function based on + existing Is_Effectively_Volatile. + (Is_Effectively_Volatile_Object_For_Reading): Adapted from the + existing Is_Effectively_Volatile_Object, using a shared + implementation in Is_Effectively_Volatile_Object_Shared. + +2020-10-16 Gary Dismukes <dismukes@adacore.com> + + * exp_ch7.adb (Check_Unnesting_In_Decls_Or_Stmts): In the case + of an if-statement, call Unnest_If_Statement to determine + whether there are nested subprograms in any of the statement + lists of the "if" parts that require a wrapping procedure to + handle possible up-level refeferences. + (Unnest_Block): Call Check_Unnesting_In_Handlers to do unnesting + of subprograms in exception handlers of the block statement. + (Unnest_If_Statement): New procedure to traverse the parts of an + if-statement and create wrapper procedures as needed to + encapsulate nested subprograms that may make up-level + references. + (Check_Stmts_For_Subp_Unnesting): New support procedure in + Unnest_If_Statement to traverse a statement list looking for + top-level subprogram bodies that require wrapping inside a + procedure (via Unnest_Statement_List) as well as possibly having + other statements (block, loop, if) that may themselves require + an unnesting transformation (via + Check_Unnesting_In_Decls_Or_Stmts). + (Unnest_Statement_List): New support procedure to traverse the + statements of a statement list that contains subprogram bodies + at the top level and replace the statement list with a wrapper + procedure body encapsulating the statements and a call to the + procedure. + +2020-10-16 Arnaud Charlet <charlet@adacore.com> + + * sem_prag.adb (Check_OK_Stream_Convert_Function): Check for + abstract subprograms. + +2020-10-16 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/standard_and_implementation_defined_restrictions.rst + (No_Local_Timing_Events): Package Timing_Events is a child of + Ada.Real_Time, not of Ada. + * gnat_rm.texi: Regenerate. + +2020-10-16 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_defined_attributes.rst: Document the + new Max_Integer_Size attribute. + * gnat_rm.texi: Regenerate. + * exp_attr.adb (Get_Integer_Type): Call Small_Integer_Type_For. + (Expand_N_Attribute_Reference) <Attribute_Pred>: Replace selection + code with call to Integer_Type_For. + <Attribute_Succ>: Likewise. + <Attribute_Val>: Likewise. + <Attribute_Valid>: Likewise. + <Attribute_Max_Integer_Size>: Raise Program_Error. + * exp_ch3.adb (Expand_Freeze_Enumeration_Type): Replace selection + code with call to Integer_Type_For. + (Simple_Init_Initialize_Scalars_Type): Use Long_Long_Unsigned and + System_Max_Integer_Size to size the largest integer type. + * exp_pakd.adb (Compute_Linear_Subscript): Minor tweak. + (Create_Packed_Array_Impl_Type): Use Small_Integer_Type_For. + * exp_util.ads (Integer_Type_For): New function. + (Small_Integer_Type_For): Likewise. + * exp_util.adb (Adjust_Condition): Use Integer_Type_For. + (Component_May_Be_Bit_Aligned): Use System_Max_Integer_Size. + (Integer_Type_For): New function. + (Small_Integer_Type_For): Likewise. + (Matching_Standard_Type): Use Small_Integer_Type_For. + (Needs_Constant_Address): Replace 64 with System_Max_Integer_Size. + * freeze.adb (Set_Small_Size): Likewise. + (Size_Known): Likewise. + (Check_Suspicious_Modulus): Likewise. + (Check_Large_Modular_Array): Likewise. + (Freeze_Entity): Likewise. + * layout.adb (Layout_Type): Likewise. + * sem_aggr.adb: Add with and use clauses for Ttypes. + (Resolve_Aggregate): Replace 64 with System_Max_Integer_Size. + * sem_attr.ads (Attribute_Impl_Def): Add Attribute_Max_Integer_Size. + * sem_attr.adb (Analyze_Attribute) <Attribute_Max_Integer_Size>: New + (Eval_Attribute): Likewise. + * sem_ch13.adb (Adjust_Record_For_Reverse_Bit_Order): Change max + scalar size to System_Max_Integer_Size. + (Check_Array_Type): Replace 64 with System_Max_Integer_Size and + remove superfluous test. + (OK_Component): Likewise. + * sem_ch5.adb: Add with and use clauses for Ttypes. + (Analyze_Assignment): Replace 64 with System_Max_Integer_Size. + * snames.ads-tmpl (Name_Max_Integer_Size): New attribute name. + (Attribute_Id): Add Attribute_Max_Integer_Size. + * ttypes.ads (System_Max_Integer_Size): New constant. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * sem_ch10.adb (Install_With_Clause): Fix implementation of Ada + 2005 AI-262 by taking into account generic packages. Minor + reformatting. + * libgnat/a-cbhase.ads, libgnat/a-cbhase.adb: Remove use clause + on runtime unit spec. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * einfo.ads, einfo.adb (Scope_Depth_Value, + Set_Scope_Depth_Value): Add assertions on valid nodes and update + documentation accordingly. + (Write_Field22_Name): Sync with change in Scope_Depth_Value. + * sem_ch8.adb (Find_Direct_Name): Fix call to Scope_Depth_Value. + +2020-10-15 Javier Miranda <miranda@adacore.com> + + * sem_prag.adb (Analyze_Pragma): Adding semantic support of + Standard to Default_Storage_Pool. + * freeze.adb (Freeze_Entity): If pragma Default_Storage_Pool + applies and it is set to Standard then use the global pool as + the associated storage pool of the access type. + +2020-10-15 Javier Miranda <miranda@adacore.com> + + * exp_ch6.ads (Might_Have_Tasks): Update documentation. + * exp_ch6.adb (Might_Have_Tasks): Return also true when the type + has tasks. + (Make_Build_In_Place_Call_In_Allocator): Code cleanup. + * exp_ch3.adb (Ensure_Activation_Chain_And_Master, + Expand_N_Full_Type_Declaration, Expand_N_Object_Declaration): + Code cleanup. + +2020-10-15 Steve Baird <baird@adacore.com> + + * checks.adb (Apply_Predicate_Check): Generate "infinite + recursion" warning message even if run-time predicate checking + is disabled. + * exp_ch6.adb (Expand_Simple_Function_Return): In testing + whether the returned expression is a function call, look for the + case where the call has been transformed into a dereference of + an access value that designates the result of a function call. + * sem_ch3.adb (Analyze_Object_Declaration): Legality checking + for a static expression is unaffected by assertion policy (and, + in particular, enabling/disabling of subtype predicates. To get + the right legality checking, we need to call + Check_Expression_Against_Static_Predicate for a static + expression even if predicate checking is disabled for the given + predicate-bearing subtype. On the other hand, we don't want to + call Make_Predicate_Check unless predicate checking is enabled. + * sem_ch7.adb (Uninstall_Declarations.Preserve_Full_Attributes): + Preserve the Predicates_Ignored attribute. + * sem_eval.adb (Check_Expression_Against_Static_Predicate): + Previously callers ensured that this procedure was only called + if predicate checking was enabled; that is no longer the case, + so predicates-disabled case must be handled. + * sem_prag.adb (Analyze_Pragma): Fix bug in setting + Predicates_Ignored attribute in Predicate pragma case. + +2020-10-15 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb (Freeze_Fixed_Point_Type): Do not scale the bounds + of a declared subtype using the 'Small of the type; this is + done during resolution of the bound itself, unlike what is done + for the bounds of the base type, which are used to determine its + required size. Previous code performed this scaling twice, + leading to meaningless values for such a subtype. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.adb (Bad_Predicated_Subtype_Use): Emit an + unconditional error, not a conditional warning. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Process_Subtype): Combine guards for + Null_Exclusion_Present in May_Have_Null_Exclusion; use this + combined guard when checking AI-231. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Process_Subtype): Sync May_Have_Null_Exclusion + with assertion in Null_Exclusion_Present; clarify the scope of + local variables. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Analyze_Subtype_Declaration): Fix style. + (Make_Index): Refactor to avoid repeated detection of subtype + indication; add comment. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Is_Acceptable_Dim3): Use Is_RTE to not pull CUDA + package unless necessary; rename local Tmp variable; iterate + with procedural Next. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Array_Type_Declaration): Refine type of a local + variable. + (Make_Index): Simplify to avoid assignment with a type entity + and then backtracking by reassigning to Empty; remove excessive + whitespace. + * sem_ch9.adb (Analyze_Entry_Body): Remove extra parens. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Access_Subprogram_Declaration): Remove extra + parens. + (Make_Index): Remove excessive calls to Is_Type. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * sem_util.adb (Enter_Name): Remove unnecessary conditions in + Enter_Name that come from the beginning of times. + +2020-10-15 Bob Duff <duff@adacore.com> + + * exp_ch6.adb (Expand_Simple_Function_Return): Remove DSP part + of comment, and reformat. + +2020-10-15 Boris Yakobowski <yakobowski@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Do not expand + 'Initialized in CodePeer mode. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * sem_ch12.adb (Reset_Entity): Protect against malformed tree. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * sem_ch13.adb (Add_Predicates): Prevent analyzing twice the + same pragma in case an inner package references the type with a + predicate (as opposed to defining the type). + +2020-10-15 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/a-cfinve.adb (Int): Use subtype of Long_Long_Integer. + * libgnat/a-cofove.adb (Int): Likewise. + * libgnat/a-cgcaso.adb (T): Likewise. + * libgnat/a-cogeso.adb (T): Likewise. + * libgnat/g-debpoo.ads (Byte_Count): Use Long_Long_Integer'Size. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch12.adb: Replace list of N_Defining_... enumerations with + N_Entity. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.ads, sem_ch3.adb (Make_Index): Refined type of + parameter. + (Constrain_Index): Likewise. + (Array_Type_Declaration): Refine type of a local counter + variable; remove a trivially useless initialization. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Analyze_Subtype_Declaration): Recognize both + identifiers and expanded names; use high-level Is_Scalar_Type + instead of low-level membership test. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * sem_eval.adb (Eval_Intrinsic_Call, Fold_Shift): Add support + for Shift_Right_Arithmetic and for signed integers. + * exp_ch4.adb (Expand_N_Op_Rotate_Left, + Expand_N_Op_Rotate_Right, Expand_N_Op_Shift_Left, + Expand_N_Op_Shift_Right_Arithmetic): Minor reformatting and code + cleanup to ensure a consistent handling. Update comments and add + assertion. + +2020-10-15 Bob Duff <duff@adacore.com> + + * sem_ch13.adb (Visible_Component): Enable this code for task + and protected types, as well as record and private types. + * sem_ch13.ads (Replace_Type_References_Generic): Update + comment. Move the efficiency comment into the body, because + it's about the implementation. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * par-ch13.adb (Get_Aspect_Specifications): Generate a warning + rather than an error on unknown aspects unless -gnatd2 is used. + (Aspect_Specifications_Present): Improve detection of unknown + aspects. + * debug.adb (Debug_Flag_2): Update document. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * sem_res.adb (Resolve_Call): Do not try to inline intrinsic + calls. + +2020-10-15 Ed Schonberg <schonberg@adacore.com> + + * exp_aggr.adb (Expand_N_Aggregate): A record aggregate requires + a non-private type. + * sem_ch13.adb (Valid_Assign_Indexed): New subprogram local to + Resolve_Aspect_Aggregate, to handle the case when the + corresponding name appearing in the aspect specification for an + indexed aggregate is an overloaded operation. + * libgnat/a-convec.ads, libgnat/a-convec.adb, + libgnat/a-coinve.ads, libgnat/a-coinve.adb, + libgnat/a-cobove.ads, libgnat/a-cobove.adb, + libgnat/a-cdlili.ads, libgnat/a-cdlili.adb, + libgnat/a-cbdlli.ads, libgnat/a-cbdlli.adb, + libgnat/a-cohama.ads, libgnat/a-cihama.ads, + libgnat/a-cbhama.ads, libgnat/a-cborma.ads, + libgnat/a-ciorma.ads, libgnat/a-coorma.ads, + libgnat/a-cihase.ads, libgnat/a-cohase.ads, + libgnat/a-cbhase.ads, libgnat/a-cborse.ads, + libgnat/a-ciorse.ads, libgnat/a-coorse.ads: Add Ada_2020 aspect + Aggregate to types declared in standard containers, as well as + new subprograms where required. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * libgnat/g-arrspl.ads, libgnat/g-arrspl.adb (Create, + First_Cursor, Advance, Has_Element): New. + +2020-10-15 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl: Add target pair for interfac.ads. + * libgnat/interfac.ads: Add a comment. + * libgnat/interfac__2020.ads: New, used for bootstrap purposes. + * sem_util.adb (Is_Static_Function): Always return False for pre + Ada 2020 to e.g. ignore the Static aspect in Interfaces for + Ada < 2020. + +2020-10-15 Piotr Trojanek <trojanek@adacore.com> + + * exp_util.adb (Remove_Side_Effects): Move special-casing for + GNATprove to be applied to all object declarations. + +2020-10-12 Alexandre Oliva <oliva@adacore.com> + + * libgnat/a-ngelfu.ads (Sin, Cos): Make the single-argument + functions inline. + +2020-10-11 Alexandre Oliva <oliva@adacore.com> + + * libgnat/a-numaux.ads: Make all imports Intrinsic. + * libgnat/a-numaux__darwin.ads: Likewise. + * libgnat/a-numaux__libc-x86.ads: Likewise. + * libgnat/a-numaux__vxworks.ads: Likewise. + +2020-09-28 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (Subprogram_Body_to_gnu): Set the end locus + of body and declaration earlier. + +2020-09-28 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (maybe_saturate_size): Add ALIGN parameter + and round down the result to ALIGN. + (gnat_to_gnu_entity): Adjust calls to maybe_saturate_size. + +2020-09-14 Jakub Jelinek <jakub@redhat.com> + + * gcc-interface/trans.c (gigi): Adjust build_optimization_node + caller. + +2020-09-12 Eric Botcazou <ebotcazou@adacore.com> + + * fe.h: Fix pilot error in previous change. + * gcc-interface/gigi.h (enum standard_datatypes): Add ADT_mulv128_decl. + (mulv128_decl): New macro. + (get_target_long_long_long_size): Declare. + * gcc-interface/decl.c (gnat_to_gnu_entity): Use a maximum size of + 128 bits for discrete types if Enable_128bit_Types is true. + * gcc-interface/targtyps.c: Include target.h. + (get_target_long_long_long_size): New function. + * gcc-interface/trans.c (gigi): Initialize mulv128_decl if need be. + (build_binary_op_trapv): Call it for 128-bit multiplication. + * gcc-interface/utils.c (make_type_from_size): Enforce a maximum + size of 128 bits if Enable_128bit_Types is true. + +2020-09-12 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (lvalue_for_aggr_p) <N_Object_Declaration>: + Return false unconditionally. + +2020-09-12 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (gnat_to_gnu) <N_Object_Declaration>: Clear + the SLOC of the expression of a tag. + +2020-09-12 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Only give + a warning for the overlay of an aliased array with an unconstrained + nominal subtype if the address is absolute. + +2020-09-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils.c (type_has_variable_size): New function. + (create_field_decl): In the packed case, also force byte alignment + when the type of the field has variable size. + +2020-09-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/misc.c (get_array_bit_stride): Return TYPE_ADA_SIZE + for record and union types. + +2020-09-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/misc.c (gnat_get_fixed_point_type): Bail out only + when the GNAT encodings are specifically used. + +2020-09-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Only + create extra subtypes for discriminants if the RM size of the base + type of the index type is lower than that of the index type. + +2020-09-10 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (set_rm_size): Do not take into account the + Value_Size clause if it is not for the entity itself. + +2020-09-10 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (build_subst_list): For a definition, make + sure to instantiate the SAVE_EXPRs generated by the elaboration of + the constraints in front of the elaboration of the type itself. + +2020-09-10 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/misc.c: Include tree-pass.h. + (internal_error_function): Call emergency_dump_function. + +2020-09-03 Arnaud Charlet <charlet@adacore.com> + + * fe.h, opt.ads (Enable_128bit_Types): New. + * stand.ads (Standard_Long_Long_Long_Integer, + S_Long_Long_Long_Integer): New. + +2020-09-03 Arnaud Charlet <charlet@adacore.com> + + * sem_util.ads, sem_util.adb (Get_Fullest_View): New procedure. + * exp_unst.adb (Check Static_Type): Do all processing on fullest + view of specified type. + +2020-08-27 Martin Liska <mliska@suse.cz> + + * gcc-interface/trans.c (gigi): Set exact argument of a vector + growth function to true. + (Attribute_to_gnu): Likewise. + +2020-07-27 Alexandre Oliva <oliva@adacore.com> + + * switch.adb (Is_Internal_GCC_Switch): Revert accidental + reintroduction of auxbase and auxbase-strip. + +2020-07-27 Javier Miranda <miranda@adacore.com> + + * sem_res.adb (Resolve_Actuals): Restrict the check on matching + aliased components to view conversions of array types that are + not placed in an instance. In such case at runtime an object is + created. + * sem_util.ads (Is_Actual_In_Out_Parameter, Is_View_Conversion): + New subprograms. + * sem_util.adb (Is_Actual_In_Out_Parameter, Is_View_Conversion): + New subprograms. + +2020-07-27 Arnaud Charlet <charlet@adacore.com> + + * lib-xref.adb (Generate_Reference): Protect against malformed + tree in case of severe errors. + * sem_ch8.adb (Add_Implicit_Operator): Ditto. + +2020-07-27 Arnaud Charlet <charlet@adacore.com> + + * opt.ads (Ada_Version_Runtime): Set to Ada_2020. + * sem_ch3.adb (Analyze_Subtype_Declaration): Propagate + Is_Independent flag to subtypes. + * libgnarl/s-taprop__linux.adb: Adapt to Ada 2020 warning. + * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads, + libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb, + libgnat/a-nbnbre.ads, libgnat/a-stobbu.adb, + libgnat/a-stobbu.ads, libgnat/a-stobfi.adb, + libgnat/a-stobfi.ads, libgnat/a-stoubu.adb, + libgnat/a-stoubu.ads, libgnat/a-stoufi.adb, + libgnat/a-stoufi.ads, libgnat/a-stoufo.adb, + libgnat/a-stoufo.ads, libgnat/a-stouut.adb, + libgnat/a-stouut.ads, libgnat/a-strsto.ads, + libgnat/a-ststbo.adb, libgnat/a-ststbo.ads, + libgnat/a-ststun.adb, libgnat/a-ststun.ads, + libgnat/a-stteou.ads, libgnat/s-aoinar.ads, + libgnat/s-aomoar.ads, libgnat/s-atopex.ads, + libgnat/s-putaim.adb, libgnat/s-putaim.ads, + libgnat/s-putima.adb, libgnat/s-putima.ads: Remove pragma + Ada_2020, now redundant. + +2020-07-27 Justin Squirek <squirek@adacore.com> + + * exp_ch6.adb (Expand_Call_Helper): Modify addition of the extra + accessibility parameter to take into account the extra + accessibility of formals within the calling subprogram. + +2020-07-27 Bob Duff <duff@adacore.com> + + * exp_imgv.adb (Expand_Image_Attribute): Add Root_Type, so + constrained subtypes work. + +2020-07-27 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_prag.adb (Arg1, Arg2, Arg3): Removed. + (Arg_N): New function. + +2020-07-27 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Analyze_Object_Renaming): Allow values in Ada + 2020 mode. + +2020-07-27 Arnaud Charlet <charlet@adacore.com> + + * sem_res.adb (Resolve_Actuals): Refine 6.4.1 rules as per + AI12-0377. + +2020-07-27 Bob Duff <duff@adacore.com> + + * errout.ads, errout.adb (Error_Msg_Ada_2020_Feature): New + procedure analogous to Error_Msg_Ada_2012_Feature. + * sem_attr.adb (Analyze_Image_Attribute): Use + Error_Msg_Ada_2012_Feature and Error_Msg_Ada_2020_Feature to + indicate that Object'Image is allowed in Ada 2012, and that + 'Image is allowed for any type in Ada 2020. + +2020-07-27 Dmitriy Anisimkov <anisimko@adacore.com> + + * libgnat/a-strunb.adb (Sum, Mul, Saturated_Sum, Saturated_Mul): + New routines. Use them when resulting string size more that + length of the strings in parameters. + (Unbounded_Slice): Use "- 1" instead of "+ 1" in opposite side + of condition to avoid overflow. + * libgnat/a-strunb__shared.adb (Sum, Mul): New routines. + (Allocate): New routine with 2 parameters. Use routine above + when resulting string size more that length of the strings in + parameters. + (Aligned_Max_Length): Do not try to align to more than Natural'Last. + (Unbounded_Slice): Use "- 1" instead of "+ 1" in opposite side + of condition to avoid overflow. + +2020-07-27 Arnaud Charlet <charlet@adacore.com> + + * sem_attr.adb (Resolve_Attribute): Remove dead code. + +2020-07-27 Arnaud Charlet <charlet@adacore.com> + + * aspects.adb, atree.adb, atree.ads, checks.adb, contracts.adb, + einfo.adb, errout.adb, exp_aggr.adb, exp_attr.adb, exp_cg.adb, + exp_ch11.adb, exp_ch2.adb, exp_ch3.adb, exp_ch4.adb, + exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_ch9.adb, + exp_dbug.adb, exp_disp.adb, exp_intr.adb, exp_pakd.adb, + exp_prag.adb, exp_put_image.adb, exp_smem.adb, exp_tss.adb, + exp_unst.adb, exp_util.adb, freeze.adb, ghost.adb, gnat1drv.adb, + inline.adb, lib-writ.adb, lib-xref-spark_specific.adb, + lib-xref.adb, namet.adb, namet.ads, nlists.adb, par-ch10.adb, + par-ch2.adb, par-ch3.adb, par-ch4.adb, par-ch5.adb, par-ch6.adb, + par-prag.adb, par-util.adb, par_sco.adb, pprint.adb, + repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb, sem.adb, + sem_aggr.adb, sem_attr.adb, sem_aux.adb, sem_cat.adb, + sem_ch10.adb, sem_ch11.adb, sem_ch12.adb, sem_ch13.adb, + sem_ch3.adb, sem_ch4.adb, sem_ch5.adb, sem_ch6.adb, sem_ch7.adb, + sem_ch8.adb, sem_ch9.adb, sem_dim.adb, sem_disp.adb, + sem_dist.adb, sem_elab.adb, sem_elim.adb, sem_eval.adb, + sem_intr.adb, sem_mech.adb, sem_prag.adb, sem_res.adb, + sem_scil.adb, sem_type.adb, sem_util.adb, sem_warn.adb, + sinfo.adb, sinfo.ads, sprint.adb, styleg.adb, tbuild.adb, + treepr.adb (Nkind_In, Nam_In, Ekind_In): Removed, replaced by + membership tests. + +2020-07-27 Gary Dismukes <dismukes@adacore.com> + + * sem_prag.adb (Analyze_Pragma, Pragma_Max_Entry_Queue_Length): + Refine error message to indicate that the pragma must apply to + an entry declaration, not just an entry. + +2020-07-27 Javier Miranda <miranda@adacore.com> + + * exp_ch6.adb (Make_Build_In_Place_Iface_Call_In_Allocator): + Revert previous patch, and add a missing type conversion to + displace the pointer to the allocated object to reference the + target dispatch table. + +2020-07-27 Javier Miranda <miranda@adacore.com> + + * sem_res.adb (Resolve_Actuals): Restore restrictive check on + view conversions which required matching value of + Has_Aliased_Components of formals and actuals. Required to avoid + the regression of ACATS b460005. + +2020-07-27 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Instantiate_Package_Body): Add commentary for a + nesting issue with parent handling and private view switching. + (Switch_View): Do not skip specific private-dependent subtypes. + +2020-07-27 Patrick Bernardi <bernardi@adacore.com> + + * Makefile.rtl: Remove X86_TARGET_PAIRS for x86-lynx178elf. + +2020-07-27 Ed Schonberg <schonberg@adacore.com> + + * sem_ch13.adb (Analyze_Address_Specification_Clause): Do not + emit a warning when a constant declaration in a generic unit + overlays a generic In_Parameter. + +2020-07-27 Gary Dismukes <dismukes@adacore.com> + + * sem_ch3.adb (Check_Abstract_Overriding): Remove Scope + comparison test from test related to initial implementation of + AI12-0042, plus remove the related ??? comment. + (Derive_Subprogram): Add test requiring that the type extension + appear in the visible part of its enclosing package when + checking the overriding requirement of 7.3.2(6.1/4), as + clarified by AI12-0382. + +2020-07-27 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference) Extend + existing workaround to 'Pos. + +2020-07-27 Bob Duff <duff@adacore.com> + + * libgnat/s-rannum.ads, libgnat/s-rannum.adb: Add Put_Image. + This will be inherited by the language-defined packages + Ada.Numerics.Discrete_Random and Ada.Numerics.Float_Random. + * libgnat/a-convec.ads, libgnat/a-convec.adb: Add Put_Image. + * libgnat/s-putima.ads: Add pragma Preelaborate, so this can be + imported into containers packages. + * libgnat/s-putima.adb: Move Digit to private part; otherwise + reference to Base is illegal in Preelaborate generic. + * exp_put_image.adb (Build_Record_Put_Image_Procedure): Use the + base type. + +2020-07-23 Arnaud Charlet <charlet@adacore.com> + + * aspects.ads: Declare CUDA_Global as aspect. + * einfo.ads: Use Flag118 for the Is_CUDA_Kernel flag. + (Set_Is_CUDA_Kernel): New function. + (Is_CUDA_Kernel): New function. + * einfo.adb (Set_Is_CUDA_Kernel): New function. + (Is_CUDA_Kernel): New function. + * par-prag.adb (Prag): Ignore Pragma_CUDA_Execute and + Pragma_CUDA_global. + * rtsfind.ads: Define CUDA.Driver_Types.Stream_T and + CUDA.Vector_Types.Dim3 entities + * rtsfind.adb: Define CUDA_Descendant subtype. + (Get_Unit_Name): Handle CUDA_Descendant packages. + * sem_prag.ads: Mark CUDA_Global as aspect-specifying pragma. + * sem_prag.adb (Analyze_Pragma): Validate Pragma_CUDA_Execute and + Pragma_CUDA_Global. + * snames.ads-tmpl: Define Name_CUDA_Execute and Name_CUDA_Global. + +2020-07-23 Arnaud Charlet <charlet@adacore.com> + + * sem_ch13.ads (Same_Representation): Renamed as + Has_Compatible_Representation because now the order of the arguments + are taken into account; its formals are also renamed as Target_Type + and Operand_Type. + * sem_ch13.adb (Same_Representation): Renamed and moved to place the + routine in alphabetic order. + * sem_attr.adb (Prefix_With_Safe_Accessibility_Level): New subprogram. + (Resolve_Attribute): Check that the prefix of attribute Access + does not have a value conversion of an array type. + * sem_res.adb (Resolve_Actuals): Remove restrictive check on view + conversions which required matching value of Has_Aliased_Components of + formals and actuals. + * exp_ch4.adb (Handle_Changed_Representation): Update call to + Same_Representation. + (Expand_N_Type_Conversion): Update call to Same_Representation. + * exp_ch5.adb (Change_Of_Representation): Update call to + Same_Representation. + * exp_ch6.adb (Add_Call_By_Copy_Code): Update call to + Same_Representation. + (Expand_Actuals): Update call to Same_Representation. + (Expand_Call_Helper): Update call to Same_Representation. + +2020-07-23 Arnaud Charlet <charlet@adacore.com> + + * output.ads (Push_Output, Pop_Output): New procedures. + * output.adb (FD_Array, FD_Stack, FD_Stack_Idx): New type and vars. + (Push_Output, Pop_Output): New procedures. + +2020-07-16 Javier Miranda <miranda@adacore.com> + + * exp_ch3.adb (Expand_N_Full_Type_Declaration): Ensure a _master + declaration on limited types that might have tasks. + * exp_ch9.adb (Build_Master_Renaming): For private types, if we + are processing declarations in the private part, ensure that + master is inserted before its full declaration; otherwise the + master renaming may be inserted in the public part of the + package (and hence before the declaration of its _master + variable). + +2020-07-16 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Analyze_Subprogram_Renaming): A renames-as-body + freezes the expression of any expression function that it + renames. + +2020-07-16 Ed Schonberg <schonberg@adacore.com> + + * sem_aggr.adb (Resolve_Container_Aggregate): Add semantic + checks for indexed aggregates, including component associations + and iterated component associations. + * exp_aggr.adb (Expand_Iterated_Component): New subprogram, + subsidiary of Expand_Container_Aggreggate, used for positional, + named, and indexed aggregates. + (Aggregate_Size): New subprogram to precompute the size of an + indexed aggregate prior to call to allocate it. + (Expand_Range_Component): New subprogram so generate loop for a + component association given by a range or a subtype name in an + indexed aggregate. + +2020-07-16 Bob Duff <duff@adacore.com> + + * bindo-diagnostics.adb (Output_Invocation_Related_Suggestions): + Use Cumulative_Restrictions.Set, because Restriction_Active only + works at compile time. + +2020-07-16 Bob Duff <duff@adacore.com> + + * gnatbind.adb (Gnatbind): For No_Tasks_Unassigned_To_CPU, check + that CPU has been set on the main subprogram. + (Restriction_Could_Be_Set): Don't print + No_Tasks_Unassigned_To_CPU if it would violate the + above-mentioned rule. Up to now, all restrictions were checked + by the compiler, with the binder just checking for consistency. + But the compiler can't know which subprogram is the main, so + it's impossible to check this one at compile time. + * restrict.ads, restrict.adb: Misc refactoring. Change Warning + to Warn, for consistency, since most already use Warn. + (Set_Restriction): New convenience routine. + * sem_ch13.adb (Attribute_CPU): Check + No_Tasks_Unassigned_To_CPU. + * sem_prag.adb (Pragma_CPU): Check No_Tasks_Unassigned_To_CPU. + Misc refactoring. + * tbuild.ads, tbuild.adb (Sel_Comp): New functions for building + selected components. + +2020-07-16 Eric Botcazou <ebotcazou@adacore.com> + + * impunit.adb (Non_Imp_File_Names_95): Remove duplicate entry. + +2020-07-16 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl: replace a-numaux__x86.ads by + a-numaux__libc-x86.ads and a-numaux__x86.adb by + a-numaux__dummy.adb. + * libgnat/a-numaux__x86.ads, libgnat/a-numaux__x86.adb: Removed. + * libgnat/a-numaux__dummy.adb: New. + +2020-07-16 Ed Schonberg <schonberg@adacore.com> + + * sem_ch12.adb (Load_Parent_Of_Generic): If an ancestor is an + instance whose source appears within a formal package of the + current unit, there is no body of the ancestor needed to + complete the current generic compilation. + +2020-07-16 Doug Rupp <rupp@adacore.com> + + * libgnat/s-thread__ae653.adb (taskVarAdd): Defunct, so remove. + (Current_ATSD): Make it a TLS variable. + (OK): Move to package scope. + (System.Storage_Elements): Import and Use. + +2020-07-16 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch9.adb (Expand_N_Accept_Statement): Set Parent of the + created block entity to the created block statement. + +2020-07-16 Arnaud Charlet <charlet@adacore.com> + + * scng.adb (Scan): Detect wide characters not in NFKC. + * libgnat/a-chahan.adb, libgnat/a-chahan.ads, + libgnat/a-wichha.adb, libgnat/a-wichha.ads, + libgnat/a-wichun.adb, libgnat/a-wichun.ads, + libgnat/a-zchhan.adb, libgnat/a-zchhan.ads, + libgnat/a-zchuni.adb, libgnat/a-zchuni.ads (Is_NFKC): New. + * libgnat/s-utf_32.ads, libgnat/s-utf_32.adb (Is_UTF_32_NFKC): + New. + +2020-07-16 Bob Duff <duff@adacore.com> + + * libgnat/s-rident.ads (Restriction_Id): Add + No_Tasks_Unassigned_To_CPU. + +2020-07-16 Bob Duff <duff@adacore.com> + + * exp_aggr.adb (Max_Aggregate_Size): Use the small size of 64 + when copying is needed (for example, for the initialization of a + local variable, and for assignment statements). Use the larger + size when static allocation can be done without copying. + +2020-07-16 Bob Duff <duff@adacore.com> + + * libgnat/s-rident.ads (No_Dynamic_CPU_Assignment): New + restriction. Add it to all relevant profiles. + * sem_ch13.adb (Attribute_CPU): Check No_Dynamic_CPU_Assignment + restriction. + (Attribute_CPU, Attribute_Dispatching_Domain, + Attribute_Interrupt_Priority): Remove error checks -- these are + checked in the parser. + * sem_prag.adb (Pragma_CPU): Check No_Dynamic_CPU_Assignment + restriction. We've got a little violation of DRY here. + * sem.ads, sem_ch3.ads: Minor comment fix. + +2020-07-16 Gary Dismukes <dismukes@adacore.com> + + * sem_ch4.adb (Try_Container_Indexing): When the prefix type is + an access type, change it to the designated type, change the + prefix to an explicit dereference, and emit a ?d? warning for + the implicit dereference. Include a ??? comment questioning + whether this is the right context in which to perform the + implicit dereferencing. + +2020-07-16 Arnaud Charlet <charlet@adacore.com> + + * sem_ch13.adb (Validate_Literal_Aspect): Ensure that the + parameter is not aliased. Minor reformatting. + * sem_util.adb (Statically_Names_Object): Update comment. + +2020-07-16 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_case.adb (Build_Choice): Set Is_Static_Expression flag. + (Lit_Of): Update specification to mention Is_Static_Expression + flag. + * sem_ch13.adb (Membership_Entry): Check for N_Others_Choice. + +2020-07-16 Bob Duff <duff@adacore.com> + + * sem_ch6.adb (Null_Exclusions_Match): New function to check + that the null exclusions match, including in the case addressed + by this AI. + (Check_Conformance): Remove calls to Comes_From_Source + when calling Null_Exclusions_Match. These are not + needed, as indicated by an ancient "???" comment. + +2020-07-16 Justin Squirek <squirek@adacore.com> + + * exp_ch4.adb (Expand_N_Type_Conversion): Remove flawed test for + whether "statically deeper" accessibility rules apply to a given + target type and instead use the new routine + Statically_Deeper_Relation_Applies. + (Statically_Deeper_Relation_Applies): Created to centralize the + calculation of whether a target type within a conversion must + have static accessibility checks. + * sem_ch13.adb (Check_One_Function): Minor comment revision. + +2020-07-16 Eric Botcazou <ebotcazou@adacore.com> + + * fe.h (Is_OK_Static_Expression): Delete. + * sem_eval.ads (Is_OK_Static_Expression): Remove WARNING note. + +2020-07-16 Justin Squirek <squirek@adacore.com> + + * einfo.adb, einfo.ads (Is_Named_Access_Type): Created for + readability. + * sem_ch6.adb (Check_Return_Construct_Accessibility): Add + special cases for formals. + * sem_util.adb (Object_Access_Level): Add handling of access + attributes and named access types in the general case. + +2020-07-16 Piotr Trojanek <trojanek@adacore.com> + + * sem_case.adb (Build_Choice): Simplify. + +2020-07-16 Arnaud Charlet <charlet@adacore.com> + + * frontend.adb: Disable Initialize_Scalars on runtime files. + +2020-07-16 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_ch3.adb (Analyze_Object_Declaration): Add + Comes_From_Source call. + +2020-07-16 Javier Miranda <miranda@adacore.com> + + * exp_attr.adb (Expand_Access_To_Protected_Op): Initialize + variable Sub to Empty to avoid false positive reported by + Codepeer. + +2020-07-16 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Note_Redundant_Use): Add missing warning tag. + Do not check for redundant use clauses in predefined units to avoid + misleading warnings that may occur as part of a rtsfind load. + +2020-07-16 Javier Miranda <miranda@adacore.com> + + * exp_attr.adb (Has_By_Protected_Procedure_Prefixed_View): New + subprogram. + (Expand_Access_To_Protected_Op): Adding support for prefixed + class-wide view with By_Protected_Procedure convention. + * sem_attr.adb (Get_Convention): New subprogram. + (Get_Kind): Adapted to use Get_Convention. + * sem_ch4.adb (Try_By_Protected_Procedure_Prefixed_View): New + subprogram. + (Analyze_Selected_Component): Invoke + Try_By_Protected_Procedure_Prefixed_View. + * sem_util.ads (Is_By_Protected_Procedure): New subprogram. + * sem_util.adb (Is_By_Protected_Procedure): New subprogram. + +2020-07-16 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-ststop.ads: Fix typo. + * libgnat/s-ststop.adb (Read, Write): Fix block number + computation to avoid overflows in case of large strings. + +2020-07-16 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-genbig.adb ("**"): Remove capacity limit check. + Improve code by using an extended return. + (Normalize): Perform capacity limit check here instead which is + the centralized place where (potentially large) big integers are + allocated. + +2020-07-16 Gary Dismukes <dismukes@adacore.com> + + * exp_ch4.adb (Expand_N_Type_Conversion): Handle the case of + applying an invariant check for a conversion to a class-wide + type whose root type has a type invariant, when the conversion + appears within the immediate scope of the type and the + expression is of a specific tagged type. + * sem_ch3.adb (Is_Private_Primitive): New function to determine + whether a primitive subprogram is a private operation. + (Check_Abstract_Overriding): Enforce the restriction imposed by + AI12-0042 of requiring overriding of an inherited nonabstract + private operation when the ancestor has a class-wide type + invariant and the ancestor's private operation is visible. + (Derive_Subprogram): Set Requires_Overriding on a subprogram + inherited from a visible private operation of an ancestor to + which a Type_Invariant'Class expression applies. + +2020-07-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.adb (Find_Overlaid_Entity): Fix style in comment. + (Note_Possible_Modification): Simplify repeated calls to Ekind. + +2020-07-15 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb (Flatten): Adjust description. + (Convert_To_Positional): Remove obsolete ??? comment and use + Compile_Time_Known_Value in the final test. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * par-ch4.adb (P_Iterated_Component_Association): Extended to + recognzize the similar Iterated_Element_Association. This node + is only generated when an explicit Key_Expression is given. + Otherwise the distinction between the two iterated forms is done + during semantic analysis. + * sinfo.ads: New node N_Iterated_Element_Association, for + Ada202x container aggregates. New field Key_Expression. + * sinfo.adb: Subprograms for new node and newn field. + * sem_aggr.adb (Resolve_Iterated_Component_Association): Handle + the case where the Iteration_Scheme is an + Iterator_Specification. + * exp_aggr.adb (Wxpand_Iterated_Component): Handle a component + with an Iterated_Component_Association, generate proper loop + using given Iterator_Specification. + * exp_util.adb (Insert_Axtions): Handle new node as other + aggregate components. + * sem.adb, sprint.adb: Handle new node. + * tbuild.adb (Make_Implicit_Loop_Statement): Handle properly a + loop with an Iterator_ specification. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-stposu.adb (Allocate_Any_Controlled): Fix logic in + lock/unlock. + +2020-07-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.adb (Is_Object_Reference): Return True on + N_Target_Name. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): Add proper + handling of Aspect_Predicate_Failure, consistent with + Check_Aspect_At_Freeze_Point. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * sem_ch13.adb (Check_Aspect_Too_Late): Mention -gnat2020 switch + in error message. + +2020-07-15 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (Delayed Freezing and Elaboration): Adjust description. + * freeze.adb (Freeze_Object_Declaration): Likewise. + * sem_ch3.adb (Delayed_Aspect_Present): Likewise. Do not return + true for Alignment. + * sem_ch13.adb (Analyze_Aspect_Specifications): Do not always delay + for Alignment. Moreover, for Alignment and various Size aspects, + do not delay if the expression is an attribute whose prefix is the + Standard package. + +2020-07-15 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch6.adb (Requires_Atomic_Or_Volatile_Copy): Return false + inside an initialization procedure. + +2020-07-15 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_util.adb (Is_Renaming): Add ekind checks. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * doc/gnat_ugn/gnat_utility_programs.rst: Remove doc on obsolete + tools. + * gnat_ugn.texi: Regenerate. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * sem_res.adb (Resolve_Type_Conversion): Protect against null + entity. Add proper tag for -gnatwr warning. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * sem_ch6.adb (Analyze_Procedure_Call): Detect use of operators + in a procedure call. + * sem_util.adb: Minor edit. + +2020-07-15 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Apply scalar + range checks against the base type of an index type, not against + the index type itself. + +2020-07-15 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (Delayed Freezing and Elaboration): Minor tweaks. + Document the discrepancy between the aspect and the non-aspect + cases for alignment settings in object declarations. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * exp_ch3.adb (Freeze_Type): Remove warning in expander, + replaced by a corresponding error in sem_ch13.adb. Replace + RTE_Available by RTU_Loaded to avoid adding unnecessary + dependencies. + * sem_ch13.adb (Associate_Storage_Pool): New procedure. + (Analyze_Attribute_Definition_Clause + [Attribute_Simple_Storage_Pool| Attribute_Storage_Pool]): Call + Associate_Storage_Pool to add proper legality checks on + subpools. + +2020-07-15 Yannick Moy <moy@adacore.com> + + * libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads, + libgnat/a-cbhama.adb, libgnat/a-cbhama.ads, + libgnat/a-cbhase.adb, libgnat/a-cbhase.ads, + libgnat/a-cbmutr.adb, libgnat/a-cbmutr.ads, + libgnat/a-cborma.adb, libgnat/a-cborma.ads, + libgnat/a-cborse.adb, libgnat/a-cborse.ads, + libgnat/a-cbprqu.adb, libgnat/a-cbprqu.ads, + libgnat/a-cbsyqu.adb, libgnat/a-cbsyqu.ads, + libgnat/a-cdlili.adb, libgnat/a-cdlili.ads, + libgnat/a-cidlli.adb, libgnat/a-cidlli.ads, + libgnat/a-cihama.adb, libgnat/a-cihama.ads, + libgnat/a-cihase.adb, libgnat/a-cihase.ads, + libgnat/a-cimutr.adb, libgnat/a-cimutr.ads, + libgnat/a-ciorma.adb, libgnat/a-ciorma.ads, + libgnat/a-ciormu.adb, libgnat/a-ciormu.ads, + libgnat/a-ciorse.adb, libgnat/a-ciorse.ads, + libgnat/a-cohama.adb, libgnat/a-cohama.ads, + libgnat/a-cohase.adb, libgnat/a-cohase.ads, + libgnat/a-coinve.adb, libgnat/a-coinve.ads, + libgnat/a-comutr.adb, libgnat/a-comutr.ads, + libgnat/a-convec.adb, libgnat/a-convec.ads, + libgnat/a-coorma.adb, libgnat/a-coorma.ads, + libgnat/a-coormu.adb, libgnat/a-coormu.ads, + libgnat/a-coorse.adb, libgnat/a-coorse.ads: Add SPARK_Mode => + Off. + +2020-07-15 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch3.adb (Delayed_Aspect_Present): Fix oversight in loop. + * freeze.adb (Freeze_Object_Declaration): Use Declaration_Node + instead of Parent for the sake of consistency. + +2020-07-15 Javier Miranda <miranda@adacore.com> + + * sem_attr.adb (Resolve_Attribute): Resolve overloaded + N_Selected_Component prefix of 'Access. Required to handle + overloaded prefixed view of protected subprograms. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * doc/gnat_ugn/about_this_guide.rst: Remove old section and + update for Ada 202x. + * doc/gnat_ugn/getting_started_with_gnat.rst: Add a system + requirements section. Remove obsolete section and minimal + rewording on the getting started section. + * gnat_ugn.texi: Regenerate. + +2020-07-15 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch5.adb (Expand_Assign_Array): Use short-circuit operator + (style). + * sem_res.adb (Resolve_Indexed_Component): Fix style in comment. + * sem_util.adb (Is_Effectively_Volatile_Object): Handle slices + just like indexed components; handle qualified expressions and + type conversions lie in Is_OK_Volatile_Context. + (Is_OK_Volatile_Context): Handle qualified expressions just like + type conversions. + +2020-07-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Atomic_Components): Simplify with Ekind_In. + (Complex_Representation): Fix type of E_Id, which just like when + for pragma Atomic_Components will hold an N_Identifier node, not + an entity. + * sem_util.adb (Is_Effectively_Volatile): Refactor to avoid + unnecessary computation. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * inline.adb, inline.ads + (Inline_Static_Expression_Function_Call): Renamed + Inline_Static_Function_Call. + * sem_ch13.adb (Analyze_Aspect_Static): Allow static intrinsic + imported functions under -gnatX. + * sem_util.ads, sem_util.adb (Is_Static_Expression_Function): + Renamed Is_Static_Function. + (Is_Static_Expression_Function_Call): Renamed + Is_Static_Function_Call. + * sem_ch6.adb, sem_elab.adb, sem_res.adb: Update calls to + Is_Static_Function*. + * sem_eval.adb (Fold_Dummy, Eval_Intrinsic_Call, Fold_Shift): + New. + (Eval_Call): Add support for intrinsic calls, code refactoring. + (Eval_Entity_Name): Code refactoring. + (Eval_Logical_Op): Update comment. + (Eval_Shift): Call Fold_Shift. Update comments. + * par-prag.adb (Par [Pragma_Extensions_Allowed]): Set + Ada_Version to Ada_Version_Type'Last to handle + Extensions_Allowed (On) consistently. + * opt.ads (Extensions_Allowed): Update documentation. + * sem_attr.adb: Update comment. + * doc/gnat_rm/implementation_defined_pragmas.rst: Update + documentation of Extensions_Allowed. + * gnat_rm.texi: Regenerate. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * sem_aggr.adb (Resolve_Iterated_Component_Association): Ensure + Typ is never accessed uninitialized. + +2020-07-15 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/representation_clauses_and_pragmas.rst: Fix typo. + * gnat_rm.texi: Regenerate. + * libgnat/s-secsta.ads (Memory_Alignment): Likewise. + +2020-07-15 Gary Dismukes <dismukes@adacore.com> + + * exp_ch6.adb: Add a comma and fix a typo (machinary => + machinery) in comment. + * exp_aggr.adb: Reformat, fix capitalization, and add a couple + of commas in a comment. Adjust columns in several code + fragments. + * sem_aggr.adb: Reformat and add a comma in a comment. + +2020-07-15 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch9.adb (Expand_N_Timed_Entry_Call): Use the Sloc of + the delay statement in the expansion. + +2020-07-15 Ed Schonberg <schonberg@adacore.com> + + * sem_aggr.adb (Resolve_Iterated_Component_Association): New + procedure, internal to Resolve_Container_Aggregate, to complete + semantic analysis of Iterated_Component_Associations. + * exp_aggr.adb (Expand_Iterated_Component): New procedure, + internal to Expand_Container_Aggregate, to expand the construct + into an implicit loop that performs individual insertions into + the target aggregate. + +2020-07-15 Justin Squirek <squirek@adacore.com> + + * exp_ch6.adb (Make_Build_In_Place_Call_Allocator): Normalize + the associated node for internally generated objects to be like + their SOAAT counter-parts. + +2020-07-15 Arnaud Charlet <charlet@adacore.com> + + * libgnat/g-socket.adb (Wait_On_Socket): Fix potentially + uninitialized variable. + +2020-07-10 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch8.adb (Find_Direct_Name): Fix code to match the comment. + +2020-07-10 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Address>: + Issue an unconditional warning for an overlay that changes the + scalar storage order. + +2020-07-10 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch8.adb (Is_Actual_Parameter): Fix processing when parent + is a procedure call statement; extend comment. + +2020-07-10 Bob Duff <duff@adacore.com> + + * sem_res.adb (Resolve_Expression_With_Actions): Check the rules + of AI12-0368, and mark the declare expression as static or known + at compile time as appropriate. + * sem_ch4.adb: Minor reformatting. + * libgnat/a-stoufo.ads, libgnat/a-stoufo.adb: Allow up to 9 + replacement parameters. I'm planning to use this in the test + case for this ticket. + +2020-07-10 Ed Schonberg <schonberg@adacore.com> + + * exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Create a + proper signature when the access type denotes a parameterless + subprogram. + * exp_ch6.adb (Expand_Call): Handle properly a parameterless + indirect call when the corresponding access type has contracts. + +2020-07-10 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb + (Convert_To_Positional): Add Dims local variable + and pass it in calls to Is_Flat and Flatten. + (Check_Static_Components): Pass Dims in call to + Is_Static_Element. + (Nonflattenable_Next_Aggr): New predicate. + (Flatten): Add Dims parameter and Expr local variable. Call + Nonflattenable_Next_Aggr in a couple of places. In the case + when an Others choice is present, check that the element is + either static or a nested aggregate that can be flattened, + before disregarding the replication limit for elaboration + purposes. Check that a nested array is flattenable in the case + of a multidimensional array in any position. Remove redundant + check in the Others case and pass Dims in call to + Is_Static_Element. Use Expr variable. + (Is_Flat): Change type of Dims parameter from Int to Nat. + (Is_Static_Element): Add Dims parameter. Replace tests on + literals with call to Compile_Time_Known_Value. If everything + else failed and the dimension is 1, preanalyze the expression + before calling again Compile_Time_Known_Value on it. Return + true for null. + (Late_Expansion): Do not expand further if the assignment to the + target can be done directly by the back end. + +2020-07-10 Arnaud Charlet <charlet@adacore.com> + + * osint-c.adb (Set_File_Name): Preserve casing of file. + * osint.adb (File_Names_Equal): New. + (Executable_Name): Use File_Equal instead of + Canonical_Case_File_Name. + +2020-07-10 Pascal Obry <obry@adacore.com> + + * libgnat/g-socket.adb (Wait_On_Socket): Fix memory leaks and + file descriptor leaks. A memory leak was created each time the + routine was called without a selector (Selector = Null). Also, + in case of exception in the routine a memory leak and descriptor + leak was created as the created file selector was not closed. + +2020-07-10 Pascal Obry <obry@adacore.com> + + * libgnat/g-socket.adb: Minor style fixes. + +2020-07-10 Javier Miranda <miranda@adacore.com> + + * sem_util.adb + (Immediate_Context_Implies_Is_Potentially_Unevaluated): New + subprogram. + (Is_Potentially_Unevaluated): Do not stop climbing the tree on + the first candidate subexpression; required to handle nested + expressions. + +2020-07-10 Gary Dismukes <dismukes@adacore.com> + + * exp_aggr.adb, exp_spark.adb, sem_ch13.ads, sem_ch13.adb, + snames.ads-tmpl: Minor reformatting and typo fixes. + +2020-07-10 Yannick Moy <moy@adacore.com> + + * sem_util.adb (Has_Enabled_Property): Add handling of + non-variable objects. + +2020-07-10 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Check_Completion): Refactor chained + if-then-elsif-... statement to be more like a case + statement (note: we can't simply use case statement because of + Is_Intrinsic_Subprogram in the first condition). + +2020-07-10 Piotr Trojanek <trojanek@adacore.com> + + * einfo.ads (E_Protected_Object): Enumeration literal removed. + * lib-xref.ads (Xref_Entity_Letters): Remove reference to + removed literal. + * sem_ch3.adb (Check_Completion): Likewise. + * sem_util.adb (Has_Enabled_Property): Likewise. + +2020-07-10 Arnaud Charlet <charlet@adacore.com> + + * exp_aggr.adb (Max_Aggregate_Size): Use small limit for + aggregate inside subprograms. + * sprint.adb (Sprint_Node_Actual [N_Object_Declaration]): Do not + print the initialization expression if the No_Initialization + flag is set. + * sem_util.ads, sem_util.adb (Predicate_Enabled): New. + * exp_ch4.adb (Expand_N_Type_Conversion): Code cleanup and apply + predicate check consistently. + * exp_ch6.adb (Expand_Actuals.By_Ref_Predicate_Check): Ditto. + * sem_ch3.adb (Analyze_Object_Declaration): Ditto. + * exp_ch3.adb (Build_Assignment): Revert handling of predicate + check for allocators with qualified expressions, now handled in + Freeze_Expression directly. + * sem_aggr.adb: Fix typos. + * checks.adb: Code refactoring: use Predicate_Enabled. + (Apply_Predicate_Check): Code cleanup. + * freeze.adb (Freeze_Expression): Freeze the subtype mark before + a qualified expression on an allocator. + * exp_util.ads, exp_util.adb (Within_Internal_Subprogram): + Renamed Predicate_Check_In_Scope to clarify usage, refine + handling of predicates within init procs which should be enabled + when the node comes from source. + * sem_ch13.adb (Freeze_Entity_Checks): Update call to + Predicate_Check_In_Scope. + +2020-07-10 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_Array_Comparison): Reformat. + (Expand_Concatenate): Use standard size values directly and use + Standard_Long_Long_Unsigned instead of RE_Long_Long_Unsigned. + (Expand_Modular_Op): Use Standard_Long_Long_Integer in case the + modulus is larger than Integer. + (Expand_N_Op_Expon): Use standard size value directly. + (Narrow_Large_Operation): Use Uint instead of Nat for sizes and + use a local variable for the size of the type. + (Get_Size_For_Range): Return Uint instead of Nat. + (Is_OK_For_Range): Take Uint instead of Nat. + +2020-07-10 Javier Miranda <miranda@adacore.com> + + * exp_ch6.adb (Make_Build_In_Place_Iface_Call_In_Allocator): + Build the internal anonymous access type using as a reference + the designated type imposed by the context (instead of using the + return type of the called function). + +2020-07-10 Yannick Moy <moy@adacore.com> + + * sem_res.adb (Resolve_Actuals): Protect call to + Is_Valued_Procedure. + +2020-07-10 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Process_Discriminants): Revert recent change to + location of Set_Ekind; detect effectively volatile discriminants + by their type only. + +2020-07-10 Joffrey Huguet <huguet@adacore.com> + + * libgnat/a-nbnbin.ads, libgnat/a-nbnbre.ads: Add global + contract (Global => null) to all functions. + +2020-07-10 Ed Schonberg <schonberg@adacore.com> + + * aspects.ads: Add Aspect_Aggregate. + * exp_aggr.adb (Expand_Container_Aggregate): Expand positional + container aggregates into separate initialization and insertion + operations. + * sem_aggr.ads (Resolve_Container_Aggregate): New subprogram. + * sem_aggr.adb (Resolve_Container_Aggregate): Parse aspect + aggregate, establish element types and key types if present, and + resolve aggregate components. + * sem_ch13.ads (Parse_Aspect_Aggregate): Public subprogram used + in validation, resolution and expansion of container aggregates + * sem_ch13.adb + (Parse_Aspect_Aggregate): Retrieve names of primitives specified + in aspect specification. + (Validate_Aspect_Aggregate): Check legality of specified + operations given in aspect specification, before nane + resolution. + (Resolve_Aspect_Aggregate): At freeze point resolve operations + and verify that given operations have the required profile. + * sem_res.adb (Resolve): Call Resolve_Aspect_Aggregate if aspect + is present for type. + * snames.ads-tmpl: Add names used in aspect Aggregate: Empty, + Add_Named, Add_Unnamed, New_Indexed, Assign_Indexed. + +2020-07-10 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-shabig.o. + * libgnat/s-shabig.ads: New file to share definitions. + * libgnat/s-genbig.ads, libgnat/s-genbig.adb: Reorganized to + make it more generic and flexible in terms of memory allocation + and data structure returned. + (To_String): Moved to System.Generic_Bignums to allow sharing + this code. + (Big_And, Big_Or, Big_Shift_Left, Big_Shift_Right): New. + * libgnat/s-bignum.adb, libgnat/s-bignum.ads: Adapt to new + System.Generic_Bignums spec. + * libgnat/a-nbnbin.adb: Likewise. + (To_String): Moved to System.Generic_Bignums to allow sharing + this code. + * libgnat/a-nbnbre.adb (Normalize): Fix handling of Num = 0 + leading to an exception. + +2020-07-10 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (Freeze_Expr_Types): Replace call to Find_Aspect + with call to Find_Value_Of_Aspect and adjust accordingly. + +2020-07-10 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.adb (Write_Field24_Name): Handle E_Loop_Parameter. + * freeze.adb (Freeze_Expr_Types): Freeze the iterator type used as + Default_Iterator of the name of an N_Iterator_Specification node. + +2020-07-10 Eric Botcazou <ebotcazou@adacore.com> + + * checks.adb (Determine_Range): Deal with Min and Max attributes. + * exp_ch6.adb (Expand_Call_Helper): When generating code to pass + the accessibility level to the caller in the case of an actual + which is an if-expression, also remove the nodes created after + the declaration of the dummy temporary. + * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use Natural as + the type of the minimum accessibility level object. + +2020-07-10 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Process_Discriminants): Set Ekind of the + processed discriminant entity before passing to + Is_Effectively_Volatile, which was crashing on a failed + assertion. + * sem_prag.adb (Analyze_External_Property_In_Decl_Part): Prevent + call to No_Caching_Enabled with entities other than variables, + which was crashing on a failed assertion. + (Analyze_Pragma): Style cleanups. + * sem_util.adb (Is_Effectively_Volatile): Enforce comment with + an assertion; prevent call to No_Caching_Enabled with entities + other than variables. + (Is_Effectively_Volatile_Object): Only call + Is_Effectively_Volatile on objects, not on types. + (No_Caching_Enabled): Enforce comment with an assertion. + +2020-07-10 Yannick Moy <moy@adacore.com> + + * debug.adb: Update comments to free usage of -gnatdF. + +2020-07-10 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Refactored from + Expand_SPARK_N_Attribute_Reference; rewrite into N_Aggregate or + N_Delta_Aggregate depending on what is being rewritten. + (Expand_SPARK_N_Delta_Aggregate): New routine to expand + delta_aggregate. + (Expand_SPARK_N_Attribute_Reference): Call the refactored + routine. + +2020-07-10 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Fix + expansion of attribute Update. + +2020-07-10 Arnaud Charlet <charlet@adacore.com> + + * sem.adb (Walk_Library_Items): Fix handling of Ghost units. + +2020-07-08 Eric Botcazou <ebotcazou@adacore.com> + + * tracebak.c [generic implementation]: Add pragma GCC diagnostic + to disable warning about __builtin_frame_address. + +2020-07-08 Dmitriy Anisimkov <anisimko@adacore.com> + + * socket.c [_WIN32] (__gnat_minus_500ms): Parentheses around && + operations. Remove notes about TN in comment. + +2020-07-08 Eric Botcazou <ebotcazou@adacore.com> + + * adaint.h (__gnat_expect_portable_execvp): Fix prototype. + (__gnat_expect_poll): Likewise. + * expect.c [_WIN32]: Include adaint.h file. + (__gnat_waitpid): Remove useless variable. + (__gnat_expect_portable_execvp): Add ATTRIBUTE_UNUSED on parameter. + * raise-gcc.c [SEH] (__gnat_personality_v0): Add ATTRIBUTE_UNUSED. + * socket.c [_WIN32] (__gnat_getservbyport): Add ATTRIBUTE_UNUSED on + a couple of parameters. + (__gnat_gethostbyname): Likewise. + (__gnat_gethostbyaddr): Likewise. + (__gnat_getservbyname): Likewise. + (__gnat_last_socket_in_set): Use variables local to loops. + (__gnat_socket_ioctl): Cast 3rd parameter to proper type if _WIN32. + (__gnat_inet_pton): Cast 2nd parameter to proper type if _WIN32. + * sysdep.c (__gnat_localtime_tzoff): Remove superfluous test. + * terminals.c [_WIN32]: Include io.h file. + (is_gui_app): Remove useless variables and fix unsigned comparison. + (nt_spawnve): Add ATTRIBUTE_UNUSED on first parameter. Initialize a + local variable and remove others that are useless. Add missing cast + (__gnat_setup_child_communication): Remove useless variable and call + Use proper formatting string in call to sprintf. + (__gnat_setup_parent_communication): Cast to proper type. + (find_child_console): Fix prototype and remove useless variable. + (find_process_handle): Likewise. + (_gnat_interrupt_process): Move to after __gnat_interrupt_pid. + (__gnat_reset_tty): Add ATTRIBUTE_UNUSED on parameter, remove return + (__gnat_setup_winsize): Add ATTRIBUTE_UNUSED on all parameters. + +2020-07-08 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_N_Allocator): In the subtype mark case, do + not apply constraint checks if the No_Initialization flag is set. + +2020-07-08 Javier Miranda <miranda@adacore.com> + + * exp_ch9.adb + (Build_Class_Wide_Master): Insert the declaration of _Master + before its use; required to avoid assertion failure in the + backend. + +2020-07-08 Arnaud Charlet <charlet@adacore.com> + + * libgnat/i-cexten.ads (long_long, unsigned_long_long): Now + subtypes of Interfaces.C types. + * libgnat/a-calcon.ads, libgnat/a-calcon.adb + (To_Unix_Nano_Time): Use Interfaces.C.long_long instead of + Interfaces.C.Extensions.long_long. + +2020-07-08 Vasiliy Fofanov <fofanov@adacore.com> + + * debug.adb: Document new switch. + * exp_ch6.adb (Warn_BIP): New function that warns if the switch + is on. Call it from Make_Build_In_Place_* functions. Warn_BIP + is not needed in Make_Build_In_Place_Iface_*, because those call + Make_Build_In_Place_Call_In_Object_Declaration or similar. + +2020-07-08 Piotr Trojanek <trojanek@adacore.com> + + * erroutc.adb (Matches): Fix comments. + +2020-07-08 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (Has_Decl_In_List): New predicate to check that an + entity is declared in a list of nodes. + (Freeze_Expression): Use it to deal with Expression_With_Actions, + short-circuit expression, if- and case-expression and ensure that + the freeze node is put onto their Actions list if the entity is + declared locally. + +2020-07-08 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (In_Expanded_Body): Return true for the body of a + generated predicate function. + +2020-07-08 Gary Dismukes <dismukes@adacore.com> + + * sem_attr.adb: Remove hyphens in comments, plus minor code + reformatting. + * sem_ch13.adb: Fix typo (that => than). + * sem_util.adb: Add hyphen in comment ("class-wide"). + +2020-07-08 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (Freeze_Array_Type): Add comment on implementation + choice for byte-packed array types. + +2020-07-08 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Correct prefix of 'Result + this prefix is a generic function but the enclosing aspect or + pragma is attached to its instance. + * sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Analyze + generic subprogram formal parameters (including the implicit + result of a generic function) and only then analyse its aspects, + because with Relaxed_Initialization the aspect expression might + refer to those formal parameters. + * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Accept + aspect on generic subprograms; install formal parameters of a + generic subprogram but not formal parameters of the generic unit + itself (the previous code was inspired by aspects Post and + Depends, where both kinds of formals are allowed). + * sem_util.ads (Enter_Name): Fix name of a subprogram referenced + in comment. + +2020-07-08 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Call + Analyze_Aspect_Specifications after setting Ekind of the + analyzed entity. + * sem_ch13.adb (Analyze_Aspect_Yield): Remove minimal decoration + of generic subprograms. + +2020-07-08 Arnaud Charlet <charlet@adacore.com> + + * sem_prag.adb (Process_Inline): Check for duplicate + pragma+aspect Inline. Minor code cleanup. + (Check_Duplicate_Pragma): Add warning for duplicate + pragma [No_]Inline under -gnatwr. + * sinfo.ads, sinfo.adb (Next_Rep_Item): Allow N_Null_Statement + which can appear when a pragma is rewritten. + * sem_util.ads, sem_util.adb, bindo-writers.adb: Fix bad + copy/paste now flagged. + * libgnat/s-mmap.ads: Remove redundant pragma Inline. + +2020-07-08 Ed Schonberg <schonberg@adacore.com> + + * sem_util.adb (Build_Class_Wide_Clone_Body): Update entities to + refer to the right spec. + +2020-07-08 Bob Duff <duff@adacore.com> + + * sem_ch13.adb (Predicate_Failure): Check that the type has + predicates. Remove the setting of Has_Delayed_Aspects and + Freeze_Node, because (if the code is legal) it should have + already been done by the predicate aspect. + +2020-07-08 Gary Dismukes <dismukes@adacore.com> + + * par-ch4.adb (P_Iterated_Component_Association): Typo + corrections. + +2020-07-08 Ed Schonberg <schonberg@adacore.com> + + * par.adb (P_Iterator_Specification): Make public for use in + other parser subprograms. + * par-ch4.adb (P_Iterated_Component_Association): In Ada_2020, + recognize use of Iterator_Specification in an element iterator. + To simplify disambiguation between the two iterator forms, mark + the component association as carrying an Iterator_Specification + only when the element iterator (using "OF") is used. + * par-ch5.adb (P_Loop_Parameter_Specification): In Ada_2020, + parse iterator filter when present. + (P_Iterator_Specification): Ditto. Remove declaration of + P_Iterator_Specification, now in parent unit. + * exp_ch5.adb (Expand_N_Loop_Statement): Apply Iterator filter + when present. + (Expand_Iterator_Loop_Over_Array): Ditto. + (Expand_Iterator_Loop_Over_Container): Ditto. + * sem_aggr.adb (Resolve_Array_Aggregate): Emit error nessage if + an iterated component association includes a iterator + specificcation with an element iterator, i.e. one that uses the + OF keyword. + * sem_ch5.adb (Analyze_Iterator_Specification): Analyze Iterator + filter when present. + (Analyze_Loop_Parameter_Specification): Ditto. + * sinfo.adb: Suprogram bodies for new syntactic element + Iterator_Filter. + * sinfo.ads: Add Iterator_Filter to relevant nodes. Structure + of Component_Association and Iteroted_Component_Association + nodes is modified to take into account the possible presence of + an iterator specification in the latter. + +2020-07-08 Yannick Moy <moy@adacore.com> + + * sem_util.ads, sem_util.adb (Is_Attribute_Loop_Entry): New + function for GNATProve. + +2020-07-08 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_ch13.adb (Analyze_Record_Representation_Clause, + Check_Record_Representation_Clause): Add expected and actual + size to error message. + +2020-07-08 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.ads, sem_util.adb (Safe_To_Capture_Value): Return + True for in-parameters. + +2020-07-08 Justin Squirek <squirek@adacore.com> + + * exp_attr.adb (Expand_Attribute): Set + Stores_Attribute_Old_Prefix to generated renamings of 'Old + constants for later use in generating finalization routines. + * exp_ch7.adb (Build_Finalizer): Minor reformatting. Use "or + else" operators. + +2020-07-08 Gary Dismukes <dismukes@adacore.com> + + * exp_ch6.adb (Expand_Simple_Function_Return): Remove ugly code + that was copying the return expression, resetting Analyzed + flags, etc. for the return expression of static expression + functions. + * inline.adb (Inline_Static_Expression_Function_Call): Set the + Parent of the copied expression to that of the call. This avoids + a blowup in Insert_Actions when GNATprove_Mode is set and there + are nested SEF calls. Add ??? comment. + * sem_ch6.adb (Analyze_Expression_Function): In the case of a + static expression function, create a new copy of the expression + and replace the function's expression with the copy; the + original expression is used in the expression function's body + and will be analyzed and rewritten, and we need to save a clean + copy for later use in processing static calls to the function. + This allows removing the kludgy code that was in + Expand_Simple_Function_Return. + * sem_eval.adb (Eval_Qualified_Expression): Return immediately + if any errors have been posted on the qualified expression, to + avoid blowups when GNATprove_Mode is enabled (or with -gnatd.F), + since illegal static expressions are handled differently in that + case and attempting to fold such expressions would fail. + +2020-07-08 Eric Botcazou <ebotcazou@adacore.com> + + * repinfo.adb (Compute_Max_Length): Skip hidden discriminants. + (List_Record_Layout): Likewise. + (List_Structural_Record_Layout): Use First_Discriminant instead + of First_Stored_Discriminant and Next_Discriminant instead of + Next_Stored_Discriminant to walk the list of discriminants. + +2020-07-08 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Analyze + optional boolean expressions. + * sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): Adapt + query; update comment. + +2020-07-08 Piotr Trojanek <trojanek@adacore.com> + + * einfo.ads (Current_Value): Fix typo in comment. + * exp_ch2.adb (Expand_Current_Value): Remove unnecessary "Start + of processing ..." comment. + * exp_util.adb (Set_Entity_Current_Value): Fix unbalanced paren + in comment. + (Get_Current_Value_Condition): Fix layout in comment. + * sem_ch5.adb (Analyze_Cond_Then): Replace commented condition + with pragma Assert. + +2020-07-08 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch5.adb (Expand_N_If_Statement): Detect True/False + prefixed with Standard. + +2020-07-08 Bob Duff <duff@adacore.com> + + * sem_ch13.adb (Analyze_Aspect_Specifications): Add freeze node + for the Underlying_Full_View if it exists. The freeze node is + what triggers the generation of the predicate function. + * freeze.adb: Minor reformatting. + +2020-07-08 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Narrow_Large_Operation): Use the base type instead + of the first subtype of standard integer types as narrower type. + +2020-07-07 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (Freeze_Array_Type): Use Ctyp more consistently. + Move code setting the alignment in the non-packed case to... + * layout.adb (Layout_Type): ...here. + +2020-07-07 Bob Duff <duff@adacore.com> + + * treepr.adb (Print_Node): Add code to test Is_Extension. + +2020-07-07 Arnaud Charlet <charlet@adacore.com> + + * sem_ch4.adb (Try_Container_Indexing): Add ??? comment. Protect + against malformed tree in case of errors. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * einfo.adb, sem_ch10.adb, sem_ch12.adb, sem_ch8.adb: Use + Is_Generic_Subprogram. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch8.adb (Analyze_Use_Package): Replace low-level, + error-prone Ekind_In tests with high-level Is_Generic_Subprogram + and Is_Subprogram. + +2020-07-07 Arnaud Charlet <charlet@adacore.com> + + * sem_ch6.adb (Check_Formal_Subprogram_Conformance): New + subprogram to handle checking without systematically emitting an + error. + (Check_Conformance): Update call to + Check_Formal_Subprogram_Conformance and fix handling of Conforms + and Errmsg parameters. + +2020-07-07 Arnaud Charlet <charlet@adacore.com> + + * exp_ch4.adb (Tagged_Membership): Generate a call to + CW_Membership instead of using Build_CW_Membership. + (Expand_N_In): Remove wrong handling of null access types and + corresponding comment. + * exp_intr.adb (Expand_Dispatching_Constructor_Call): Generate a + call to CW_Membership instead of using Build_CW_Membership. + * rtsfind.ads: Add CW_Membership. + * exp_atag.ads, exp_atag.adb (Build_CW_Membership): Removed. + * einfo.ads: Fix typo. + * libgnat/a-tags.ads, libgnat/a-tags.adb (CW_Membership): Moved + back to spec. + +2020-07-07 Ed Schonberg <schonberg@adacore.com> + + * exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Create + proper subprogram specification for body, using names in the + subprogram declaration but distinct entities. + * exp_ch6.adb (Expand_Call): If this is an indirect call + involving a subprogram wrapper, insert pointer parameter in list + of actuals with a parameter association, not as a positional + parameter. + +2020-07-07 Justin Squirek <squirek@adacore.com> + + * exp_ch6.adb (Expand_Branch): Verify the original node is a + conditional expression before recursing further. + (Insert_Level_Assign): Transform assertion into an explicit + raise. + +2020-07-07 Steve Baird <baird@adacore.com> + + * sem_attr.adb (Eval_Attribute): Generalize static evaluation of + Size attribute references to also handle + Max_Size_In_Storage_Elements references. + +2020-07-07 Javier Miranda <miranda@adacore.com> + + * sem_util.adb (Is_Potentially_Unevaluated): Code cleanup. + +2020-07-07 Eric Botcazou <ebotcazou@adacore.com> + + * checks.ads (Expander Routines): Update the description of the + Do_Range_Check mechanism. + * checks.adb (Selected_Range_Checks): Fix typo. + * exp_ch9.adb: Add with and use clause for Checks. + (Actual_Index_Expression): Generate a range check if requested. + (Entry_Index_Expression): Likewise. + * sem_attr.adb (Resolve_Attribute) <Attribute_Count>: Call + Apply_Scalar_Range_Check instead of Apply_Range_Check. + * sem_ch9.adb (Analyze_Accept_Statement): Likewise. + * sem_res.adb (Resolve_Entry): Likewise, after having set the + actual index type on the prefix of the indexed component. + (Resolve_Indexed_Component): Remove useless conditional construct. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * contracts.adb (Analyze_Entry_Or_Subprogram_Contract, + Process_Preconditions_For): Freeze expression that has been + relocated to pragma Precondition, not the expression which is + still in the aspect. + +2020-07-07 Arnaud Charlet <charlet@adacore.com> + + * sem_ch6.adb (Check_Conformance): Remove unnecessary (and + wrong) code. + * sem_ch8.adb (Check_Null_Exclusion): Post error at proper + location. Introduce new helper Null_Exclusion_Mismatch and fix + implementation wrt formal subprograms used in generic bodies. + (Analyze_Subprogram_Renaming): Fix missing setting of + Error_Msg_Sloc. + (Analyze_Object_Renaming): Replace "in Anonymous_Access_Kind" by + Is_Anonymous_Access_Type. + * sem_util.adb (Has_Null_Exclusion): Fix handling of + N_Parameter_Specification. + * sem_ch12.adb (Instantiate_Object): Replace "in + Anonymous_Access_Kind" by Is_Anonymous_Access_Type. + +2020-07-07 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb (Freeze_Expr_Types): Freeze the designated type of + the explicit dereference. + +2020-07-07 Javier Miranda <miranda@adacore.com> + + * sem_util.adb (Is_Potentially_Unevaluated): Protect reading + attribute Etype. + +2020-07-07 Bob Duff <duff@adacore.com> + + * libgnat/g-catiio.adb (Value, Parse_ISO_8601): Unsuppress + checks, and don't rely on 'Valid. + +2020-07-07 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl: Remove dead code. + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: + Document gnatbind -xdr switch. + * gnat_ugn.texi: Regenerate. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst + (Validity Checking): Add "p" to the list of switches enabled by + -gnatVa. + * gnat_ugn.texi: Regenerate. + +2020-07-07 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Add call + to Check_Restriction_No_Specification_Of_Aspect. + * sem_prag.adb (Analyze_Pragma): Likewise. + * restrict.ads (Check_Restriction_No_Specification_Of_Aspect): + Mention possible new node kinds in documentation. + * restrict.adb (Check_Restriction_No_Specification_Of_Aspect): + Retrieve aspect id from different fields if given node is an + N_Pragma or an N_Attribute_Definition_Clause. + +2020-07-07 Gary Dismukes <dismukes@adacore.com> + + * contracts.adb (Add_Invariant_And_Predicate_Checks): Relax the + condition for doing invariant checks so that in-mode parameters + of procedures are also checked (required by AI05-0289, and + restricted to procedures by AI12-0044). This is done in a + procedure's nested postconditions procedure. + * exp_ch6.adb (Expand_Actuals): Also perform postcall invariant + checks for in parameters of procedures (but not functions). + Moved invariant-checking code to end of Expand_Actuals + (including the nested function Is_Public_Subp). + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Delta_Array_Aggregate): Make Index_Type + a constant. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * exp_aggr.adb (Expand_N_Delta_Aggregate): Use type of the delta + base expression for the anonymous object of the delta aggregate. + +2020-07-07 Javier Miranda <miranda@adacore.com> + + * sem_util.ads (Interval_Lists): Reordering routine. + * sem_util.adb (Interval_Lists): Reordering routines to keep + them alphabetically ordered. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Resolve_Attribute): Do not call + Check_Non_Static_Context. + +2020-07-07 Arnaud Charlet <charlet@adacore.com> + + * sem_elab.adb (Is_Guaranteed_ABE): Take into account null + procedures. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch5.adb (Analyze_Assignment): Reuse Is_Assignable. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Add scalar + range checks for 'Update on arrays just like for 'Update on + records. + * sem_attr.adb (Analyze_Array_Component_Update): Do not set + range checks for single-dimensional arrays. + (Resolve_Attribute): Do not set range checks for both single- + and multi- dimensional arrays. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * sem.ads (Sem): Fix description. + +2020-07-07 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Analyze_Relaxed_Parameter): Fix for protected + entries. + +2020-07-06 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb (Apply_Scalar_Range_Check): Use Is_RTE. + +2020-07-06 Bob Duff <duff@adacore.com> + + * libgnat/g-catiio.ads: Document newly supported format. Add + ISO_Time constant, for convenience. + * libgnat/g-catiio.adb (Image_Helper): New helper function to do + all the formatting work, called by the two exported Image + functions. Add support for "%:::z" here. Add a Time_Zone + parameter used by the "%:::z" processing. This parameter is not + used for the actual time zone computations; local time is always + used for that, for ease of implementation reasons. It would + make sense to use Append throughout this function, but that's a + cleanup for another day. + (Image): Modify these to pass the local time zone, or the + specified time zone, as appropriate. + +2020-07-06 Bob Duff <duff@adacore.com> + + * libgnat/g-catiio.ads: Change the regular expression that + documents the allowed format to match what ISO-8601 allows. + * libgnat/g-catiio.adb (Scan_Subsecond): Rewrite so it doesn't + assume the subsecond comes last. + (Parse_ISO_8601): Parse an optional subsecond, followed by an + optional time zone, rather than making these alternatives to + each other. + +2020-07-06 Bob Duff <duff@adacore.com> + + * libgnat/g-catiio.adb (Parse_ISO_8601): Minor cleanups: + Give some objects clearer names. + Make some objects more local to where they are used. + Remove some validity checks that can't fail, because some of + the variables tested have been moved so they're not visible here. + Anyway, Wrong_Syntax is about errors in the input, not data + validity. + Use Time_Zone_Seen instead of Local_Sign = ' ' to determine + that a time zone indication was seen. + We don't need to distinguish two different kinds of + syntax error (End_Of_Source_Reached and Wrong_Syntax), + so use Wrong_Syntax always. + Remove comment, "Certain scanning scenarios may handle + this exception on their own."; there are no such scenarios. + +2020-07-06 Bob Duff <duff@adacore.com> + + * libgnat/g-catiio.ads, libgnat/g-catiio.adb (Image): New + function. It might seem like the local-time Image should be + implemented in terms of the Time_Zone Image, but that would be + far harder to implement, so we do it the other way around. + +2020-07-06 Thomas Quinot <quinot@adacore.com> + + * libgnat/g-sechas.ads, libgnat/g-sechas.adb: Refactor to use + Stream_Element_Array as the internal buffer type. + * libgnat/g-shshco.adb: Adjust to use Stream_Element_Offset + instead of Integer as the index in the internal state buffer. + +2020-07-06 Gary Dismukes <dismukes@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst, errout.ads, + erroutc.adb, exp_ch4.adb, exp_ch6.adb, freeze.adb: Comment + rewording/reformatting/typo fixes. Replace "ie." with "that is" + in comment; "can not" -> "cannot", and remove an extraneous + underscore in another comment. + * gnat_rm.texi, gnat_ugn.texi: Regenerate. + +2020-07-06 Javier Miranda <miranda@adacore.com> + + * sem_util.ads (Interval_Lists.Aggregate_Intervals): New + subprogram. + * sem_util.adb (Has_Null_Others_Choice, + Non_Static_Or_Null_Range, Interval_Lists.Aggregate_Intervals): + New subprograms. + (Is_Potentially_Unevaluated): Adding support to detect + potentially unevaluated components of array aggregates. + +2020-07-06 Bob Duff <duff@adacore.com> + + * libgnat/g-catiio.adb (Parse_ISO_8601): New name for + Parse_ISO_8861_UTC. 8601 is the correct ISO standard number. + Also, "UTC" was confusing. All Time values are represented in + UTC, but the ISO 8601 date strings include a time zone. + If a time zone was specified, call + Ada.Calendar.Formatting.Time_Of instead of + GNAT.Calendar.Time_Of, because the latter adjusts to the current + time zone, whereas we want to use (just) the time zone specified + in the ISO string. This allows us to pass Time_Zone instead to + Time_Of, instead of adjusting by Local_Disp by hand. + If no time zone was specified, call GNAT.Calendar.Time_Of as + before. + Use expanded names to clarify which Time_Of is being called. + Remove redundant comment, and move nonredundant part of the + commment to the spec. + (Value): Minor: use "not in" instead of "or else". + * libgnat/g-catiio.ads: Comment moved here. Correct the ISO + standard number. + * libgnat/g-calend.adb: Add ??? comments. + * libgnat/a-calend.ads, libgnat/a-calend.adb: Update obsolete + comments regarding the representation of type Time. Move the + information about the epoch (year 2150) to the spec, and avoid + uttering "2150" more than once. + * libgnat/a-catizo.ads (Time_Offset): Add comment. + +2020-07-06 Ed Schonberg <schonberg@adacore.com> + + * exp_ch5.adb (Find_Component): If the target type is a derived + record type and the required component is a discriminant that is + renamed in the derived type declaration, use the name of the + original discriminant to locate the intended target component. + +2020-07-06 Justin Squirek <squirek@adacore.com> + + * sem_ch12.adb (Analyze_Associations): Add check for errors on + the generic formal before continuing with instantiation. + +2020-07-06 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbin.ads, libgnat/a-nbnbin.adb, + libgnat/a-nbnbin__gmp.adb: Use more Valid_Big_Integer. + +2020-07-06 Piotr Trojanek <trojanek@adacore.com> + + * exp_util.ads (Get_Index_Subtype): Fix duplicate "Last". + +2020-07-06 Ed Schonberg <schonberg@adacore.com> + + * sinfo.ads: Indicate that Field 1 of an N_Delta_Aggregate is + unused. Previously it was erroneously labelled as holding an + Expressions list, in analogy with other aggregate constructs, + but there are no Expressions attached to this node syntactically + or semantically. + +2020-07-06 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Eval_Attribute): Check if constant has an + initialization expression. + +2020-07-06 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Apply + scalar range checks. + * sem_attr.adb (Resolve_Attribute): Do not set scalar range + checks when resolving attribute Update. + +2020-07-06 Gary Dismukes <dismukes@adacore.com> + + * sem_attr.adb (Analyze_Attribute, Attribute_Constrained): Issue + a warning if the attribute prefix is a current instance + reference within an aspect of a type or subtype. + (Address_Checks): Replace test of Is_Object (Ent) with + Is_Object_Reference (P) so that testing for current instances + will be done. + (Eval_Attribute): Add test for current instance reference, to + ensure that we still fold array attributes when current + instances are involved, since value prefixes are allowed for + array attributes, and will now be excluded by + Is_Object_Reference. + * sem_util.ads (Is_Current_Instance_Reference_In_Type_Aspect): + New exported query function. + * sem_util.adb (Is_Object_Reference): Return False for the case + where N is a current instance reference within an + aspect_specification of a type or subtype (basically if the + reference occurs within a predicate, invariant, or DIC aspect + expression). + (Is_Current_Instance_Reference_In_Type_Aspect): New function + that tests whether a node is a reference to a current instance + formal of a predicate, invariant, or + Default_Initial_Condition (DIC) subprogram. + +2020-07-06 Ed Schonberg <schonberg@adacore.com> + + * sem_res.adb (Resolve_Declare_Expression): New subprogram, to + install the scope holding local declarations of the expression, + before completing its resolution. + (Resolve): For an Expression_With_Actions that comes from a + source occurrence of a Declare_Expression, call new subprogram. + +2020-07-06 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Reuse SPARK_Implicit_Load. + +2020-07-06 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch5.adb (Analyze_Loop_Parameter_Specification): Propagate + exception when switch -gnatdk is used and no previous errors are + present. + * sem_eval.adb (Compile_Time_Known_Value, Is_In_Range): + Likewise. + * sem_warn.adb (Operand_Has_Warnings_Suppressed): Likewise. + +2020-07-06 Richard Kenner <kenner@adacore.com> + + * exp_unst.adb (Needs_Fat_Pointer): Don't check for formal. + (Unnest_Subprogram): Use 'Unchecked_Access instead of 'Access + when populating activation record. + +2020-07-06 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch6.adb (Add_Simple_Call_By_Copy_Code): Rename parameter + from Bit_Packed_Array to Force. + (Expand_Actuals): Do not apply BIP processing if the subprogram + is intrinsic. Adjust calls to Add_Simple_Call_By_Copy_Code and + add one for In parameters whose actual is a CPP constructor call. + +2020-07-06 Eric Botcazou <ebotcazou@adacore.com> + + * sem_attr.adb (Eval_Attribute): Do not apply range checks in + the case of 'Pos applied to an integer type here. + +2020-07-06 Ed Schonberg <schonberg@adacore.com> + + * sem_ch3.adb (Analyze_Object_Declaration): If the type is an + Unchecked_Union, and the expression is an aggregate. complete + the analysis and resolution of the aggregate, and treat like a + regular object declaration, instead of as a renaming + declarattion. + +2020-07-06 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch9.adb (Is_Potentially_Large_Family): Add documentation. + (Actual_Index_Expression): Use Entry_Index_Type. + (Build_Entry_Count_Expression): Likewise. + (Build_Find_Body_Index): Likewise. + (Collect_Entry_Families): Likewise. Use directly the bounds of + the index type to find out whether the family is large. + (Entry_Index_Expression): Likewise. + +2020-07-06 Piotr Trojanek <trojanek@adacore.com> + + * sem_res.adb (Resolve_Range): Resolve both low and high bounds + with the range type. + +2020-07-06 Arnaud Charlet <charlet@adacore.com> + + * aspects.ads (Is_Representation_Aspect): + Default_Component_Value is a representation aspect. + * sem_ch13.adb (Check_Aspect_Too_Late, Rep_Item_Too_Late): Relax + RM 13.1(10) rule wrt primitive operations for Ada 202x. + +2020-07-06 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Move to library + level and use a new predicate Is_OK_Aggregate to recognize the + aggregates suitable for direct assignment by the back-end. + (Convert_Array_Aggr_In_Allocator): If neither in CodePeer mode nor + generating C code, generate a direct assignment instead of further + expanding if Aggr_Assignment_OK_For_Backend returns true. + +2020-07-06 Gary Dismukes <dismukes@adacore.com> + + * sem_aux.adb: Add a with clause for Nlists. + (Nearest_Ancestor): Test for the case of concurrent + types (testing for both Is_Concurrent_Type and + Is_Concurrent_Record_Type), and return the first ancestor in the + Interfaces list if present (otherwise will return Empty if no + interfaces). + * sem_ch13.adb (Build_Predicate_Functions): Add a ??? comment + about missing handling for adding predicates when they can be + inherited from multiple progenitors. + +2020-07-06 Arnaud Charlet <charlet@adacore.com> + + * par-ch6.adb (P_Return_Object_Declaration): Set + Has_Init_Expression flag. + +2020-07-02 Eric Botcazou <ebotcazou@adacore.com> + + * debug.adb (d.K): Document new usage. + * fe.h (Debug_Flag_Dot_KK): Declare. + * gcc-interface/decl.c (gnat_to_gnu_field): Give an error when the + component overlaps with the parent subtype, except with -gnatd.K. + +2020-06-26 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_Set_Membership): Expand the membership test + using left associativity instead of right associativity. + +2020-06-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils2.c (build_binary_op): Remove space. + +2020-06-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (gnat_to_gnu) <N_Allocator>: Minor tweaks. + Call Has_Constrained_Partial_View on base type of designated type. + +2020-06-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils.c (gnat_write_global_declarations): Output + integral global variables first and the imported functions later. + +2020-06-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (elaborate_expression_1): When GNAT encodings + are not used, do not create a variable for debug info purposes if + the expression is itself a user-declared variable. + +2020-06-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/ada-tree.h (DECL_RENAMED_OBJECT): Delete. + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Always use + the stabilized reference directly for renaming and create a variable + pointing to it separately if requested. + * gcc-interface/misc.c (gnat_print_decl): Adjust for deletion. + * gcc-interface/trans.c (Identifier_to_gnu): Likewise. + (gnat_to_gnu) <N_Object_Renaming_Declaration>: + Do not deal with side-effects here. + <N_Exception_Renaming_Declaration>: Likewise. + +2020-06-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (elaborate_expression): Replace calls to + Is_OK_Static_Expression with Compile_Time_Known_Value. + +2020-06-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: Set + debug type to the base type and only if the subtype is artificial. + +2020-06-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Do + not test Is_Bit_Packed_Array in the memset path. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (lvalue_required_for_attribute_p): Do not deal + with 'Pos or 'Val. + (Attribute_to_gnu): Likewise. + * gcc-interface/utils.c (create_field_decl): Small formatting fix. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (adjust_for_implicit_deref): Delete. + (maybe_implicit_deref): Likewise. + (Attribute_to_gnu): Replace calls to maybe_implicit_deref by calls + to maybe_padded_object. + (Call_to_gnu): Likewise. + (gnat_to_gnu) <N_Indexed_Component>: Likewise. + <N_Slice>: Likewise. + <N_Selected_Component>: Likewise. + <N_Free_Statement>: Remove call to adjust_for_implicit_deref and + manually make sure that the designated type is complete. + * gcc-interface/utils2.c (build_simple_component_ref): Add comment. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_param): Tidy up. + (gnat_to_gnu_subprog_type): For a variadic C function, do not + build unnamed parameters and do not add final void node. + * gcc-interface/misc.c: Include snames.h. + * gcc-interface/trans.c (Attribute_to_gnu): Tidy up. + (Call_to_gnu): Implement support for unnamed parameters in a + variadic C function. + * gcc-interface/utils.c: Include snames.h. + (copy_type): Tidy up. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch5.adb (Expand_N_Assignment_Statement): Do not apply + range checks to allocators here. + +2020-06-19 Justin Squirek <squirek@adacore.com> + + * lib.adb (Check_Same_Extended_Unit): Add check to determine if + the body for the subunits exist in the same file as their + specifications. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb (In_Place_Assign_OK): In an allocator context, + check the bounds of an array aggregate against those of the + designated type, except if the latter is unconstrained. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch3.adb (Is_Visible_Component): Reason only on the private + status of the original type in an instance body. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * sem_res.adb (Resolve_Qualified_Expression): Do not override the + type of the node when it is unconstrained if it is for an allocator. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * sem_res.adb (Resolve_Allocator): Call Resolve_Qualified_Expression + on the qualified expression, if any, instead of doing an incomplete + type resolution manually. + (Resolve_Qualified_Expression): Apply predicate check to operand. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch4.adb (Analyze_Selected_Component): In an instance body, + also invoke Find_Component_In_Instance on the parent subtype of + a derived tagged type immediately visible. Remove obsolete case. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Get_Integer_Type): Return the largest supported + unsigned integer type if need be. + +2020-06-19 Justin Squirek <squirek@adacore.com> + + * sem_warn.adb (Warn_On_Known_Condition): Add general sanity + check that asserts the original source node being checked + contains an entity. If not, it could be the result of special + case expansion for type conversions. + +2020-06-19 Ed Schonberg <schonberg@adacore.com> + + * sem_ch6.adb (Analyze_Expression_Function): Do not indicate + that the function has a completion if it appears within a Ghost + generic package. + +2020-06-19 Bob Duff <duff@adacore.com> + + * libgnat/a-ststbo.adb (Write): Replace pragma Assert with "if + ... raise Constraint_Error". + +2020-06-19 Justin Squirek <squirek@adacore.com> + + * widechar.adb, widechar.ads (Skip_Wide): Catch validity check + failure when skipping over characters, and update comment to + reflect Skip_Wide's usage in error printing. + +2020-06-19 Javier Miranda <miranda@adacore.com> + + * exp_ch3.ads (Ensure_Activation_Chain_And_Master): New + subprogram. + * exp_ch3.adb (Ensure_Activation_Chain_And_Master): New + subprogram that factorizes code. + (Expand_N_Object_Declaration): Call new subprogram. + * sem_ch6.adb (Analyze_Function_Return): Returning a + build-in-place unconstrained array type defer the full analysis + of the returned object to avoid generating the corresponding + constrained subtype; otherwise the bounds would be created in + the stack and a dangling reference would be returned pointing to + the bounds. + +2020-06-19 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads, + libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb, + libgnat/a-nbnbre.ads: Update spec according to AI12-0366. + +2020-06-19 Piotr Trojanek <trojanek@adacore.com> + + * checks.ads: Remove excessive whitespace in declarations of + functions for check suppression. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch7.adb (Hide_Public_Entities): Split handling of objects + and subprograms, and do not reject the latter upfront in nested + instance specs if there are no referencer subprograms at all. + (Analyze_Package_Body_Helper): Also call Hide_Public_Entities on + nested generic instances. + +2020-06-19 Piotr Trojanek <trojanek@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Reject illegal positional + component associations; fix syntax in comment about named + component associations. + +2020-06-19 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Delta_Record_Aggregate): Modify a nested + Get_Component_Type routine to return a component and not just + its type; use this routine to decorate the identifier within the + delta aggregate. + +2020-06-19 Arnaud Charlet <charlet@adacore.com> + + * sem_ch4.adb (Find_Equality_Types.Check_Access_Attribute): New. + (Find_Equality_Types): Move universal_access related checks at + the end of the processing and add call to + Check_Access_Attribute. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * sem_prag.adb (Process_Convention): Revert previous change. + +2020-06-19 Eric Botcazou <ebotcazou@adacore.com> + + * checks.ads (Apply_Static_Length_Check): Move up. + (Apply_Range_Check): Add parameter Insert_Node. + * checks.adb (Apply_Selected_Range_Checks): Merge into... + (Apply_Range_Check): ...this. Add parameter Insert_Node, + pass it as Warn_Node to Selected_Range_Checks and use it + as insertion point for the checks. + * sem_ch3.adb (Analyze_Subtype_Declaration): Rewrite block + dealing with the range checks for the subtype indication. + Use local variable and call Apply_Range_Check in both cases. + +2020-06-19 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Call Ensure_Valid + on the expression of an object declaration that captures the + value of 'Old prefix. + +2020-06-19 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Add comment. + * sem_attr.adb (Analyze_Attribute): Add ??? comment. + * sem_util.ads (Valid_Scalars): This routine is only used for + 'Valid_Scalars and not for 'Valid. + +2020-06-19 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Do not call + Scalar_Part_Present on the array component's type. + (Build_Array_VS_Func): Remove Comp_Typ parameter, because it can + be easily computed from the Array_Top parameter *and redundant + parameters are confusing and error-prone). + +2020-06-19 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Build_Record_VS_Func): Strip privacy and type + derivation from the root type when 'Valid_Scalars is applied to + a class-wide type. + +2020-06-19 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb (Apply_Parameter_Validity_Checks): Remove testing + of Check_Validity_Of_Parameters for every formal parameter and + function result. + +2020-06-19 Arnaud Charlet <charlet@adacore.com> + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Add missing + warning tag. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Get_Size_For_Range): Only make sure to return a + size lower than that of the original type if possible. + * libgnat/s-rannum.adb (Random_Discrete): Back out optimization + added for 32-bit types. + +2020-06-18 Arnaud Charlet <charlet@adacore.com> + + * sem_ch6.ads, sem_ch6.adb (Check_Formal_Conformance): New + subprogram. + (Check_Conformance): Move code to Check_Formal_Conformance. + * sem_ch8.adb (Analyze_Subprogram_Renaming): Check for formal + conformance when needed. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Narrow_Large_Operation): New procedure to try + and narrow large arithmetic and comparison operations. + (Expand_N_In): Call it. + (Expand_N_Op_Abs): Likewise. + (Expand_N_Op_Add): Likewise. + (Expand_N_Op_Divide): Likewise. + (Expand_N_Op_Eq): Likewise. + (Expand_N_Op_Ge): Likewise. + (Expand_N_Op_Gt): Likewise. + (Expand_N_Op_Le): Likewise. + (Expand_N_Op_Lt): Likewise. + (Expand_N_Op_Minus): Likewise. + (Expand_N_Op_Mod): Likewise. + (Expand_N_Op_Multiply): Likewise. + (Expand_N_Op_Ne): Likewise. + (Expand_N_Op_Plus): Likewise. + (Expand_N_Op_Rem): Likewise. + (Expand_N_Op_Subtract): Likewise. + (Expand_N_Type_Conversion): Use Convert_To procedure. + * exp_ch9.adb (Is_Pure_Barrier) <N_Identifier>: Skip all + numeric types. + <N_Type_Conversion>: Use explicit criterion. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_Allocator_Expression): Apply constraint + and predicate checks for the qualified expression on entry, + followed by constraint and predicate checks for the allocator + itself, and return early if this results in a static error. + (Expand_N_Allocator): Do not do the same here. Instead apply + constraint and predicate checks for arrays in the subtype + indication case. + * exp_ch5.adb (Expand_N_Assignment_Statement): Do not apply + range checks to allocators here. + +2020-06-18 Javier Miranda <miranda@adacore.com> + + * exp_ch6.adb (BIP_Suffix_Kind, Is_Build_In_Place_Entity): Move + declarations... + * exp_ch6.ads: Here. + * exp_util.adb (Is_Secondary_Stack_BIP_Func_Call): Do not rely + on the name of the scope to locate the extra formal BIPalloc + since they are copied when the pointer type associated with + dispatching calls is built; rely on routines + Is_Build_In_Place_Entity and BIP_Suffix_Kind. + * exp_disp.adb (Expand_Dispatching_Call): Set the scope of the + first extra formal of the internally built pointer type. + * sem_ch3.adb (Derive_Subprogram): Do not inherit extra formals + from a limited interface parent since limitedness is not + inherited in such case (AI-419) and this affects the extra + formals. + * sprint.adb (Write_Itype): Output extra formals of subprogram + types. + +2020-06-18 Ghjuvan Lacambre <lacambre@adacore.com> + + * errout.adb (Write_Error_Summary): Display number of warnings + treated as errors. + * errutil.ads: Update comment. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Analyze_Attribute) <Asm_{In,Out}put>: Alphabetize. + <Component_Size>: Add check for universal integer attribute. + <Aft>, <Bit_Order>, <Definite>, <Max_Alignment_For_Allocation>, + <Scalar_Storage_Order>: Raise Program_Error on them. + * sem_attr.adb (Eval_Attribute) <Component_Size>: Add comment on + the packed array case. + +2020-06-18 Steve Baird <baird@adacore.com> + + * sem_util.adb (Object_Access_Level): Treat a 'Old attribute + reference like an aggregate in determining its static + accessibility level; after the evaluation of the relevant + post-condition, the implicitly declared constant associated with + an Old attribute reference ceases to exist. Similarly for + Loop_Entry attribute. + * exp_ch6.adb (Expand_Call_Helper): For an attribute reference + that is expanded into a reference to an implicitly declared + constant (e.g., a 'Old or 'Loop_Entry attribute), compute the + dynamic accessibility level of that constant by looking at the + declaration of the constant (as opposed to looking at the + attribute reference). + +2020-06-18 Steve Baird <baird@adacore.com> + + * exp_ch3.adb (Expand_N_Object_Declaration): Do not generate a + default initial condition check for the declaration of an + imported object. + +2020-06-18 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl: Add s-statxd.o. + * bindgen.adb (Gen_Adainit): Add support for XDR_Stream. + * bindusg.adb (Display): Add mention of -xdr. + * gnatbind.adb: Process -xdr switch. + * init.c (__gl_xdr_stream): New. + * opt.ads (XDR_Stream): New. + * libgnat/s-stratt__xdr.adb: Rename to... + * libgnat/s-statxd.adb: this and adjust. + * libgnat/s-statxd.ads: New. + * libgnat/s-stratt.ads, libgnat/s-stratt.adb: Choose between + default and XDR implementation at runtime. + * libgnat/s-ststop.ads: Update comments. + * doc/gnat_rm/implementation_advice.rst: Update doc on XDR + streaming. + * gnat_rm.texi: Regenerate. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * sem_attr.adb (Analyze_Attribute) <To_Address>: Use the address + size of the target instead of the host when checking the value of + a static expression. Also use standard idiom for exponentiation. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * sem_prag.adb (Process_Convention): Give a warning on C_Variadic_n + being applied to a subprogram with exactly n parameters. + +2020-06-18 Arnaud Charlet <charlet@adacore.com> + + * libgnarl/s-osinte__linux.ads, libgnat/g-io.adb, + libgnat/g-socket.adb, libgnat/g-socthi.adb, + libgnat/g-socthi.ads, libgnat/g-socthi__vxworks.adb, + libgnat/g-socthi__vxworks.ads, libgnat/g-sothco.ads, + libgnat/s-io.adb, libgnat/a-except.adb: Fix function profile + mismatch with imported C functions. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch6.adb (Expand_Call_Helper): Remove superfluous calls + to Relocate_Node and merge calls to Analyze and Resolve in a + couple of places. Do not attempt to generate a range check + for an actual parameter against the formal's type of a derived + subprogram after generating a conversion to the formal's type + of the parent subprogram. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * checks.adb (Compute_Range_For_Arithmetic_Op): New procedure to + compute a range for an arithmetical operation extracted from... + (Minimize_Eliminate_Overflows): ...here. Call it. + (Determine_Range_Cache_O): New cache for Original_Node nodes. + (Determine_Range): Call Compute_Range_For_Arithmetic_Op for all + arithmetic expressions. Use Attribute_Id in lieu of Attribute_Name + for attributes. Add handling for Range_Length alongside Length. + Add specific handling for Alignment, Bit, First_Bit, Last_Bit, + Max_Size_In_Storage_Elements, Position, Bit_Position, + Component_Size, Object_Size, Size, Value_Size, Descriptor_Size. + (Enable_Overflow_Check): Omit the check for Abs and Minus if the + operand cannot be the largest negative number. + (Selected_Length_Checks): Use Pos for Number_Dimensions. + * exp_attr.adb (Expand_N_Attribute_Reference): Move compile-time + handling of Bit_Position, Descriptor_Size, First_Bit, Last_Bit + and Position to... + * sem_attr.adb (Eval_Attribute): ...here. Move up Alignment for + objects and use Compile_Time_Known_Attribute in this case too. + +2020-06-18 Ghjuvan Lacambre <lacambre@adacore.com> + + * erroutc.ads: Declare new Is_Compile_Time_Msg boolean, + add new Compile_Time_Pragma field to Error_Msg_Object type. + (Count_Compile_Time_Pragma_Warnings): New function. + * erroutc.adb (Count_Compile_Time_Pragma_Warnings): New + function. + (Compilation_Errors): Take Compile_Time warnings into account + when tallying Errors/Warnings. + * errout.ads (Error_Msg): New procedure. + * errout.adb (Error_Msg): New procedure. + (Error_Msg_Internal): Set new Compile_Time_Pragma field in + Error_Msg_Object. + * errutil.adb (Error_Msg): Set new Compile_Time_Pragma field in + Error_Msg_Object. + * sem_prag.adb (Validate_Compile_Time_Warning_Or_Error): Pass + True to new Error_Msg procedure. + * doc/gnat_rm/implementation_defined_pragmas.rst: Update doc for + the Compile_Time_Warning pragma. + * gnat_rm.texi: Regenerate. + * opt.ads: Update comment. + +2020-06-18 Arnaud Charlet <charlet@adacore.com> + + * sem_ch4.adb (Check_Compatible_Profiles): Add explicit + initialization. + +2020-06-18 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb (Generate_Index_Checks): Handle + N_Subtype_Indication returned from Scalar_Range. + +2020-06-18 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb, sem_ch3.adb: Minor refactorings. + * sem_eval.adb (Eval_Qualified_Expression): Fix reference to RM + rule in comment; only set a local variable Hex in the branch + where it is used. + +2020-06-18 Piotr Trojanek <trojanek@adacore.com> + + * sem_eval.adb (Check_Non_Static_Context): Use Is_RTE. + +2020-06-18 Arnaud Charlet <charlet@adacore.com> + + * sem_ch4.adb (Find_Equality_Types.Check_Access_Object_Types): + New function, used to implement RM 4.5.2 (9.6/2). + (Find_Equality_Types.Check_Compatible_Profiles): New function, + used to implement RM 4.5.2(9.7/2). + (Find_Equality_Types.Reference_Anonymous_Access_Type): New + function. + (Find_Equality_Types.Try_One_Interp): Fix handling of anonymous + access types which was accepting both too much and too little. + Remove accumulated special and incomplete cases for + instantiations, replaced by Has_Compatible_Type. + (Analyze_Overloaded_Selected_Component): Use + Is_Anonymous_Access_Type instead of Ekind_In. + * sem_res.adb: Code cleanup and bug fix: use + Is_Anonymous_Access_Type instead of Ekind_In. Relax checking of + anonymous access parameter when universal_access "=" is + involved. + * sem_type.adb: Likewise. + (Find_Unique_Type): Move code from here... + (Specific_Type): ...to here. Also add missing handling of access + to class wide types. + * einfo.ads, einfo.adb (Is_Access_Object_Type): New. + +2020-06-18 Bob Duff <duff@adacore.com> + + * libgnat/a-strsto.ads, libgnat/a-ststbo.adb, + libgnat/a-ststbo.ads, libgnat/a-ststun.adb, + libgnat/a-ststun.ads: New files, containing packages + Ada.Streams.Storage, Ada.Streams.Storage.Bounded, and + Ada.Streams.Storage.Unbounded. + * impunit.adb, Makefile.rtl: Add new file names. + +2020-06-18 Javier Miranda <miranda@adacore.com> + + * sem_ch13.adb (Has_Good_Profile): Enforce strictness in the + check. Required to detect wrong profiles for Input and Output. + (Analyze_Stream_TSS_Definition): Minor enhancement in the text + of the error for class-wide attributes. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Get_Integer_Type): Pick an unsigned type based + on the Esize of the base type of the input type. + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_Array_Equality): For the optimization of + the 2-element case, build new expression lists for the indices. + +2020-06-18 Richard Kenner <kenner@adacore.com> + + * sem_util.adb (Enclosing_Subprogram): No longer need + Convention_Protected. + +2020-06-18 Claire Dross <dross@adacore.com> + + * sem_util.adb (Is_OK_Volatile_Context): Return False on + definitions of constants declared in declare expressions. + +2020-06-18 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/implementation_defined_aspects.rst + (Relaxed_Initialization): New implementation-defined aspect. + * doc/gnat_rm/implementation_defined_attributes.rst + (Initialized): New implementation-defined attribute. + * gnat_rm.texi: Regenerate. + +2020-06-18 Javier Miranda <miranda@adacore.com> + + * exp_disp.adb (Expand_Dispatching_Call): Add missing decoration + of attribute Extra_Accessibility_Of_Result. + * freeze.adb (Check_Extra_Formals): No check required if + expansion is disabled; Adding check on + Extra_Accessibilty_Of_Result. + (Freeze_Subprogram): Fix decoration of + Extra_Accessibility_Of_Result. + * sem_ch3.adb (Derive_Subprogram): Fix decoration of + Extra_Accessibility_Of_Result + +2020-06-18 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Optimize_Length_Comparison): Accept 32-bit values + in the full unsigned range. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * checks.adb (Apply_Universal_Integer_Attribute_Checks): Do not do + anything when the type of the node is already Universal_Integer. + +2020-06-17 Arnaud Charlet <charlet@adacore.com> + + * sem_ch10.adb (Expand_With_Clause): Add missing handling of + N_Generic_Subprogram_Declaration, N_Subprogram_Declaration, + N_Subprogram_Body. + +2020-06-17 Ed Schonberg <schonberg@adacore.com> + + * sem_ch13.adb: (Check_Inherited_Indexing): Check that a type + derived from an indexable container type cannot specify an + indexing aspect if the same aspect is not specified for the + parent type (RM 4.1.6 (6/5), AI12-160). Add a check that a + specified indexing aspect for a derived type is confirming. + +2020-06-17 Gary Dismukes <dismukes@adacore.com> + + * exp_ch9.adb (Build_Protected_Subp_Specification): Add ??? + comment about the flag Has_Nested_Subprogram not being set here. + (Expand_N_Protected_Body): If the original body for a protected + subprogram has the flag Has_Nested_Subprogram set, then set that + flag on the new unprotected subprogram body that's created for + it, and reset the Scope fields of its top level declarations, + which have been effectively taken from the original protected + subprogram body. Add ??? comment about unclear testing of + Corresponding_Spec. + +2020-06-17 Javier Miranda <miranda@adacore.com> + + * aspects.ads (type Aspect_Id): Add Aspect_Yield as a Boolean + aspect, and update the Is_Representation_Aspect, Aspect_Names, + and Aspect_Delay arrays. + * einfo.ads, einfo.adb (Has_Yield_Aspect, Yield_Aspect): New + subprograms. + * exp_ch6.adb (Add_Return, Expand_Non_Function_Return, + Expand_Simple_Function_Return): Add calls to Yield. + * exp_ch9.adb (Build_Accept_Body, Expand_N_Accept_Statement): + Add calls to Yield. + * rtsfind.ads (RE_Yield): Adding support to generate calls to + the runtime service Ada.Dispatching.Yield + * sem_ch13.adb (Analyze_Aspect_Yield): New subprogram. + * sem_ch3.adb (Derive_Subprogram): Inherit attribute + Has_Yield_Aspect. + * sem_ch8.adb (Analyze_Subprogram_Renaming): Check consistency + of Has_Yield in the actual subprogram of a generic + instantiation. + * sem_disp.adb (Check_Dispatching_Operation): Check that if the + Yield aspect is specified for a dispatching subprogram that + inherits the aspect, the specified value shall be confirming. + * sem_prag.adb (Analyze_Pragma [Pragma_Implemented]): Check that + the implementation kind By_Protected_Procedure cannot be applied + to a procedure that has aspect Yield. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_N_Op_Expon): Replace all occurrences of + the original right operand with the relocated version. + +2020-06-17 Javier Miranda <miranda@adacore.com> + + * exp_ch6.adb (Has_BIP_Extra_Formal): New subprogram. + (Needs_BIP_Task_Actuals): Add support for the subprogram type + internally generated for dispatching calls. + * exp_disp.adb (Expand_Dispatching_Call): Adding code to + explicitly duplicate the extra formals of the target subprogram. + * freeze.adb (Check_Extra_Formals): New subprogram. + (Freeze_Subprogram): Fix decoration of Extra_Formals. + * sem_ch3.adb (Derive_Subprogram): Fix decoration of + Extra_Formals. + +2020-06-17 Bob Duff <duff@adacore.com> + + * par.adb (P_Basic_Declarative_Items): Update comment about + Declare_Expression. + * par-ch3.adb (P_Declarative_Items): Pass in Declare_Expression + flag, and if True, skip the call to Style.Check_Indentation. + * par-ch4.adb (P_Declare_Expression): Fix incorrect comment. + +2020-06-17 Arnaud Charlet <charlet@adacore.com> + + * sem_res.adb (Valid_Conversion): Change error message to make + it more user-friendly. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * checks.ads (Apply_Length_Check_On_Assignment): Declare. + * checks.adb (Apply_Length_Check_On_Assignment): New procedure + to apply a length check to an expression in an assignment. + * exp_ch5.adb (Expand_Assign_Array): Call it instead of calling + Apply_Length_Check to generate a length check. + * sem_ch5.adb (Analyze_Assignment): Likewise. + +2020-06-17 Piotr Trojanek <trojanek@adacore.com> + + * einfo.adb (Is_Relaxed_Initialization_State): Add reference to + SPARK RM. + * sem_attr.adb (Analyze_Attribute_Old_Result): Likewise. + * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Reject + aspect on completions of private types and deferred constants. + * sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): + Adjust comments; support queries for constants. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * cstand.adb (Stloc): Change to a renaming. + (Staloc): Likewise. + (Build_Unsigned_Integer_Type): Remove Nam parameter, use local + constants and do not call Make_Name. + (Make_Dummy_Index): Use local constants. + (Create_Standard): Pass the name of entities as parameter in + calls to New_Standard_Entity and remove calls to Make_Name. + Adjust calls to Build_Unsigned_Integer_Type. + (Identifier_For): Use local constant. + (Make_Component): Pass the name of the component as parameter + in call to New_Standard_Entity and remove call to Make_Name. + (Make_Formal): Likewise. Rename Formal_Name parameter into + Nam and use local constant. + (Make_Name): Delete. + (New_Operator): Use local constant. + (New_Standard_Entity): Rename S parameter into Nam and build + the name here. Remove call to Make_Name. + (Register_Float_Type): Pass the name of the type as parameter + in call to New_Standard_Entity and remove call to Make_Name. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_First>: + Remove condition added for scalar types. + +2020-06-17 Gary Dismukes <dismukes@adacore.com> + + * exp_ch3.ads (Build_Access_Subprogram_Wrapper_Body): Adjust + colon columns; reformat comment. + * exp_ch3.adb + (Build_Access_Subprogram_Wrapper_Body): Likewise. + * sem_ch3.adb (Build_Access_Subprogram_Wrapper): Reformat spec + comment and reformat comment in body. + (Analyze_Full_Type_Declaration): Reformat comment. + (Replace_Type_Name): Fixed three typos, plus reformatting of + comment. + * sem_prag.adb (Analyze_Pre_Post_Condition): Fix typos. + * sem_warn.adb (Warn_On_Overlapping_Actuals): Edit comments: + remove hyphen, add missing word. + +2020-06-17 Bob Duff <duff@adacore.com> + + * libgnat/a-cbdlli.adb, libgnat/a-cbhama.adb, + libgnat/a-cbhase.adb, libgnat/a-cbmutr.adb, + libgnat/a-cborma.adb, libgnat/a-cborse.adb, + libgnat/a-cdlili.adb, libgnat/a-chtgbk.adb, + libgnat/a-chtgke.adb, libgnat/a-cidlli.adb, + libgnat/a-cihama.adb, libgnat/a-cihase.adb, + libgnat/a-cimutr.adb, libgnat/a-ciorma.adb, + libgnat/a-ciorse.adb, libgnat/a-cobove.adb, + libgnat/a-cohama.adb, libgnat/a-cohase.adb, + libgnat/a-coinve.adb, libgnat/a-comutr.adb, + libgnat/a-convec.adb, libgnat/a-coorma.adb, + libgnat/a-coorse.adb, libgnat/a-crbtgk.adb, + libgnat/a-crbtgo.adb, libgnat/a-rbtgso.adb: Move tampering + checks earlier. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Get_Integer_Type): Use standard types without + a specific size. + * sem_res.adb (Resolve_Unchecked_Type_Conversion): Remove a + redundant intermediate conversion to Universal_Integer. + +2020-06-17 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.ads, sem_util.adb (Get_Iterable_Type_Primitive): Fix + comment and enforce it with an assertion in the body. + +2020-06-17 Ed Schonberg <schonberg@adacore.com> + + * sem_ch3.adb (Analyze_Full_Type_Declaration): For an + access_to_subprogram declaration that has aspect specifications, + call Build_Access_ Subprogram_Wrapper at once, so that pre- and + postcondition aspects are analyzed in the context of a + subprogram declaration. + (Build_Access_Subprogram_Wrapper): Examine aspect specifications + of an Access_To_Subprogram declaration. If pre- or + postconditions are declared for it, create declaration for + subprogram wrapper and add the corresponding aspect + specifications to it. Replace occurrences of the type name by + that of the generated subprogram, so that attributes 'Old and + 'Result can appear in a postcondition. + * exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Moved + here from sem_prag.adb. + * exp_ch3.ads (Build_Access_Subprogram_Wrapper_Body): Visible + subprogram. + * sem_prag.adb (Build_Access_Subprogram_Wrapper / _Body): Moved + to sem_ch3.adb and exp_ch3.adb. + +2020-06-17 Piotr Trojanek <trojanek@adacore.com> + + * atree.adb (Preserve_Comes_From_Source): Rewrite using + Set_Comes_From_Source and Comes_From_Source, which enforce that + the parameters are valid. + * exp_ch4.adb, exp_ch5.adb, sem_ch12.adb, sem_ch6.adb, + sem_res.adb: Rewrite using Preserve_Comes_From_Source. + +2020-06-17 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbin.ads, libgnat/a-nbnbre.ads: Remove obsolete + comments. + +2020-06-17 Gary Dismukes <dismukes@adacore.com> + + * aspects.ads (type Aspect_Id): Add Aspect_Static as a Boolean + aspect, and update the Is_Representation_Aspect, Aspect_Names, + and Aspect_Delay arrays. + * exp_ch6.adb (Expand_Simple_Function_Return): In the case of a + return for a static expression function, capture a copy of the + expression of the return statement before it's expanded and + reset its Analyzed flags. Then, just before leaving this + procedure, if the expression was rewritten, set the + Original_Node of the rewritten expression to the new copy and + also set the Expression of the associated static expression + function to designate that copy. This ensures that later copies + of the expression made via New_Copy_Tree will fully copy all + nodes of the expression tree. + * inline.ads (Inline_Static_Expression_Function_Call): New + procedure to evaluate and produce the result of a static call to + a static expression function. + * inline.adb: Add with and use for Sem_Res. + (Establish_Actual_Mapping_For_Inlined_Call): New procedure + extracted from code in Expand_Inlined_Call that traverses the + actuals and formals of an inlined call and in some cases creates + temporaries for holding the actuals, plus establishes an + association between formals and actuals (via the Renamed_Object + fields of the formals). + (Formal_Is_Used_Once): Function removed from Expand_Inlined_Call + and now nested in the above procedure. + (Expand_Inlined_Call): Code for doing the formal/actual + traversal is moved to Create_Actual_Temporaries and replaced + with a call to that new procedure. + (Inline_Static_Expression_Function_Call): New procedure to + evaluate a static call to a static expression function, + substituting actuals for their corresponding formals and + producing a fully folded and static result expression. The + function has subsidiary functions Replace_Formal and Reset_Sloc + that take care of doing the mapping of formals to actuals and + resetting the Slocs of subnodes of the mapped expression to that + of the call so errors will be flagged on the call rather than + function. + * sem_ch6.adb (Analyze_Expression_Function): In the case of a + static expression function, perform an additional preanalysis of + the function's expression to ensure that it's a potentially + static expression (according to the requirements of + 6.8(3.2/5-3.4/5)), and issue an error if it's not. The global + flag Checking_Potentially_Static_Expression is set and unset + around this checking. + * sem_ch13.adb (Analyze_Aspect_Static): New procedure to enforce + selected requirements of the new aspect Static on expression + functions, including checking that the language version is + Ada_2020 and that the entity to which it applies is an + expression function whose formal parameters are of a static + subtype and have mode 'in', its result subtype is a static + subtype, and it has no pre- or postcondition aspects. A ??? + comment is added to indicate the need for adding checking that + type invariants don't apply to the result type if the function + is a boundary entity. + (Analyze_One_Aspect): Call Analyze_Aspect_Static for aspect + Static. + * sem_elab.adb (Build_Call_Marker): Return without creating a + call marker when the subprogram is a static expression function, + since no ABE checking is needed for such functions. + * sem_eval.ads (Checking_Potentially_Static_Expression): New + function to return whether the checking for potentially static + expressions is enabled. + (Set_Checking_Potentially_Static_Expression): New procedure to + enable or disable checking of potentially static expressions. + * sem_eval.adb (Checking_For_Potentially_Static_Expression): New + global flag for determining whether preanalysis of potentially + static expression is being done, which affects the behavior of + certain static evaluation routines. + (Checking_Potentially_Static_Expression): New function to return + whether the checking for potentially static expressions is + enabled. + (Eval_Call): When evaluating a call within a static expression + function with checking of potentially static expression + functions enabled, substitutes a static value in place of the + call to allow folding of the expression. + (Eval_Entity_Name): When evaluating a formal parameter of a + static expression function with checking of potentially static + expression functions enabled, substitutes a static value in + place of the reference to the formal to allow folding of the + expression. + (Set_Checking_Potentially_Static_Expression): New procedure to + enable or disable checking of potentially static expressions. + * sem_res.adb (Resolve_Call): Test for a recursive call + occurring within a static expression function and issue an error + for such a call. Prevent the establishment of a transient scope + in the case this is a call to a (string-returning) static + expression function. When calling a static expression function, + if no error has been posted on the function, call + Inline_Static_Expression_Function_Call to convert the call into + its equivalent static value. + * sem_util.ads (Is_Static_Expression_Function): New function + returning whether the subprogram entity passed to it is a static + expression function. + (Is_Static_Expression_Function_Call): New function to determine + whether the call node passed to it is a static call to a static + expression function. + * sem_util.adb (Compile_Time_Constraint_Error): Suppress + compile-time Constraint_Error reporting when checking for a + potentially static expression. + (Is_Static_Expression_Function): New function returning whether + the subprogram entity passed to it is a static expression + function by testing for the presence of aspect Static. + (Has_All_Static_Actuals): New function in + Is_Static_Expression_Function_Call that traverses the actual + parameters of a function call and returns True only when all of + the actuals are given by static expressions. In the case of a + string-returning function, we call Resolve on each actual to + ensure that their Is_Static_Expression flag properly reflects + whether they're static, to allow suppressing creation of a + transient scope within Resolve_Call. A prominent ??? comment is + added to explain this rather unconventional call to Resolve. + (Is_Static_Expression_Function_Call): New function that + determines whether a node passed to it is a call to a static + expression function all of whose actual parameters are given by + static expressions. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Optimize_Length_Comparison): New local variable to + record whether this may be a dynamic superflat case. + (Is_Optimizable): Accept 0 as lower bound and set it in this case, + but return false if the operand is not a length too. + (Rewrite_For_Equal_Lengths): New procedure. + Optimize the comparison of two lengths in the superflat case when + the arrays have the same bounds. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * doc/gnat_rm/implementation_defined_attributes.rst (Bit): Sharpen + the comparison with System.Storage_Unit. + (Descriptor_Size): Clear confusion about alignment and padding. + * gnat_rm.texi: Regenerate. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_First>: + Do not replace the bound for an array type if it is public. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Optimize_Length_Comparison): Make sure the base + types are the same when comparing Y'Last and X'Last directly. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_First>: + Replace it with a direct reference to an entity which is not a + discriminant for constrained array types. Add same condition + for scalar types. + <Attribute_Last>: Merge with above implementation. + * exp_ch4.adb (Optimize_Length_Comparison): Be prepared for a + second entity whose length is compared. Rename Prepare_64 to + Convert_To_Long_Long_Integer. If the second entity is present, + compute the difference of the 'First attributes and compare the + sum of 'Last of the second entity with this difference against + 'Last of the first entity. Add a special case when the 'First + attributes are equal. Suppress overflow checks in all cases. + +2020-06-17 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst, lib-writ.ads, + par-prag.adb, sem_ch12.adb, sem_ch8.adb, sem_prag.adb: Fix + casing of GNATprove. + * gnat_rm.texi: Regenerate. + +2020-06-17 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb (Generate_Range_Check): Simplify redundant + condition. + * sem_ch3.adb (Check_Initialization, Process_Discriminants): + Likewise. + * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Likewise. + +2020-06-17 Eric Botcazou <ebotcazou@adacore.com> + + * exp_fixd.adb (Build_Conversion): Also preserve the + Conversion_OK flag of an inner conversion. + +2020-06-17 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch5.adb (Analyze_Iterator_Specification): Enable expansion + that creates a renaming that removes side effects from the + iterated object in the GNATprove mode; then analyze reference to + this renaming (it is required for GNATprove and harmless for + GNAT). + +2020-06-16 Eric Botcazou <ebotcazou@adacore.com> + + * sinfo.ads (Conversion_OK): Document use for 'Pos and 'Val. + * exp_attr.adb (Get_Integer_Type): New function returning a + small integer type appropriate for an enumeration type. + (Expand_N_Attribute_Reference) <Attribute_Enum_Rep>: Call it. + <Attribute_Pos>: For an enumeration type with a standard + representation, expand to a conversion with Conversion_OK. + <Attribute_Val>: Likewise. + * exp_ch4.adb (Expand_N_Type_Conversion): Do not expand when + the target is an enumeration type and Conversion_OK is set. + +2020-06-16 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch4.adb (Common_Type): Go to Underlying_Full_View, if any. + +2020-06-16 Richard Kenner <kenner@adacore.com> + + * exp_unst.adb (Subp_Index): Change way we detect internal + protected subprograms. + +2020-06-16 Richard Kenner <kenner@adacore.com> + + * comperr.adb (Compiler_Abort): Clarify message displayed to + customers. + +2020-06-16 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb, doc/gnat_ugn/the_gnat_compilation_model.rst, + einfo.ads, exp_ch5.adb, exp_ch7.adb, lib-xref.ads, + libgnat/g-spitbo.ads, make.adb, sem_aux.adb, sem_ch3.adb, + sem_ch4.adb, sem_ch5.adb, urealp.adb: Fix wrong casing. + * gnat_ugn.texi: Regenerate. + +2020-06-16 Piotr Trojanek <trojanek@adacore.com> + + * einfo.adb, exp_spark.adb, exp_util.adb, sem_eval.adb: Replace + "Ekind ... in Object_Kind" with "Is_Object (...)". + +2020-06-16 Piotr Trojanek <trojanek@adacore.com> + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Fix typo in + comment. + +2020-06-16 Piotr Trojanek <trojanek@adacore.com> + + * exp_util.adb (Evaluate_Name): Force evaluation of aggregates; + recursively evaluate expression of a qualified expression; fix + location of the comment for an attribute referenced and an + indexed component. + +2020-06-16 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (Freeze_Expression): Use consistent style and + formatting in a couple of cases. + +2020-06-16 Steve Baird <baird@adacore.com> + + * libgnat/a-nbnbin.ads, libgnat/a-nbnbre.ads: Uncomment the + commented-out Integer_Literal aspect specification for type + Big_Integer. + +2020-06-16 Javier Miranda <miranda@adacore.com> + + * exp_ch6.adb (BIP_Suffix_Kind, Check_BIP_Actuals, + Is_Build_In_Place_Entity): New subprograms. + (Make_Build_In_Place_Call_In_Allocator, + Make_Build_In_Place_Call_In_Anonymous_Context, + Make_Build_In_Place_Call_In_Assignment, + Make_Build_In_Place_Call_In_Object_Declaration): Add assertions. + (Needs_BIP_Task_Actuals): Add missing support for thunks. + (Expand_Actuals): Ensure that the BIP call has available an + activation chain and the _master variable. + * exp_ch9.adb (Find_Enclosing_Context): Initialize the list of + declarations of empty blocks when the _master variable must be + declared and the list was not available. + +2020-06-16 Bob Duff <duff@adacore.com> + + * par-ch4.adb (P_Case_Expression): Move to be local. + (P_Declare_Expression): New parsing routine. + (P_Unparen_Cond_Expr_Etc): New name for + P_Unparen_Cond_Case_Quant_Expression which was missing one case + in its name (iterated component association), and we're adding a + new case (declare expression), so lets use "Etc" instead of + trying to pack all those things into the name. Add call to + P_Declare_Expression, and check for missing parens. + (P_Expression_If_OK, P_Expression_Or_Range_Attribute_If_OK): Add + Tok_Declare. + * par.adb (P_Basic_Declarative_Items): Add parameter + Declare_Expression so we can tailor the error message about + incorrect bodies. + (P_Case_Expression): Move to body. + * par-ch3.adb (P_Basic_Declarative_Items): Tailor the error + message about incorrect bodies. + * par-ch7.adb (P_Package): Pass Declare_Expression => False to + P_Basic_Declarative_Items. + * sem.ads (In_Declare_Expr): Counter used to determine whether + we are analyzing a declare_expression. Needed to give errors + about things that are not allowed in declare_expression, such as + the 'Access attribute. + * sem.adb (Do_Analyze): Save/restore In_Declare_Expr. + * sem_ch4.adb (Analyze_Expression_With_Actions): Give this node + its own scope. That seems better in general, but it is + necessary for declare_expressions. For example, an identifier + declared in a declare_expression should not clash with the same + identifier in an outer scope. If this is a declare_expression, + indicated by Comes_From_Source, then check legality rules, and + incr/decr In_Declare_Expr. + * sem_aggr.adb (Resolve_Aggregate): Allow an applicable index + constraint for a declare_expression, so if its expression is an + array aggregate, it can have "others => ...". + * sem_attr.adb (Analyze_Access_Attribute): Disallow these + attributes in declare_expressions. Add comment to make it clear + that Unrestricted_Access is included. + * sinfo.ads, sinfo.adb, atree.ads, atree.adb: Remove the + now-incorrect comment in sinfo.ads that says + N_Expression_With_Actions has no proper scope. Add 17-parameter + versions of Nkind_In. Remove the 16-parameter versions of + Nkind_In. + +2020-06-16 Arnaud Charlet <charlet@adacore.com> + + * sem_aux.ads, sem_aux.adb (Is_Record_Or_Limited_Type): New + function. + * exp_ch4.adb, sem_ch4.adb (Analyze_Membership_Op, + Expand_Set_Membership.Make_Cond): Choose between primitive and + predefined equality for membership tests. + +2020-06-16 Ed Schonberg <schonberg@adacore.com> + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify code and + implement AI12-0216 which clarifies the conditions under which + overlapping actuals in a call are illegal. If proper warnings + are enabled, GNAT also emits warnings in legal cases of + overlopping actuals. + +2020-06-16 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (Freeze_Expression): Stop climbing the parent chain + at a N_{Case,If}_Expression node for a type or an entity that + does not come from source. + +2020-06-16 Steve Baird <baird@adacore.com> + + * snames.ads-tmpl: Define names of the three new aspects. + * aspects.ads: Define the three new aspects. + * sem_util.ads, sem_util.adb, sem_dim.adb: Move the function + String_From_Numeric_Literal from being declared in the body of + package Sem_Dim to being declared in the visible part of package + Sem_Util. + * sem_ch13.ads, sem_ch13.adb: Declare new visible procedure + Validate_Literal_Aspect. This is where most of the legality + checking occurs for an aspect specification for one of the three + new aspects, as well as resolution of the subprogram named in + the aspect specification. Follow example of other aspects (e.g., + Validate_Literal_Aspect is called in much the same way as + Validate_Iterable_Aspect in Analyze_Aspects_At_Freeze_Point; a + small amount of legality checking is performed in + Analyze_One_Aspect in much the same way as for Default_Value or + Default_Component_Value aspects). Most of the work is done in + Validate_Literal_Aspect. + * contracts.adb (Add_Contract_Item): Call + Validate_Literal_Aspect in much the same way that + Validate_Iterable_Aspect was already being called. + * sem_res.adb (Resolve): Rewrite a literal as a call if it is a + user-defined literal. This is where the dynamic semantics of + the 3 new aspects are implemented. + * sem_ch6.adb (Fully_Conformant_Expressions): Two numeric + literals that have different text but the same value (e.g., + 12345 and 12_345) do not conform if they are user-defined + literals. Introduce a new function + User_Defined_Numeric_Literal_Mismatch to avoid duplication in + making this check. + * sem_type.adb (Has_Compatible_Type): A numeric literal can be + compatible with a non-numeric type (and a string literal can be + compatible with a non-string type) if it can be interpreted as a + user-defined literal. + +2020-06-16 Arnaud Charlet <charlet@adacore.com> + + * sem_aggr.adb (Resolve_Extension_Aggregate): Fix implementation + of AI05-0115 by checking the correct type. + +2020-06-16 Arnaud Charlet <charlet@adacore.com> + + * sem_ch6.adb (Analyze_Subprogram_Specification): Generate error + message for functions returning interfaces. + +2020-06-16 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Membership_Entry): Relax assertion to also + recognize qualified identifiers. + +2020-06-16 Piotr Trojanek <trojanek@adacore.com> + + * exp_util.adb (Evaluate_Name): Force evaluation of operators. + +2020-06-16 Arnaud Charlet <charlet@adacore.com> + + * sem_ch4.adb (Analyze_Membership_Op): Reset entity of equality + nodes for membership tests with singletons. + (Analyze_User_Defined_Binary_Op): Always perform the analysis + since nodes coming from the expander also may refer to non + standard operators as part of membership expansion. + * exp_ch4.adb (Expand_Set_Membership.Make_Cond): Reset entity of + equality node. + * sem_type.ads: Fix typo in comment. + +2020-06-16 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_attr.adb (Analyze_Attribute): Add + Check_Not_Incomplete_Type call. + +2020-06-16 Gary Dismukes <dismukes@adacore.com> + + * sem_ch6.adb: Add closing paren in a comment. + * sem_util.adb: Correct comment typo (aggreate => aggregate). + +2020-06-16 Javier Miranda <miranda@adacore.com> + + * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings): + Code cleanup. + +2020-06-16 Eric Botcazou <ebotcazou@adacore.com> + + * freeze.adb (In_Expanded_Body): Remove unreachable code. + (Freeze_Expression): Rename a couple of local variables. + In the case of an expanded body, also freeze locally the + entities declared in a nested block. + +2020-06-16 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch4.adb (Transform_Object_Operation): Document that it + may be partially destructive for the parent of the node. + (Try_Object_Operation): Undo the changes made above on failure. + +2020-06-16 Javier Miranda <miranda@adacore.com> + + * restrict.adb (Global_No_Tasking): Adding + Targparm.Restrictions_On_Target Fixes regressions with zfp. + +2020-06-16 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb: (Freeze_Expression, In_Expanded_Body): Treat the + generated body of an expression function like other bodies + generated during expansion (e.g. stream subprograms) so that + those bodies are not treated as freezing points. Handle properly + other global references in such completions. + +2020-06-16 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch8.adb (Analyze_Object_Renaming): Remove trivially + useless initialization of Is_Object_Reference. + * sem_util.adb (Is_Object_Reference): Simplify detection of + binary and unary operators; literally implement rules about + aggregates and qualified expressions; recognize string literals + as object references. + +2020-06-16 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Validate_Derived_Type_Instance): Reword error + message for 12.5.1(8) subclause and add secondary message if + the incompatibility comes from the predicates. + * sem_ch3.adb (Check_Constraining_Discriminant): New procedure + to give the error required by the 3.7(15) subclause. Mention + "statically" in the error message and add secondary message + if the incompatibility comes from the predicates. + (Build_Derived_Concurrent_Type): Call it when a new discriminant + constrains an old one. + (Build_Derived_Record_Type): Likewise. + * sem_eval.ads (Predicates_Compatible): Declare. + * sem_eval.adb (Predicates_Compatible): New function to implement + the compatibility of predicates specified by the 4.9.1 clause. + (Subtypes_Statically_Compatible): Call it. + +2020-06-15 Eric Botcazou <ebotcazou@adacore.com> + + * sem_eval.ads (Predicates_Match): Fix description. + * sem_eval.adb (Predicates_Match): Rewrite. + +2020-06-15 Ed Falis <falis@adacore.com> + + * Makefile.rtl: Change name of hie/g-io__vxworks-ppc-cert.adb. + +2020-06-15 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Premature_Usage): Add support for subtype + references and replace set of if-then-else by a case statement. + +2020-06-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Analyze_Depends_In_Decl_Part, + Analyze_Global_In_Decl_Part): Bring back task discriminants for + analysis of the Global/Depends contracts; add comments. + +2020-06-15 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (Return_Applies_To): Document special usage for E_Block. + * einfo.adb (Write_Field8_Name): Write it for E_Block too. + * exp_ch4.adb (Expand_N_Type_Conversion): Remove implementation of + the check prescribed by AI05-0073. + * exp_ch6.adb (Apply_CW_Accessibility_Check): New procedure to apply + the check prescribed by AI95-344 extracted from... + (Expand_N_Extended_Return_Statement): Apply the check prescribed by + AI95-344 to the expression, if present. Suppress only access checks + when analyzing the rewritten result. + (Expand_Simple_Function_Return): ...here. Rename local variable. + Call Apply_CW_Accessibility_Check to apply the check prescribed by + AI95-344, but do not do it for the simple return statement generated + by the expansion of an extended return statement. Apply the check + prescribed by AI05-0073 to all functions returning anonymous access + type designating a specific tagged type, but not if the expression + was null or tag checks are suppressed for the type, and use Not In + operator rather than comparing the tags explicitly. + * sem.adb (Analyze): Handle all Suppress values. + * sem_ch6.adb (Analyze_Function_Return): Do not explicitly apply + predicate checks in the case of an extended return statement. + Do not apply an implicit conversion to the anonymous access result + type in the case of the simple return statement generated by the + expansion of an extended return statement. + (New_Overloaded_Entity): Small comment tweak. + * treepr.adb (Print_Node): Fix typo in flag string. + +2020-06-15 Bob Duff <duff@adacore.com> + + * exp_put_image.ads, exp_put_image.adb + (Image_Should_Call_Put_Image): New function to determine whether + the call to Put_Image should be generated. + (Build_Image_Call): New procedure to generate the call to + Put_Image. + * exp_imgv.adb (Expand_Image_Attribute): Use underlying types to + bypass privacy (only in Ada 2020). If + Image_Should_Call_Put_Image is True (which happens only in Ada + 2020), then call Build_Image_Call. + * rtsfind.ads, rtsfind.adb: Add the necessary declarations in + Ada.Strings.Text_Output.Buffers. + * sem_attr.adb (Check_Image_Type): Enable the Ada 2020 case. + * libgnat/a-stoufo.ads, libgnat/a-stoufo.adb: Use the less + restrictive type that allows newline characters. + +2020-06-15 Gary Dismukes <dismukes@adacore.com> + + * exp_ch9.ads (Build_Master_Declaration): Add commas. + * exp_ch9.adb (Build_Master_Entity): Spelling fix ("build" => + "built"). + (Build_Task_Activation_Call): Fix word order. + +2020-06-15 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbin.ads (Big_Positive, Big_Natural): Fix + predicate. + +2020-06-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Fix + dealing with scopes on subprogram bodies that act as specs. + * sem_util.adb (Has_Relaxed_Initialization): Fix trivial + mistake. + +2020-06-15 Javier Miranda <miranda@adacore.com> + + * restrict.ads (Set_Global_No_Tasking, Global_No_Tasking): New + subprograms. + * restrict.adb (Set_Global_No_Tasking, Global_No_Tasking): New + subprograms. + * sem_ch3.adb (Access_Definition): Do not skip building masters + since they may be required for BIP calls. + (Analyze_Subtype_Declaration): Propagate attribute + Is_Limited_Record in class-wide subtypes and subtypes with + cloned subtype attribute; propagate attribute + Is_Limited_Interface. + * sem_ch6.adb (Check_Anonymous_Return): Do not skip building + masters since they may be required for BIP calls. Use + Build_Master_Declaration to declare the _master variable. + (Create_Extra_Formals): Add decoration of Has_Master_Entity when + the _master formal is added. + * exp_ch3.adb (Init_Formals): Adding formal to decorate it with + attribute Has_Master_Entity when the _master formal is added. + (Build_Master): Do not skip building masters since they may be + required for BIP calls. + (Expand_N_Object_Declaration): Ensure activation chain and + master entity for objects initialized with BIP function calls. + * sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings): + Adding support to detect and save restriction No_Tasking when + set in the run-time package System or in a global configuration + pragmas file. + * sem_util.adb (Current_Entity_In_Scope): Overload this + subprogram to allow searching for an entity by its Name. + * sem_util.ads (Current_Entity_In_Scope): Update comment. + * exp_ch4.adb (Expand_N_Allocator): Do not skip building masters + since they may be required for BIP calls. + * exp_ch6.ads (Might_Have_Tasks): New subprogram. + * exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Add + support for BIP calls returning objects that may have tasks. + (Make_Build_In_Place_Call_In_Allocator): Build the activation + chain if the result might have tasks. + (Make_Build_In_Place_Iface_Call_In_Allocator): Build the class + wide master for the result type. + (Might_Have_Tasks): New subprogram. + (Needs_BIP_Task_Actuals): Returns False when restriction + No_Tasking is globally set. + * exp_ch9.ads (Build_Master_Declaration): New subprogram. + * exp_ch9.adb (Build_Activation_Chain_Entity): No action + performed when restriction No_Tasking is globally set. + (Build_Class_Wide_Master): No action performed when restriction + No_Tasking is globally set; use Build_Master_Declaration to + declare the _master variable. + (Build_Master_Declaration): New subprogram. + (Build_Master_Entity): No action performed when restriction + No_Tasking is globally set; added support to handle transient + scopes and _finalizer routines. + (Build_Master_Renaming): No action performed when restriction + No_Tasking is globally set. + (Build_Task_Activation_Call): Skip generating the call when + the chain is an ignored ghost entity. + (Find_Master_Scope): Generalize the code that detects transient + scopes with master entity. + * einfo.ads (Has_Nested_Subprogram): Minor comment reformatting. + +2020-06-15 Arnaud Charlet <charlet@adacore.com> + + * sem_attr.adb (Eval_Attribute): Protect against previous + errors. + * sem_ch13.adb (Analyze_Aspect_Default_Value): Remove redundant + error checking, handling in Analyze_Aspect_Specifications. + (Analyze_Aspect_Specifications): Refine error messages on + Default_[Component_]Value. + (Check_Aspect_Too_Late): New procedure. + (Rep_Item_Too_Late.Is_Derived_Type_With_Constraint): Remove, + dead code. + * aspects.ads (Is_Representation_Aspect): Default_Value is a + representation aspect. + +2020-06-15 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-wichha.ads, libgnat/a-wichha.adb, + libgnat/a-wichun.ads, libgnat/a-wichun.adb (Is_Basic, To_Basic): + New. + * libgnat/s-utf_32.ads, libgnat/s-utf_32.adb (Is_UTF_32_Basic, + To_UTF_32_Basic, Decomposition_Search): New subprograms. + (Unicode_Decomposition): New table. + +2020-06-15 Gary Dismukes <dismukes@adacore.com> + + * exp_ch6.adb (Add_Call_By_Copy_Code): In the case of a view + conversion passed to a scalar out-mode parameter where the + formal has Default_Value set, declare the copy temp with the + base type of the formal's subtype and initialize the copy temp + with the actual's value. + +2020-06-15 Justin Squirek <squirek@adacore.com> + + * exp_ch4.adb (Expand_N_Case_Expression): Set default value for + Target to silence potential warnings. + (Expand_N_If_Expression): Add calculation to check when the if + expression is used directly in the context of an actual of an + anonymous access type and add a special path to force expansion + of the if expression in this case. + * exp_ch6.adb (Expand_Branch): Generate an assignment to the + level temporary for a given branch. + (Expand_Call_Helper): Add expansion to allow for creating a + temporary to store associated accessiblity levels on each branch + of the conditional expression. Also perform expansion of + function calls into expressions with actions, and fixup + references to N with Call_Node. + (Insert_Level_Assign): Move through nested conditional + expressions to each branch. + * sem_util.ads, sem_util.adb (Is_Anonymous_Access_Actual): Added + to detect when to force expansion of if expressions. + +2020-06-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Analyze_Depends_In_Decl_Part, + Analyze_Global_In_Decl_Part): Do not install task discriminants + for analysis of the Global/Depends contracts. + +2020-06-15 Piotr Trojanek <trojanek@adacore.com> + + * contracts.adb (Analyze_Object_Contract): Do not expect + Global/Depends on single protected units. + +2020-06-15 Justin Squirek <squirek@adacore.com> + + * sem_res.adb (Valid_Conversion): Add missing condition to + trigger proper static accessiblity failiures when the target + type is an anonymous access. + +2020-06-15 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch6.adb (Expand_Call_Helper): Replace repeated Ekind with + Ekind_In. + +2020-06-15 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch6.adb, sem_util.adb: Remove excessive parents, + especially since they don't make the code any easier to read. + +2020-06-15 Piotr Trojanek <trojanek@adacore.com> + + * aspects.ads (Aspect_Id): Add Aspect_Relaxed_Initialization. + (Implementation_Defined_Aspect): Add new aspect. + (Aspect_Argument): Add new aspect with Optional_Expression + argument. + (Is_Representation_Aspect): Add new aspect as a + non-representation one. + (Aspect_Names): Add name for the new aspect. + (Aspect_Delay): Add new aspect as a non-delayed one. + * sem_ch3.adb: Minor reformatting. + * einfo.ads, einfo.adb (Is_Relaxed_Initialization_State): New + query; reuses existing code for querying abstract state options. + * exp_attr.adb (Expand_N_Attribute_Reference): For now ignore + attribute 'Initialized. + * sem_attr.adb (Analyze_Attribute_Old_Result): Allow attribute + 'Result to be used in the aspect Relaxed_Initialization + expression. + (Analyze_Attribute): Analyze attribute 'Initialized; based on + existing code for attribute 'Valid_Scalars. + (Eval_Attribute): Do not expect attribute 'Initialized, just + like attribute 'Valid_Scalars is not expected. + * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): New + routine. + (Analyze_Aspect_Specifications): Analyze new aspect in a + dedicated routine. + (Check_Aspect_At_Freeze_Point): Do not expect new aspect. + * sem_prag.adb (Analyze_Abstract_State): Support option + Relaxed_Initialization on abstract states. + * sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): New + query for the GNATprove backend. + * snames.ads-tmpl (Snames): Add Name_Ids for the new aspect and + attribute; add an Attribute_Id for the new attribute. + +2020-06-15 Bob Duff <duff@adacore.com> + + * exp_put_image.adb, libgnat/s-putima.adb, libgnat/s-putima.ads, + rtsfind.ads: Enable Put_Image if Is_Access_Subprogram_Type (Typ). + Remove comment saying it's disabled in that case. Rename + Put_Image_Access_Prot to be Put_Image_Access_Prot_Subp to + clarify that we're talking about access-to-subprogram, not + access-to-protected-object. + +2020-06-15 Bob Duff <duff@adacore.com> + + * sem_attr.adb (Check_Image_Type): New procedure for checking + the type, depending on language version. Disable the Ada 2020 + support until the corresponding expander work is done. + (Analyze_Image_Attribute): Call Check_Image_Type. Rearrange the + code to be simplier and more logical. When P_Type is modified, + modify P_Base_Type accordingly. + * sem_util.adb (Is_Object_Image): Do not return False if the + prefix is a type. X'Image should be considered an image of an + object iff X is an object (albeit illegal pre-2020 if + nonscalar). + +2020-06-15 Bob Duff <duff@adacore.com> + + * libgnat/s-putima.ads, libgnat/s-putima.adb + (Put_Image_Access_Subp, Put_Image_Access_Prot): New procedures + for printing access-to-subprogram objects. Remove an explicit + " ", because Put_Image includes the annoying leading blank. + * rtsfind.ads: Add new procedures in s-putima. + * exp_put_image.adb: Call new procedures as appropriate. + +2020-06-15 Bob Duff <duff@adacore.com> + + * exp_imgv.adb (Expand_Image_Attribute): Allow private types. + Put_Image generates Image for numeric types, and private types + whose full type is numeric. This requires the Conversion_OK flag + for integer and floating-point types. For fixed point, we need + the extra conversion. + * exp_put_image.adb (Build_Elementary_Put_Image_Call): Remove + special handling of real types. + (Enable_Put_Image): Enable for reals. + +2020-06-15 Bob Duff <duff@adacore.com> + + * exp_attr.adb (Put_Image): Use underlying type for strings. + Remove unchecked union processing. + * exp_put_image.adb (Tagged_Put_Image_Enabled): Use -gnatd_z to + enable default Put_Image for tagged types. This allows testing + that feature. + (Build_String_Put_Image_Call): Set Conversion_OK flag. + (Make_Component_List_Attributes): Remove unchecked union + processing. + (Enable_Put_Image): Disable for unchecked unions. Enable for + nonscalar types (which were mistakenly disabled in earlier + changes). + * debug.adb: Document -gnatd_z switch. + * libgnat/s-putima.adb (Put_Image_String, Put_Image_Wide_String, + Put_Image_Wide_Wide_String): Double double-quote characters. + Forget about special handling of control characters for now -- + that's rare enough to not be a priority, and it's not clear what + the right thing to do is anyway. + * namet.adb: Minor: Improve debugger-friendliness. + * sinfo.ads: Minor: Add "???" comment. + +2020-06-15 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.ads, sem_util.adb (Is_Renaming_Declaration): Remove. + +2020-06-15 Ed Schonberg <schonberg@adacore.com> + + * freeze.adb (Freeze_Expression): When traversing the tree + looking for the proper insertion point for the freeze node of an + entity that is declared in an outer scope, set the candidate + subprogram body node properly. Previous code has an off-by-one + error. + +2020-06-15 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference) <Has_Same_Storage>: + Do not do superfluous work. Add the condition (X'Size /= 0) on + both paths and turn binary AND into short-circuit AND THEN. + +2020-06-15 Steve Baird <baird@adacore.com> + + * sem_attr.adb (Analyze_Attribute): In the Loop_Entry case, + replace a call to Statically_Denotes_Object with a call to + Statically_Names_Object and clean up the preceding comment. + +2020-06-15 Eric Botcazou <ebotcazou@adacore.com> + + * sem_res.adb (Resolve_Set_Membership): Remove local variable. + In the non-overloaded case, call Intersect_Types on the left + operand and the first alternative to get the resolution type. + But test the subtype of the left operand to give the warning. + +2020-06-12 Steve Baird <baird@adacore.com> + + * sem_res.adb (Valid_Conversion): The simpler cases of + violations of the aforementioned 8.6 rule are already handled + correctly. These include cases where the operand of the type + conversion is an access parameter or a stand-alone object of an + anonymous access type. Add code to detect violations where the + operand of the type conversion is an access discriminant whose + accessibility level is tied to one of the other simpler cases. + This is implemented in a new function, + Valid_Conversion.Is_Discrim_Of_Bad_Access_Conversion_Argument, + which is called in place of the previous test. + +2020-06-12 Bob Duff <duff@adacore.com> + + * exp_attr.adb (Put_Image): Remove assertion. This assertion is + False in mixed-Ada-version programs. + * exp_put_image.adb (Tagged_Put_Image_Enabled): New flag to make + it easy to experiment with Put_Image on tagged types. False in + this version. + (Enable_Put_Image): Enable in pre-2020. Workarounds: Disable + for tagged types if Tagged_Put_Image_Enabled is False. Disable + for access-to-subprogram types. Disable if errors have been + detected, or Sink is unavailable. + (Preload_Sink): Move all conditionals here, from Sem_Ch10, so + they can be nearby related code in Enable_Put_Image. Load Sink + only if we have seen a tagged type. This removes the dilemma + about calling Preload_Sink when compiling the compiler, which + caused unwanted dependences. + * exp_put_image.ads (Preload_Sink): New formal Compilation_Unit, + needed to move all conditionals here, from Sem_Ch10. + * libgnat/a-stouut.adb (Put_UTF_8): Make this suitable for + inlining, so we don't get warnings about inlining in some tests. + And so it can be inlined! + * opt.ads (Tagged_Seen): New flag (see Preload_Sink). + * scng.adb (Scan): Set new Tagged_Seen flag. + * sem_ch10.adb (Analyze_Compilation_Unit): Move conditionals and + comments regarding Preload_Sink into Preload_Sink. + +2020-06-12 Arnaud Charlet <charlet@adacore.com> + + * sem_res.adb (Resolve_Actuals): Check for AI12-0074. + +2020-06-12 Olivier Hainque <hainque@adacore.com> + + * libgnat/s-secsta.ads (Memory_Alignment): New constant, memory + alignment for chunks and allocated blocks. Initialize to + Standard'Maximum_Alignment * 2. + (Chunk_Memory): Use it. + * libgnat/s-secsta.adb (Round_Up): Likewise. + +2020-06-12 Piotr Trojanek <trojanek@adacore.com> + + * par-prag.adb: Fix ordering. + * snames.ads-tmpl (Name_Test_Case, Pragma_Test_Case): Likewise. + * sem_prag.adb (Sig_Flags): Likewise. + +2020-06-12 Arnaud Charlet <charlet@adacore.com> + + * sem_res.adb (Resolve_Entity_Name): Fix handling of expressions + containing array attributes wrt Ada 83 detection. + +2020-06-12 Steve Baird <baird@adacore.com> + + * sem_util.ads, sem_util.adb: Define 3 new Boolean-valued + functions - Statically_Denotes_Entity, + Statically_Denotes_Object, and Statically_Names_Object. The + first two were taken from sem_attr.adb. The term "statically + names" is defined in the Ada RM and the new function + Statically_Names_Object is intended to reflect that definition, + or more precisely, as described in a comment in the code, to + reflect the expected future definition of that term. + * sem_attr.adb: Delete functions Statically_Denotes_Object and + Statically_Denotes_Entity; these two functions have been moved + to package Sem_Util. Replace call to Statically_Denotes_Object + with a call to Statically_Names_Object as per AI12-0217 (a + binding interpretation, so no Ada_Version check). + * exp_ch9.adb (Expand_Entry_Barrier.Is_Simple_Barrier): Change + name of function (it was previously Is_Simple_Barrier_Name) + because the function should return True in the case of a static + expression; implement this requirement. Change function to + include a call to Statically_Names_Object so that, for Ada_2020 + and later, it will return True for appropriate subcomponent + names. + (Expand_Entry_Barrier.Is_Pure_Barrier): Handle + N_Indexed_Component and N_Selected_Component cases by calling + Statically_Names_Object. + (Expand_Entry_Barrier): Reorganize to treat Simple_Barriers and + Pure_Barriers more uniformly. Prevent cascaded errors. + +2020-06-12 Ed Schonberg <schonberg@adacore.com> + + * sem_ch12.adb (Find_Matching_Actual): Add guard on search loops + to detect a compilation error when using a compiler built + without assertions. + (Instantiate_Formal_Subprogram): Create a new subprogram name + for the actual only if formal has contract aspects and expansion + is enabled. + +2020-06-12 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb: Add with and use clauses for Sem_Mech. + (Get_Base_Object): New function to get the base object of a node. + (In_Place_Assign_OK): Add Target_Object parameter. Deal with a + qualified expression on entry. Remove short-circuit for array + aggregates with a single "others" choice. Do not look into the + components of the aggregate if the parent is an allocator. + (Check_Component): Add T_OK parameter and rewrite. + (Safe_Component): Invoke Check_Component with T_OK set to False. + (Convert_To_Assignments): Try to use an in-place assignment for + any target; for that, call Get_Base_Object on the target and pass + the result to In_Place_Assign_OK. + (Expand_Array_Aggregate): Use Parent_Kind and Parent_Node more + consistently. For an assignment, call Get_Base_Object on the + target and pass the result to In_Place_Assign_OK. + +2020-06-12 Dmitriy Anisimkov <anisimko@adacore.com> + + * socket.c (__gnat_minus_500ms): Use GetVersionEx to detect + Windows Server version. + * libgnat/g-sothco.ads (Minus_500ms_Windows_Timeout): Remade to + Boolean constant. + * libgnat/g-socket.adb (Set_Socket_Option): Use + Minus_500ms_Windows_Timeout constant instead of function call. + +2020-06-12 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-coinho.ads, libgnat/a-coinho.adb, + libgnat/a-coinho__shared.ads, libgnat/a-coinho__shared.adb + (Swap): New procedure. + +2020-06-12 Arnaud Charlet <charlet@adacore.com> + + * exp_ch6.adb (Expand_N_Subprogram_Declaration): Do nothing for + a subprogram declared in a protected body. + * exp_ch9.ads, exp_ch9.adb + (Build_Private_Protected_Declaration): Moved to sem_ch6.adb. + (Expand_N_Protected_Body): Do nothing for a subprogram declared + in a protected body. + * sem_ch6.adb (Build_Internal_Protected_Declaration): Moved from + exp_ch9.adb and renamed and fixed to ensure in particular that + such subprograms have convention Intrinsic and have no protected + version. + (Analyze_Subprogram_Body_Helper): Call + Build_Internal_Protected_Declaration. + (Move_Pragmas): Moved up and merged with the more general + version from Build_Private_Protected_Declaration. We only want + to copy selected pragmas, most pragmas are not suitable for a + copy on the spec. + +2020-06-12 Ed Schonberg <schonberg@adacore.com> + + * sem_ch6.adb (Check_Overriding_Indicatior): Reject an + overriding indicator on a subprogram declared within a protected + body. + +2020-06-12 Piotr Trojanek <trojanek@adacore.com> + + * contracts.adb, einfo.adb, sem_ch4.adb, sem_ch6.adb, + sem_res.adb, sem_util.adb: Replace Ekind_In with Is_Entry. + +2020-06-12 Piotr Trojanek <trojanek@adacore.com> + + * sem_res.adb (Resolve_Entry_Call): Add call to + Warn_On_Overlapping_Actuals. + +2020-06-12 Arnaud Charlet <charlet@adacore.com> + + * aspects.ads (Is_Representation_Aspect): New array. + * sem_ch13.adb (Analyze_Aspect_Specifications): Check + 13.1(9.2/5) for representation aspects. + +2020-06-12 Bob Duff <duff@adacore.com> + + * exp_put_image.ads, exp_put_image.adb (Preload_Sink): Procedure + for preloading type Sink. This has the side effect of loading + various dependents, including Ada.Strings.UTF_Encoding. + (Enable_Put_Image): Disable Put_Image in pre-2020 versions of + Ada. This limitation can probably be lifted later. Enable for + tagged types except in predefined units. Disable for CPP types; + Put_Image is legal, just prints the type name. + * sem_attr.adb (Check_Put_Image_Attribute): Don't complain about + Put_Image of CPP types; instead call the "unknown" version of + Put_Image. + * sem_ch10.adb (Analyze_Compilation_Unit): Call Preload_Sink. + +2020-06-12 Piotr Trojanek <trojanek@adacore.com> + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify. + +2020-06-12 Piotr Trojanek <trojanek@adacore.com> + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Remove suppression + for internal units. + +2020-06-12 Arnaud Charlet <charlet@adacore.com> + + * exp_strm.adb (Build_Elementary_Input_Call): Add support for 24 + bits elementary types. + * rtsfind.ads: Add 24 bits integer streaming routines. + * sem_ch13.adb (Analyze_Attribute_Definition_Clause + [Attribute_Stream_Size]): Add support for 24 bits elementary + types. + * libgnat/s-stratt.ads, libgnat/s-stratt.adb, + libgnat/s-stratt__xdr.adb: Add support for signed and unsigned + 24 bits integers. + +2020-06-12 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Get_Discr_Value): Cleanup. + +2020-06-12 Eric Botcazou <ebotcazou@adacore.com> + + * rtsfind.ads (RTU_Id): Add System_Address_To_Access_Conversions. + * sem_elab.adb (Elaboration_Phase_Active): Alphabetize. + (Finalize_All_Data_Structures): Likewise. + (Error_Preelaborated_Call): New procedure. + (Build_Call_Marker): Set Is_Preelaborable_Call flag in marker. + (Build_Access_Marker): Likewise. + (Build_Subprogram_Invocation): Likewise. + (Build_Task_Activation): Likewise. + (Check_Preelaborated_Call): Return when the call is preelaborable. + Call Error_Preelaborated_Call to give the error otherwise. + (Check_Elab_Call): Likewise. + * sem_util.adb (Is_Preelaborable_Function): New predicate. + (Is_Non_Preelaborable_Construct.Visit): Recurse on the + Explicit_Actual_Parameter field of N_Parameter_Association. + (Is_Non_Preelaborable_Construct.Visit_Subexpression): In Ada 2020, + for a call to a preelaborable function, visit the parameter list; + otherwise, raise Non_Preelaborable exception. + (Is_Preelaborable_Construct): Likewise, but recursively check the + parameters instead and return false upon failure, otherwise true. + * sinfo.ads (Is_Preelaborable_Call): New flag in call marker nodes. + (Is_Preelaborable_Call): New inline function. + (Set_Is_Preelaborable_Call): New inline procedure. + * sinfo.adb (Is_Preelaborable_Call): New inline function. + (Set_Is_Preelaborable_Call): New inline procedure. + +2020-06-12 Bob Duff <duff@adacore.com> + + * stringt.ads: Remove "use System;". + +2020-06-12 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch4.adb (Try_Container_Indexing): Replace call to + First_Discriminant by Get_Reference_Discriminant to get the + reference discriminant. + * sem_ch13.adb (Check_Indexing_Functions): Likewise. + * sem_ch5.adb (Preanalyze_Range): Call Get_Reference_Discriminant + to get the reference discriminant. + * sem_util.adb (Is_OK_Variable_For_Out_Formal): Treat all + Ada 2012 implicit dereferences in only one place. + (Is_Variable): Minor tweak. + +2020-06-12 Ed Schonberg <schonberg@adacore.com> + + * sem_ch12.adb (Has_Contracts): New predicate to check whether a + formal subprogram carries an aspect specification for a pre- or + postcondition. + (Build_Subprogram_Wrappers): If actual is overloaded, create a + new name to be used in call inside wrapper body. This names + carries the interpretations of the actual, and is resolved when + the body is analyzed. + (Build_Subprogram_Body_Wrapper): Use this generated name in + call. + (Build_Subprogram_Decl_Wrapper): Build profile of wrapper from + the profile of formal, and reset type entities for subsequent + analysis. + +2020-06-12 Bob Duff <duff@adacore.com> + + * debug.adb: Remove usage of -gnatd_z. + * exp_attr.adb, exp_put_image.ads, exp_put_image.adb: Clean up + the enable/disable code. If Put_Image is disabled for a type, + systematically call the "unknown" version. Improve comments. + Consolidate workarounds. Remove usage of -gnatd_z. + +2020-06-12 Eric Botcazou <ebotcazou@adacore.com> + + * sem_elab.adb: Fix typos in comments. + +2020-06-12 Justin Squirek <squirek@adacore.com> + + * sem_util.adb (Object_Access_Level): Add processing of implicit + dereferences. + +2020-06-12 Bob Duff <duff@adacore.com> + + * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads, + libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb, + libgnat/a-nbnbre.ads: Update Put_Image, and uncomment the aspect + specification. Add pragmas Ada_2020. + * libgnat/a-stouut.ads, libgnat/a-stteou.ads: Add Preelaborate, + because the Big_Numbers packages have Preelaborate, and now + depend on these Text_Output packages. + +2020-06-12 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (No_Return): Document it for all subprograms. + * einfo.adb (Set_No_Return): Adjust assertion accordingly. + * sem_ch3.adb (Check_Abstract_Overriding): Implement the + check prescribed by RM 6.5.1(6/2) here instead of... + (Derive_Subprogram): Adjust comment accordingly. + * sem_disp.adb (Override_Dispatching_Operation): ...here. + Remove superfluous return statement. + * sem_ch6.adb (Check_No_Return_Expression): New procedure. + (Analyze_Function_Return): Call it to implement the check + prescribed by AI12-0269 for simple return statements of + No_Return functions, and also checks extended statements. + (Analyze_Return_Statement): Only give an error on a return + statement in No_Return procedures. Use idiomatic form. + * sem_ch8.adb (Analyze_Subprogram_Renaming): Adjust error + message for No_Return renaming subprogram. + * sem_prag.adb (Analyze_Pragma) <Pragma_No_Return>: Accept + it on functions and generic functions in Ada 2020. + +2020-06-11 Eric Botcazou <ebotcazou@adacore.com> + + * sem_res.adb (Resolve_Implicit_Dereference): In an instance, + reset the type of the prefix if it is private before building + the dereference. + +2020-06-11 Eric Botcazou <ebotcazou@adacore.com> + + * exp_util.adb (Safe_Unchecked_Type_Conversion): Add missing + Is_Type guard before calling Has_Discriminants on Etype. + +2020-06-11 Bob Duff <duff@adacore.com> + + * libgnat/a-nbnbin__gmp.adb: There's no Optional_Big_Integer + anymore. Invalid_Big_Integer is not used. + Greatest_Common_Divisor returns Big_Positive. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Get_Value): Refine type of the Compon parameter. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Record_Aggregate): Refine type of + Others_Box. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb, exp_ch7.adb, exp_ch9.adb, exp_smem.adb, lib.adb, + nlists.adb, sem.adb, sem_aggr.adb, sem_ch3.adb, sem_ch6.adb, + sem_ch8.adb, sem_dim.adb, sem_res.adb, sem_util.adb, + sem_warn.adb: Replace uses of Next function with procedure. + +2020-06-11 Eric Botcazou <ebotcazou@adacore.com> + + * exp_pakd.ads: Add paragraph about scalar storage order. + * exp_pakd.adb (Install_PAT): Do not set the scalar storage + order of the PAT here but... + (Set_PB_Type): ...here instead and... + (Create_Packed_Array_Impl_Type): ...here as well. + * rtsfind.ads (RE_Id): Add RE_Rev_Packed_Bytes{1,2,4}. + (RE_Unit_Table): Likewise. + * libgnat/s-unstyp.ads (Rev_Packed_Bytes1): New derived type. + (Rev_Packed_Bytes2): Likewise. + (Rev_Packed_Bytes4): Likewise. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch4.adb, sem_ch6.adb, sem_res.adb, sem_util.ads: Fix + references to SPARK RM 7.1.3 rule numbers. + +2020-06-11 Ed Schonberg <schonberg@adacore.com> + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify code, + remove inner predicate Is_Covered_Formal, preserve warning for + two overlapping composite types when only one is writable, and + for two overlapping and writable elementary types. + +2020-06-11 Steve Baird <baird@adacore.com> + + * contracts.adb (Add_Contract_Item): Support specifying + volatility refinement aspects for types. + (Analyze_Contracts): Add call to Analyze_Type_Contract in the + case of a contract for a type. + (Freeze_Contracts): Add call to Analyze_Type_Contract in the + case of a contract for a type. + (Check_Type_Or_Object_External_Properties): A new procedure + which performs the work that needs to be done for both object + declarations and types. + (Analyze_Object_Contract): Add a call to + Check_Type_Or_Object_External_Properties and remove the code in + this procedure which did much of the work that is now performed + by that call. + (Analyze_Type_Contract): Implement this new routine as nothing + more than a call to Check_Type_Or_Object_External_Properties. + * contracts.ads: Update comment for Add_Contract_To_Item because + types can have contracts. Follow (questionable) precedent and + declare new routine Analyze_Type_Contract as visible (following + example of Analyze_Object_Contract), despite the fact that it is + never called from outside of the package where it is declared. + * einfo.adb (Contract, Set_Contract): Id argument can be a type; + support this case. + (Write_Field34_Name): Field name is "contract" for a type. + * einfo.ads: Update comment describing Contract attribute. + * sem_ch3.adb (Build_Derived_Numeric_Type): Is_Volatile should + return same answer for all subtypes of a given type. Thus, when + building the base type for something like type Volatile_1_To_10 + is range 1 .. 10 with Volatile; that basetype should be marked + as being volatile. + (Access_Type_Declaration): Add SPARK-specific legality check + that the designated type of an access type shall be compatible + with respect to volatility with the access type. + * sem_ch12.adb (Check_Shared_Variable_Control_Aspects): Add + SPARK-specific legality check that an actual type parameter in + an instantiation shall be compatible with respect to volatility + with the corresponding formal type. + * sem_ch13.adb (Analyze_Aspect_Specifications): Perform checks + for aspect specs for the 4 volatility refinement aspects that + were already being performed for all language-defined aspects. + * sem_prag.adb (Analyze_External_Property_In_Decl_Part, + Analyze_Pragma): External properties (other than No_Caching) may + be specified for a type, including a generic formal type. + * sem_util.ads: Declare new subprograms - Async_Readers_Enabled, + Async_Writers_Enabled, Effective_Reads, Effective_Writes, and + Check_Volatility_Compatibility. + * sem_util.adb (Async_Readers_Enabled, Async_Writers_Enabled, + Effective_Reads, Effective_Writes): Initial implementation of + new functions for querying aspect values. + (Check_Volatility_Compatibility): New procedure intended for use + in checking all SPARK legality rules of the form "<> shall be + compatible with respect to volatility with <>". + (Has_Enabled_Property): Update comment because Item_Id can be a + type. Change name of nested Variable_Has_Enabled_Property + function to Type_Or_Variable_Has_Enabled_Property; add a + parameter to that function because recursion may be needed, + e.g., in the case of a derived typ). Cope with the case where + the argument to Has_Enabled_Property is a type. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Add_Association): Add assertion about the formal + parameters. + (Propagate_Discriminants): Always add an explicit component + association, so that an "others => <>" association is never + needed. + +2020-06-11 Bob Duff <duff@adacore.com> + + * exp_put_image.adb (Build_Elementary_Put_Image_Call): If the + underlying type is real, call Put_Image_Unknown. + (Build_Unknown_Put_Image_Call): Pass the type name to + Put_Image_Unknown. + * libgnat/s-putima.ads, libgnat/s-putima.adb + (Put_Image_Unknown): Add Type_Name parameter. Remove + overly-detailed documentation of what it does; better to leave + it open. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch3.adb (Build_Constrained_Array_Type, + Build_Constrained_Discriminated_Type): Skip unnecessary loop + iterations. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Build_Constrained_Itype): Move to Sem_Util. + * sem_ch3.adb (Build_Subtype, Inherit_Predicate_Flags): Move... + * sem_util.adb (Build_Subtype): Here. Add parameters for + references to objects previously declared in enclosing scopes. + (Inherit_Predicate_Flags): And here, because it is called by + Build_Subtype. + * sem_util.ads (Build_Overriding_Spec): Reorder alphabetically. + (Build_Subtype): Moved from Sem_Ch3; comments updated. + (Build_Constrained_Itype): Moved from Sem_Aggr; comments + updated. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Case_Table_Type): Change index type from Nat to + Pos. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Build_Constrained_Itype): Previously a declare + block, now a separate procedure; the only change is that now + New_Assoc_List might include components and an others clause, + which we ignore (while we deal with discriminants exactly as we + did before); extend a ??? comment about how this routine is + different from the Build_Subtype + (Resolve_Record_Aggregate): Create a constrained itype not just + for the outermost record aggregate, but for its inner record + aggregates as well. + +2020-06-11 Eric Botcazou <ebotcazou@adacore.com> + + * checks.adb (Build_Discriminant_Checks): Build an explicit + dereference when the type is an access type. + * exp_atag.adb (Build_CW_Membership): Add explicit dereferences. + (Build_Get_Access_Level): Likewise. + (Build_Get_Alignment): Likewise. + (Build_Inherit_Prims): Likewise. + (Build_Get_Transportable): Likewise. + (Build_Set_Size_Function): Likewise. + * exp_ch3.adb (Build_Offset_To_Top_Function): Likewise. + * exp_ch4.adb (Expand_Allocator_Expression): Likewise. + (Expand_N_Indexed_Component ): Remove code dealing with implicit + dereferences. + (Expand_N_Selected_Component): Likewise. + (Expand_N_Slice): Likewise. + * exp_ch9.adb (Add_Formal_Renamings): Add explicit dereference. + (Expand_Accept_Declarations): Likewise. + (Build_Simple_Entry_Call): Remove code dealing with implicit + dereferences. + (Expand_N_Requeue_Statement): Likewise. + * exp_disp.adb (Expand_Dispatching_Call): Build an explicit + dereference when the controlling type is an access type. + * exp_spark.adb (Expand_SPARK_N_Selected_Component): Delete. + (Expand_SPARK_N_Slice_Or_Indexed_Component): Likewise. + (Expand_SPARK): Do not call them. + * sem_ch4.adb (Process_Implicit_Dereference_Prefix): Delete. + (Process_Indexed_Component): Call Implicitly_Designated_Type + to get the designated type for an implicit dereference. + (Analyze_Overloaded_Selected_Component): Do not insert an + explicit dereference here. + (Analyze_Selected_Component): Likewise. + (Analyze_Slice): Call Implicitly_Designated_Type to get the + designated type for an implicit dereference. + * sem_ch8.adb (Has_Components): New predicate extracted from... + (Is_Appropriate_For_Record): ...this. Delete. + (Is_Appropriate_For_Entry_Prefix): Likewise. + (Analyze_Renamed_Entry): Deal with implicit dereferences. + (Find_Selected_Component): Do not insert an explicit dereference + here. Call Implicitly_Designated_Type to get the designated type + for an implicit dereference. Call Has_Components, Is_Task_Type + and Is_Protected_Type directly. Adjust test for error. + * sem_res.adb (Resolve_Implicit_Dereference): New procedure. + (Resolve_Call): Call Resolve_Indexed_Component last. + (Resolve_Entry): Call Resolve_Implicit_Dereference on the prefix. + (Resolve_Indexed_Component): Call Implicitly_Designated_Type to + get the designated type for an implicit dereference and + Resolve_Implicit_Dereference on the prefix at the end. + (Resolve_Selected_Component): Likewise. + (Resolve_Slice): Likewise. Do not apply access checks here. + * sem_util.ads (Implicitly_Designated_Type): Declare. + * sem_util.adb (Copy_And_Maybe_Dereference): Simplify. + (Implicitly_Designated_Type): New function. + (Object_Access_Level): Fix typo. + * sem_warn.adb (Check_Unset_Reference): Test Comes_From_Source + on the original node. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * exp_disp.adb: Minor reformatting. + * exp_aggr.adb (Is_Static_Dispatch_Table_Aggregate): Recognize + aggregates of the Ada.Tags.Object_Specific_Data type as static. + * sem_aggr.adb (Check_Static_Discriminated_Subtype): Deconstruct + and do not call it from Build_Constrained_Itype. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * exp_disp.adb (Make_Secondary_DT): Internally generated OSD + tables are now constant. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * exp_aggr.adb (Backend_Processing_Possible): Remove useless + call. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * opt.ads (Building_Static_Dispatch_Tables): Fix punctuation in + comment. + +2020-06-11 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-stposu.ads (Root_Storage_Pool_With_Subpools, + Root_Subpool): Mark with Preelaborable_Initialization. + +2020-06-11 Javier Miranda <miranda@adacore.com> + + * exp_ch9.adb (Expand_N_Conditional_Entry_Call): Replace call to + New_Copy_List by calls to the new routine + New_Copy_Separate_List. + * sem_util.ads (New_Copy_Separate_List, New_Copy_Separate_Tree): + New routines. + * sem_util.adb (New_Copy_Separate_List, New_Copy_Separate_Tree): + New routines. + (New_Copy_Tree): Extend the machinery that detects syntactic + nodes to handle lists of indentifiers with field More_Ids; + otherwise such nodes are erroneously handled as semantic nodes. + Copy aspect specifications attached to nodes. + * sem_ch12.adb (Copy_Generic_Node): Protect reading attribute + Etype. + +2020-06-11 Bob Duff <duff@adacore.com> + + * sem_ch13.adb (Analyze_Aspect_Specifications): Do not set the + Has_Predicates flag when the Predicate_Failure aspect is seen. + It is legal (but pointless) to use this aspect without a + predicate. If we set the flag, we generate a half-baked + Predicate procedure, and if that procedure is nested, it causes + unnesting to crash. + +2020-06-11 Bob Duff <duff@adacore.com> + + * exp_put_image.adb (Build_Record_Put_Image_Procedure): Remove + special processing of protected types, because those are handled + by Build_Protected_Put_Image_Call. + (Enable_Put_Image): Use the switch -gnatd_z to control enabling + of Put_Image. Disable Put_Image for types in Remote_Types + packages. + * debug.adb: Document -gnatd_z switch. + * exp_imgv.adb, libgnat/a-stteou.ads, opt.ads: Minor cleanups. + +2020-06-11 Piotr Trojanek <trojanek@adacore.com> + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Add label to the + outer loop and use it in the exit statement. + +2020-06-11 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_ch3.adb (Build_Assignment): Generate predicate check if + subtype mark has predicate. + +2020-06-11 Justin Squirek <squirek@adacore.com> + + * sem_util.adb (Expand_N_Attribute_Reference): Use original + nodes where required to avoid looking at the expanded tree. + +2020-06-11 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-catizo.ads, libgnat/a-nbnbin.ads, + libgnat/a-nbnbre.ads, libgnat/a-nubinu.ads, + libgnat/s-aoinar.ads, libgnat/s-aomoar.ads, + libgnat/s-aotase.ads, libgnat/s-stopoo.ads: Remove aspects that + we will not implement. + +2020-06-11 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-aoinar.adb (Atomic_Fetch_And_Add, + Atomic_Fetch_And_Subtract): Add fallback using + compare-and-exchange, in case the integer type does not map to a + machine type. + +2020-06-10 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-aomoar.ads, libgnat/s-aomoar.adb: New files. + * libgnat/s-atopar.ads: Move... + * libgnat/s-aoinar.ads: Here. + * libgnat/s-atopar.adb: Move... + * libgnat/s-aoinar.adb: Here. + * impunit.adb: Update list of runtime files. + * Makefile.rtl (GNATRTL_NONTASKING_OBJS=): Adjust. + +2020-06-10 Arnaud Charlet <charlet@adacore.com> + + * snames.ads-tmpl (Name_Characters_Assertion_Check, + Name_Containers_Assertion_Check, + Name_Interfaces_Assertion_Check, Name_IO_Assertion_Check, + Name_Numerics_Assertion_Check, Name_Strings_Assertion_Check, + Name_System_Assertion_Check): New constants. + * types.ads (Characters_Assertion_Check, + Containers_Assertion_Check, Interfaces_Assertion_Check, + IO_Assertion_Check, Numerics_Assertion_Check, + Strings_Assertion_Check, System_Assertion_Check): New constants. + (All_Checks): Update accordingly. + +2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> + + * exp_ch3.adb (Build_Equivalent_Record_Aggregate): Return Empty + if Etype of record component has predicates. + +2020-06-10 Arnaud Charlet <charlet@adacore.com> + + * exp_ch3.adb (Build_Init_Statements): Implement the notion of + "require late initialization". + +2020-06-10 Eric Botcazou <ebotcazou@adacore.com> + + * sem_util.adb (Copy_And_Maybe_Dereference): Temporarily copy + the parent node of the original tree when dereferencing. + +2020-06-10 Ed Schonberg <schonberg@adacore.com> + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Add a warning when + two actuals in a call overlap, both are composite types that may + be passed by reference, and only one of them is writable. + +2020-06-10 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_N_In): Use an expression with actions to + insert the PE raise statement for the Unchecked_Union case. + +2020-06-10 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch4.adb (Analyze_Call): Use idiomatic condition. + * sem_res.adb (Resolve_Call): Remove obsolete code. + +2020-06-10 Eric Botcazou <ebotcazou@adacore.com> + + * sem_util.adb (Copy_And_Maybe_Dereference): New function. + (Build_Access_Record_Constraint): Use it to copy the prefix. + (Build_Actual_Array_Constraint): Likewise. + (Build_Actual_Record_Constraint): Likewise. + +2020-06-10 Bob Duff <duff@adacore.com> + + * sem_prag.adb (Invariant): Remove the pragma removing code. It + doesn't work to remove the pragma, because various flags are set + during Build_Invariant_Procedure_Declaration and + Build_Invariant_Procedure_Body that need to be set to avoid the + spurious warnings. + * exp_util.adb (Make_Invariant_Call): Avoid calling the + invariant-checking procedure if the body is empty. This is an + optimization. + +2020-06-10 Vasiliy Fofanov <fofanov@adacore.com> + + * doc/gnat_ugn/gnat_utility_programs.rst: Fix gnatmetric + switches description. + +2020-06-10 Arnaud Charlet <charlet@adacore.com> + + * repinfo-input.ads, repinfo-input.adb, repinfo.adb, + repinfo.ads: Update header. + +2020-06-10 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb (In_Place_Assign_OK): Do not necessarily return + false for a type with discriminants. + (Convert_To_Assignments): Use Parent_Node and Parent_Kind more + consistently. In the in-place assignment case, first apply a + discriminant check if need be, and be prepared for a rewritten + aggregate as a result. + +2020-06-10 Arnaud Charlet <charlet@adacore.com> + + * atree.adb, contracts.adb, debug.adb, freeze.adb, + repinfo-input.adb, repinfo.adb, sem_attr.adb, sem_ch10.adb, + sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_ch6.adb, + sem_ch8.adb, sem_ch9.adb, sem_disp.adb, sem_eval.adb, + sem_prag.adb: Remove more references to ASIS. + +2020-06-10 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-secsta.adb (Round_Up): Fix typo in exception + message. + +2020-06-10 Piotr Trojanek <trojanek@adacore.com> + + * par-ch4.adb (P_Membership_Test): Fix typo in a grammar rule. + +2020-06-10 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove + expansion of First and Last attributes. + +2020-06-10 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Remove folding + for Enum_Rep attribute. + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove + duplicated code for folding Enum_Rep attribute. + * sem_attr.adb (Eval_Attribute): Relax condition for folding + Enum_Rep attribute; previously dead code is now executed when + the attribute prefix is an enumeration literal; refine type in + processing of Enum_Val. + +2020-06-10 Javier Miranda <miranda@adacore.com> + + * sem_ch3.adb (Analyze_Declarations): Adjust the machinery that + takes care of late body overriding of initialize, adjust, + finalize. Remove ASIS mode code. + +2020-06-10 Ed Schonberg <schonberg@adacore.com> + + * einfo.ads (Access_Subprogram_Wrapper): New attribute of + Subprogram_Type entities. Denotes subprogram constructed for + Access_To_Subprogram types that include pre- and postconditions. + * einfo.adb: Subprogram bodies for Access_Subprogram_Wrapper. + * exp_ch6.adb (Expand_Call): An indirect call through an + Access_To_subprogram that includes contracts is rewritten as a + call to the corresponding Access_ ubprogram_Wrapper. Handle + derived types that inherit contract from parent. + * sem_prag.adb (Build_Access_Subprogram_Wrapper): Build + subprogram declaration for subprogram that incorporates the + contracts of an Access_To_Subprogram type declaration. Build + corresponding body and attach it to freeze actions for type. + * sem_util.ads, sem_util.adb (Is_Access_Subprogram_Wrapper): + Utility that uses signature of the subprogram to determine + whether it is a generated wrapper for an Access_To_Subprogram + type. + +2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> + + * par-ch6.adb (P_Subprogram): Make sure the specification + belongs to a procedure. + +2020-06-10 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (All_Membership_Choices_Static): Assert an AST + property documented in sinfo.ads and simplify an excessive + condition. + +2020-06-10 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Fix a copy-paste + mistake in comment. + * sem_res.adb (Flag_Effectively_Volatile_Objects): Fix a type in + the SPARK RM rule number. + * exp_ch4.adb, sem_util.adb: Fix style in single line comments. + +2020-06-10 Piotr Trojanek <trojanek@adacore.com> + + * sem_aux.ads, sem_aux.adb (Get_Low_Bound): Remove. + +2020-06-10 Arnaud Charlet <charlet@adacore.com> + + * scn.adb (Determine_License): Remove. + +2020-06-10 Justin Squirek <squirek@adacore.com> + + * exp_ch3.adb (Expand_N_Object_Declaration): Add condition to + handle processing of objects initialized by a call to a function + return an anonymous access type. + * exp_ch6.adb, exp_ch6.ads + (Has_Unconstrained_Access_Discriminants): Moved to sem_util.adb + (Needs_Result_Accessibility_Level): Moved to sem_util.adb + * sem_util.adb, sem_util.ads + (Has_Unconstrained_Access_Discriminants): Moved from exp_ch6.adb + (Needs_Result_Accessibility_Level): Moved from exp_ch6.adb + * sem_res.adb (Valid_Conversion): Add condition for the special + case where the operand of a conversion is the result of an + anonymous access type + +2020-06-10 Ghjuvan Lacambre <lacambre@adacore.com> + + * par-ch6.adb (P_Subprogram): Reject duplicate subprogram + declarations. + +2020-06-10 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch6.adb (Insert_Post_Call_Actions): Deal with the context + of an if-expression and with a call written in prefixed notation. + +2020-06-10 Gary Dismukes <dismukes@adacore.com> + + * einfo.ads: Minor reformatting of a comment. + * exp_aggr.adb: Minor reformatting and a grammar correction. + * exp_attr.adb: Minor reformatting and a typo fix in some + comments. + * sem_ch12.adb: Fix three typos in comments. + +2020-06-09 Javier Miranda <miranda@adacore.com> + + * sem_ch6.adb (New_Overloaded_Entity): Add missing call to check + subtype conformance of overriding dispatching primitive. + * sem_eval.adb (Subtypes_Statically_Match): Handle derivations + of private subtypes. + * libgnat/g-exptty.adb, libgnat/g-exptty.ads + (Set_Up_Communications): Fix the profile since null-exclusion is + missing in the access type formals. + * sem_disp.ads (Check_Operation_From_Private_View): Adding + documentation. + +2020-06-09 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (XEINFO section): Update format description. + (Is_Subprogram_Or_Entry): Move pragma to regular section. + (Is_Subprogram_Or_Generic_Subprogram): Likewise. + * xeinfo.adb (Get_B4): Rename to... + (Get_B0): ...this. + (Translate_Expr): New procedure extracted from... + (XEinfo): ...here. Try to apply Get_B0 first and then + call Translate_Expr to translate supported constructs. + +2020-06-09 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch6.adb (Freeze_Subprogram): Deal with convention C_Family. + * freeze.adb (Freeze_Profile): Likewise. Add missing guard. + * sem_mech.adb (Set_Mechanisms): Likewise. + * lib-xref.adb (Output_Import_Export_Info): Ditto for C_Variadic. + * repinfo.adb (List_Subprogram_Info): Likewise. + * sem_prag.adb (Set_Convention_From_Pragma): Move main checks for + Stdcall to... + (Process_Convention): ...here. Add checks for C_Variadic. + * snames.ads-tmpl: Add Name_C_Variadic_0 .. Name_C_Variadic_16. + Use consistent format for subtype declarations. + (Convention_Id): Add Convention_C_Variadic_0 .. C_Variadic_16 + and move Convention_CPP up. + (Convention_C_Family): New subtype of Convention_Id. + (Convention_C_Variadic): Likewise. + (Foreign_Convention): Use explicit upper bound. + Add pragma Inline for Is_Configuration_Pragma_Name, + Is_Function_Attribute_Name, Is_Internal_Attribute_Name + and Is_Procedure_Attribute_Name. + * snames.adb-tmpl (Get_Convention_Id): Deal with Name_Variadic_n. + (Get_Convention_Name): Deal with Convention_Variadic_n. + * types.h (Convention_Id): New typedef. + * xsnamest.adb (Name2): New variable. + (Is_Conv): New pattern. + (Get_Subt1): Likewise. + (Get_Subt2): Likewise. + Output subtypes of Convention_Id into the C header file. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * exp_ch3.adb, exp_ch4.adb, exp_ch6.adb, exp_ch9.adb, + exp_disp.adb, exp_util.adb: Add comments related to errors that + should be moved to semantic analysis. Also replace "?" with "??" + in warning messages. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-strunb__shared.ads, libgnat/a-strunb__shared.adb + (Reference, Unreference): No-op for Empty_Shared_String. + Remove unneeded calls to Reference. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * exp_ch5.adb (Expand_N_Assignment): Remove kludge for + AI05-0087. + * sem_ch12.adb (Validate_Derived_Type_Instance): Implement + AI05-0087 retroactively since it's a binding interpretation. + +2020-06-09 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (Has_Foreign_Convention): Fix description. + (Component_Alignment): Move around. + (Has_DIC): Likewise. + (Has_Interrupt_Handler): Likewise. + (Has_Invariants): Likewise. + (Is_Atomic_Or_VFA): Likewise. + (Next_Index): Likewise. + (Scope_Depth): Likewise. + (Init_Component_Size): Likewise. + (Init_Component_Location): Likewise. + (Init_Size): Likewise. + (Inline Pragmas for functions): Add Corresponding_Function, + Corresponding_Procedure, Entry_Max_Queue_Lengths_Array, + Finalize_Storage_Only, Has_DIC, Has_Invariants, + Initialization_Statements, Is_Anonymous_Access_Type, + Next_Stored_Discriminant, Address_Clause, Alignment_Clause, + Float_Rep, Has_Foreign_Convention, Has_Non_Limited_View, + Is_Constant_Object, Is_Discriminal, Is_Finalizer, Is_Null_State, + Is_Prival, Is_Protected_Component, Is_Protected_Record_Type, + Is_Subprogram_Or_Entry, Is_Task_Record_Type, Size_Clause, + Stream_Size_Clause, Type_High_Bound, Type_Low_Bound, Known_*, + Unknown_*. + (Inline Pragmas for procedures): Add Set_Corresponding_Function, + Set_Corresponding_Procedure, Set_Finalize_Storage_Only, + Set_Float_Rep, Set_Initialization_Statements, + Init_Normalized_First_Bit, Init_Normalized_Position, + Init_Normalized_Position_Max. + * einfo.adb (Was_Hidden): Move around. + (Is_Packed_Array): Likewise. + (Model_Emin_Value): Likewise. + (Model_Epsilon_Value): Likewise. + (Model_Mantissa_Value): Likewise. + (Model_Small_Value): Likewise. + +2020-06-09 Ed Schonberg <schonberg@adacore.com> + + * sem_ch12.adb (Check_Shared_Variable_Control_Aspects): Require + exact match between formal and actual for aspects Atomic and + Volatile only for formal derived types. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * exp_util.adb (Side_Effect_Free): Improve handling of + N_Aggregate. + +2020-06-09 Ghjuvan Lacambre <lacambre@adacore.com> + + * sem_res.adb (Resolve_Qualified_Expression): Use Subtype_Mark + type. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * exp_aggr.adb (Max_Aggregate_Size): New function to factorize + code. + (Convert_To_Positional, Aggr_Size_OK): Use Max_Aggregate_Size. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * sem_util.ads, sem_util.adb (Set_Debug_Info_Defining_Id): New. + * exp_ch3.adb, exp_ch8.adb: Call Set_Debug_Info_Defining_Id when + relevant. + +2020-06-09 Justin Squirek <squirek@adacore.com> + + * einfo.ads (Returns_By_Ref): Modify documentation to reflect + that Returns_By_Ref can be applied to E_Subprogram_Type + entities. + +2020-06-09 Justin Squirek <squirek@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference): Modify expansion + of 'Overlaps_Storage to take into account zero sized arrays. + +2020-06-09 Bob Duff <duff@adacore.com> + + * bindo-graphs.adb, bindo-graphs.ads: For each invocation graph, + record the corresponding library graph. + * bindo-writers.adb (Write_Invocation_Graph_Vertex): Print the + lib item name. Remove library graph parameters. + * bindo-augmentors.adb, bindo-augmentors.ads, + bindo-builders.adb, bindo-diagnostics.adb, + bindo-diagnostics.ads, bindo-elaborators.adb: Remove library + graph parameters. + +2020-06-09 Eric Botcazou <ebotcazou@adacore.com> + + * checks.adb (Apply_Predicate_Check): Extend trick used for + aggregates to qualified aggregates and object declarations + * einfo.ads (Has_Own_DIC): Mention the underlying full view. + (Has_Own_Invariants): Likewise. + (Has_Predicates): Likewise. + * exp_util.adb (Build_DIC_Procedure_Declaration): Do not deal + with base types explicitly but with underlying full views. + (Build_Invariant_Procedure_Declaration): Likewise. + * sem_ch13.adb (Build_Predicate_Functions): Do not deal with + the full view manually but call Propagate_Predicate_Attributes + to propagate attributes to views. + (Build_Predicate_Function_Declaration): Likewise. + * sem_ch3.adb (Build_Assertion_Bodies_For_Type): Build bodies + for private full views with an underlying full view. + (Build_Derived_Private_Type): Small comment tweak. + (Complete_Private_Subtype): Call Propagate_Predicate_Attributes. + (Process_Full_View): Do not deal with base types explicitly for + DIC and Invariant attributes. Deal with underlying full views + for them. Call Propagate_Predicate_Attributes and deal with + underlying full views for them. + * sem_ch7.adb (Preserve_Full_Attributes): Do not cross propagate + DIC and Invariant attributes between full type and its base type. + Propagate Predicate attributes from the full to the private view. + * sem_ch9.adb (Analyze_Protected_Type_Declaration): Likewise. + (Analyze_Task_Type_Declaration): Likewise. + * sem_util.ads (Get_Views): Remove Full_Base parameter and add + UFull_Typ parameter. + (Propagate_Predicate_Attributes): New procedure. + * sem_util.adb (Get_Views): Remove Full_Base parameter and add + UFull_Typ parameter. Retrieve the Corresponding_Record_Type + from the underlying full view, if any. + (Propagate_DIC_Attributes): Remove useless tests. + (Propagate_Invariant_Attributes): Likewise. + (Propagate_Predicate_Attributes): New procedure. + +2020-06-09 Justin Squirek <squirek@adacore.com> + + * exp_ch5.adb (Expand_Predicated_Loop): Perserve the original + loop identifier within the expansion. + +2020-06-09 Bob Duff <duff@adacore.com> + + * bindo-graphs.ads (Library_Graph_Edge_Kind): Reorder enumerals + to reflect the order of adding edges. Clarify comments. + * bindo-graphs.adb (Add_Edge_Kind_Check): Correct the + assertions. Reorder the "when"s to match the order of adding + edges, and therefore the order of enumerals in type + Library_Graph_Edge_Kind. Change names to "Old_" and "New_" to + clarify what's what. Combine Invocation_Edge into the "<=" + test. Fix the "raise Program_Error" message, which was + backwards. + +2020-06-09 Bob Duff <duff@adacore.com> + + * bindo-graphs.adb (Add_Edge_Kind_Check): Add the Image of the + old and new Kinds to the raise Program_Error message. + +2020-06-09 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch3.adb (Is_Visible_Component): Do not special-case + bodies of instances. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * exp_ch4.adb (Expand_N_In): Fix handling of null exclusion. + +2020-06-09 Ed Schonberg <schonberg@adacore.com> + + * sem_ch12.adb (Check_Shared_Variable_Control_Aspects): Require + exact match between formal and actual for aspects Atomic, + Atomic_Component, Volatile, and Volatile_Components. + +2020-06-09 Bob Duff <duff@adacore.com> + + * doc/gnat_ugn/gnat_utility_programs.rst: Add documentation for + the --no-separate-return switch of gnatpp. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * sem_warn.adb (Warn_On_Constant_Valid_Condition): Add proper + warning tag. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * sem_type.adb (Covers): Fix implementation of AI05-0149. + * sem_res.adb: Fix typo. + +2020-06-09 Ed Schonberg <schonberg@adacore.com> + + * exp_ch9.adb (Build_Master_Renaming): Make name in renaming + declaration unique by adding a numeric suffix, to prevent + accidental name conflict when several instantiations of a + package containing an access_to_incomplete type that designate + tasks appear in the same scope. + +2020-06-09 Piotr Trojanek <trojanek@adacore.com> + + * libgnarl/a-synbar.ads, libgnarl/a-synbar.adb, + libgnarl/a-synbar__posix.ads, libgnarl/a-synbar__posix.adb + (Ada.Synchronous_Barriers): Annotate with SPARK_Mode => Off. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * sem_eval.adb (Eval_Relational_Op, Eval_String_Literal, + Eval_Type_Conversion): Relax rules on relational operators and + type conversions of static string types. + +2020-06-09 Arnaud Charlet <charlet@adacore.com> + + * sem_util.ads, sem_util.adb (Is_Partially_Initialized_Type): + Take Default_Value and Default_Component_Value into account. + * sem_ch3.adb (Analyze_Object_Declaration): Update comment. + +2020-06-09 Bob Duff <duff@adacore.com> + + * bindo-graphs.adb (Add_Edge_Kind_Check): Disable failing part + of the assertion. + +2020-06-08 Steve Baird <baird@adacore.com> + + * sem_prag.adb (Analyze_Pragma.Set_Ravenscar_Profile): Add + appropriate call to Set_Restriction_No_Dependence if Ada_Version + >= Ada2012 and Profile is either Ravenscar or a GNAT-defined + Ravenscar variant (i.e., not Jorvik). + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * sem_ch5.adb: Fix typo. + * sem_ch8.adb (Analyze_Renamed_Primitive_Operation): Check that + the prefix of a prefixed view must be renamable as an object. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * sem_cat.ads: Fix typo. + * sem_cat.adb (Validate_Remote_Access_To_Class_Wide_Type): Add + handling of N_Attribute_Definition_Clause. + * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Call + Validate_Remote_Access_To_Class_Wide_Type for Storage_Size and + Storage_Pool. + * sem_attr.adb, exp_ch4.adb: Update comments. + +2020-06-08 Justin Squirek <squirek@adacore.com> + + * sem_ch4.adb (Analyze_One_Call): Add extra condition to the + predicate for deciding when a given controlled call is visible. + +2020-06-08 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Port + changes in frontend expander. + +2020-06-08 Piotr Trojanek <trojanek@adacore.com> + + * sem_ch13.adb (All_Membership_Choices_Static): Fix style. + +2020-06-08 Steve Baird <baird@adacore.com> + + * libgnat/s-rident.ads: Add Jorvik to the Profile_Name + enumeration type. Add an element for Jorvik to the array + aggregate that is the initial value of the constant + Profile_Info. + * targparm.adb (Get_Target_Parameters): Handle "pragma Profile + (Jorvik);" similarly to "pragma Profile (Ravenscar);". + * snames.ads-tmpl: Declare Name_Jorvik Name_Id. Unlike + Ravenscar, Jorvik is not a pragma name and has no corresponding + element in the Pragma_Id enumeration type; this means that its + declaration must not occur between those of First_Pragma_Name + and Last_Pragma_Name. + * sem_prag.adb (Analyze_Pragma): Add call to + Set_Ravenscar_Profile for Jorvik, similar to the existing calls + for Ravenscar and the GNAT Ravenscar variants. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Analyze_Object_Renaming): Update Get_Object_Name + to go through N_Qualified_Expression and N_Type_Conversion. Fix + another case of wrong usage of E_Anonymous_Access_Type instead + of Anonymous_Access_Kind. + * sem_util.adb (Is_Dependent_Component_Of_Mutable_Object): Work + on the original node. + (Is_Aliased_View): Take into account N_Qualified_Expression. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * sem_eval.adb (Eval_Type_Conversion): Fix handling of + enumeration to integer conversions. + * exp_attr.adb (Expand_N_Attribute_Reference + [Attribute_Enum_Rep]): Remove special casing for first-level + renaming, best left to the general folding mechanism via + Eval_Type_Conversion. + +2020-06-08 Eric Botcazou <ebotcazou@adacore.com> + + * atree.adb (New_Copy): Do not clear Has_Dynamic_Range_Check. + * checks.ads (Append_Range_Checks): Remove Flag_Node parameter. + (Insert_Range_Checks): Likewise and remove default value of + Static_Loc parameter. + * checks.adb (Append_Range_Checks): Remove Flag_Node parameter. + Do not test and set Has_Dynamic_Range_Check. + (Insert_Range_Checks): Likewise and remove default value of + Static_Loc parameter. + * csinfo.adb (CSinfo): Remove 'L' from [NEUB]_Fields pattern and + do not handle Has_Dynamic_Range_Check. + * exp_ch5.adb (Expand_N_Assignment_Statement): Remove argument + in call to Insert_Range_Checks. + * sem_ch3.adb (Analyze_Subtype_Declaration): Do not fiddle + with Has_Dynamic_Range_Check. + (Process_Range_Expr_In_Decl): Remove argument in calls to + Insert_Range_Checks and Append_Range_Checks. + * sinfo.ads (Has_Dynamic_Range_Check): Delete. + (Set_Has_Dynamic_Range_Check): Likewise. + * sinfo.adb (Has_Dynamic_Range_Check): Delete. + (Set_Has_Dynamic_Range_Check): Likewise. + * treepr.adb (Print_Node): Do not print Has_Dynamic_Range_Check. + +2020-06-08 Steve Baird <baird@adacore.com> + + * sem_ch13.ads: Export new function + All_Membership_Choices_Static. + * sem_ch13.adb: Implement new function + All_Membership_Choices_Static. This involves moving the + functions Is_Static_Choice and All_Membership_Choices_Static, + which were previously declared within the function + Is_Predicate_Static, out to library level so that they can be + called by the new function. The already-exisiting code in + Is_Predicate_Static which became the body of + All_Membership_Choices_Static is replaced with a call to the new + function in order to avoid duplication. + * exp_ch9.adb (Is_Pure_Barrier): Several changes needed to + implement rules of AI12-0290 and RM D.7's definition of + "pure-barrier-eligible". These changes include adding a call to + the new function Sem_13.All_Membership_Choices_Static, as per + the "see 4.9" in RM D.7(1.6/5). + +2020-06-08 Richard Kenner <kenner@adacore.com> + + * exp_unst.adb (Visit_Node): When visiting array attribute + nodes, in addition to checking the type of Get_Referenced_Object + of the prefix, also check the actual type of the prefix. + +2020-06-08 Gary Dismukes <dismukes@adacore.com> + + * checks.adb (Apply_Predicate_Check): Refine test for being in a + subprogram body to account for no Corresponding_Body case, + avoiding blowups arising due to other changes here. + * exp_ch4.adb (Expand_N_Qualified_Expression): Apply predicate + checks, if any, after constraint checks are applied. + * sem_eval.ads (Check_Expression_Against_Static_Predicate): Add + Check_Failure_Is_Error formal for conditionalizing warning vs. + error messages. + * sem_eval.adb (Check_Expression_Against_Static_Predicate): + Issue an error message rather than a warning when the new + Check_Failure_Is_Error formal is True. In the nonstatic or + Dynamic_Predicate case where the predicate is known to fail, + emit the check to ensure that folded cases get checks applied. + * sem_res.adb (Resolve_Qualified_Expression): Call + Check_Expression_Against_Static_Predicate, passing True for + Check_Failure_Is_Error, to ensure we reject static predicate + violations. Remove code that was conditionally calling + Apply_Predicate_Check, which is no longer needed, and that check + procedure shouldn't be called from a resolution routine in any + case. Also remove associated comment about preventing infinite + recursion and consistency with Resolve_Type_Conversion, since + that handling was already similarly removed from + Resolve_Type_Convesion at some point. + (Resolve_Type_Conversion): Add passing of True for + Check_Failure_Is_Error parameter on call to + Check_Expression_Against_Static_Predicate, to ensure that static + conversion cases that violate a predicate are rejected as + errors. + +2020-06-08 Piotr Trojanek <trojanek@adacore.com> + + * snames.ads-tmpl (Name_SPARK): Restore after being deleted. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * exp_aggr.adb, exp_ch6.adb, par-ch11.adb, par-ch6.adb, + par-ch7.adb, par-prag.adb, restrict.adb, restrict.ads, + scans.ads, scng.adb, sem_aggr.adb, sem_attr.adb, sem_ch11.adb, + sem_ch12.adb, sem_ch3.adb, sem_ch3.ads, sem_ch4.adb, + sem_ch5.adb, sem_ch6.adb, sem_ch7.adb, sem_ch8.adb, sem_ch9.adb, + sem_res.adb, sem_util.adb, sem_util.ads, snames.ads-tmpl, + gnatbind.adb, libgnat/s-rident.ads, + doc/gnat_rm/standard_and_implementation_defined_restrictions.rst: + Remove processing of SPARK_05 restriction. + * gnat_rm.texi: Regenerate. + * opt.ads: Remove processing of old checksum which is now + handled by gprbuild directly. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * sem_ch12.adb (Instantiate_Object): Relax rules related to null + exclusions and generic objects. Handle all anonymous types + consistently and not just E_Anonymous_Access_Type. + * sem_ch8.adb (Analyze_Object_Renaming): Change wording so that + it applies to both renamings and instantiations to avoid + confusion. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-textio.ads (File_Mode): Fix typo in comment. + +2020-06-08 Eric Botcazou <ebotcazou@adacore.com> + + * sem_res.adb (Resolve_Indexed_Component): Do not give a warning + for a nonatomic component of an atomic array which is subject to + an address clause in Ada 2020 mode. + (Resolve_Selected_Component): Likewise for an atomic record. + +2020-06-08 Philippe Gil <gil@adacore.com> + + * doc/gnat_ugn/the_gnat_compilation_model.rst: in "Handling + Files with Multiple Units" part documents gnatname use for + unmodified files handling and gnatchop use for files + refactoring. + * gnat_ugn.texi: Regenerate. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * doc/gnat_rm/implementation_defined_attributes.rst: + Enum_Rep/Enum_Val are standard Ada 202x attributes. + * gnat_rm.texi: Regenerate. + +2020-06-08 Javier Miranda <miranda@adacore.com> + + * exp_aggr.adb (Safe_Component): Remove code that considers as + unsafe components that are aggregates; such removal allows the + frontend to proceed and evaluate if they are safe by means of + invoking Safe_Aggregate. + +2020-06-08 Piotr Trojanek <trojanek@adacore.com> + + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Apply + standard expansion to attributes First and Last. + +2020-06-08 Piotr Trojanek <trojanek@adacore.com> + + * exp_attr.adb, exp_util.ads, exp_util.adb (Get_Index_Subtype): + Move from the body of Exp_Attr to Exp_Util and expose from the + spec. + * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Replace + duplicated code with a call to Get_Index_Subtype. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * sem_ch8.adb (Analyze_Object_Renaming): Simplify code by moving + many special cases to Is_Object_Reference and removing others by + only checking renamings coming from sources. + * sem_util.adb (Is_Object_Reference): Update for AI12-0226 and + add more regular handling of 'Priority. Remove special cases no + longer needed now that we are only checking renamings coming + from sources. + +2020-06-08 Claire Dross <dross@adacore.com> + + * libgnat/a-cofove.adb (Insert_Space): The computation of Index + generates a spurious compiler warning about a value not being in + range for a statically dead branch. Silence it using pragma + Warnings. + +2020-06-08 Bob Duff <duff@adacore.com> + + * bindo-graphs.adb (function Add_Edge): Rename + Add_Edge_With_Return to Add_Edge; we can tell it returns because + it's a function, and overloading seems appropriate in this case. + If Activates_Task=True, and we're not going to add a new edge + because an existing Pred-->Succ edge already exists, then set + Activates_Task to True on the preexisting edge. This ensures + that the message: + info: use pragma Restrictions (No_Entry_Calls_In_Elaboration_Code) + appears when appropriate, no matter in what order the edges + happened to be processed. + (procedure Add_Edge): Remove redundant assertions. + (Activates_Task): Other kinds of edges can have + Activates_Task=True. For example, if we had a With_Edge and + then an Invocation_Edge with Activates_Task=True, then the + With_Edge has Activates_Task set to True. + (Add_Edge_Kind_Check): New procedure to prevent other bugs of + this nature. For example, if we were to sometimes call Add_Edge + for a Spec_Before_Body_Edge followed by Add_Edge for a + With_Edge, and sometimes in the other order, that would cause a + similar bug to what we're fixing here. + (Set_Is_Recorded_Edge): Val parameter is not used. Get rid of + it. + (Set_Activates_Task): New procedure to set the Activates_Task flag. + * bindo-graphs.ads (Library_Graph_Edge_Kind): Reorder the + enumeration literals to facilitate Add_Edge_Kind_Check. + * ali.adb (Known_ALI_Lines): The comment about "still available" + was wrong. Fix that by erasing the comment, and encoding the + relevant information in real code. Take advantage of Ada's full + coverage rules by removing "others =>". Also DRY. + +2020-06-08 Ed Schonberg <schonberg@adacore.com> + + * par-ch12.adb (P_Formal_Derived_Type_Definition): Handle + properly formal derived types that include aspect + specifications, so that the "with" keyword appears twice in the + formal type declaration. + * sem_ch13.adb (Has_Generic_Parent): Return true if the type + itself is a generic formal. + +2020-06-08 Dmitriy Anisimkov <anisimko@adacore.com> + + * socket.c (__gnat_minus_500ms): Remove + IsWindowsVersionOrGreater from condition. + +2020-06-08 Claire Dross <dross@adacore.com> + + * libgnat/a-cfdlli.ads, libgnat/a-cfhama.ads, + libgnat/a-cfhase.ads, libgnat/a-cforma.ads, libgnat/a-cforse.ads + (Delete): Add Depends contract. + +2020-06-08 Arnaud Charlet <charlet@adacore.com> + + * snames.ads-tmpl (Name_Program_Error_Check, + Name_Tasking_Check): New constants. + * types.ads (Program_Error_Check, Tasking_Check): New constants. + (All_Checks): Update accordingly. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * sem_prag.adb (Validate_Compile_Time_Warning_Or_Error): Use ??. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * cstand.adb (Create_Standard): Update comments. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * scng.adb (Scan): Fix typo to take into account all future + versions of Ada. + * sem_attr.ads (Attribute_Impl_Def): Add Attribute_Reduce for + now. + * sem_attr.adb (Analyze_Attribute): Only allow 'Reduce under + -gnatX. + * snames.ads-tmpl (Name_Reduce): Update comment. + +2020-06-05 Thomas Quinot <quinot@adacore.com> + + * exp_disp.adb (Expand_Interface_Thunk): Add comment about + gnatcov reliance on specific name used for thunks. + +2020-06-05 Ed Schonberg <schonberg@adacore.com> + + * sem_ch3.adb (Analyze_Subtype_Declaration): For scalar types, + and for subtype declarations without a constraint, subtype + inherits Atomic flag from base type. + +2020-06-05 Piotr Trojanek <trojanek@adacore.com> + + * doc/gnat_rm/implementation_defined_attributes.rst (Enum_Rep): + Remove extra colon. + * gnat_rm.texi: Regenerate. + +2020-06-05 Eric Botcazou <ebotcazou@adacore.com> + + * atree.adb (New_Copy): Clear Has_Dynamic_Range_Check on + subexpression nodes. + * checks.adb (Append_Range_Checks): Assert that the node + doesn't have the Has_Dynamic_Range_Check flag set. + (Insert_Range_Checks): Likewise. + * exp_ch3.adb (Expand_N_Subtype_Indication): Do not apply + range checks for a full type or object declaration. + * sem_ch3.ads: Move with and use clauses for Nlists to... + (Process_Range_Expr_In_Decl): Change default to No_List for + the Check_List parameter. + * sem_ch3.adb: ...here. + (Process_Range_Expr_In_Decl): Likewise. When the insertion + node is a declaration, only insert on the list if is present + when the declaration involves discriminants, and only insert + on the node when there is no list otherwise. + +2020-06-05 Piotr Trojanek <trojanek@adacore.com> + + * sem_aggr.adb (Resolve_Record_Aggregate): Create the + N_Aggregate node with its Expressions field set to No_List and + not to an empty list. + +2020-06-05 Dmitriy Anisimkov <anisimko@adacore.com> + + * libgnat/s-os_lib.adb (Is_Dirsep): Moved from Build_Path to + package level to reuse. + (Normalize_Pathname.Final_Value): Reduce 2 'if' statements to + one. + (Normalize_Pathname.Fill_Directory): New procedure instead of + function Get_Directory. Remove slash to backslash conversion and + drive letter uppercasing on Windows. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * sem.adb (Assert_Done): Relax check for main unit, as it was + overzealous in the case of the main unit itself. + +2020-06-05 Piotr Trojanek <trojanek@adacore.com> + + * exp_ch3.adb, sem_ch8.adb, sem_util.adb: Use Is_Incomplete_Type + to make the code easier to read. + +2020-06-05 Piotr Trojanek <trojanek@adacore.com> + + * einfo.adb: Minor reformatting. + * sem_util.adb (Has_Full_Default_Initialization, + Is_Partially_Initialized_Type, Caller_Known_Size_Record, + Large_Max_Size_Mutable): Iterate with + First_Component/Next_Component; rename Ent to Comp. + +2020-06-05 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Use + Expr_Rep_Value instead of Expr_Value to obtain the equivalent + integer value. + * sem_eval.ads (Expr_Value): Document more supported cases. + * sem_eval.adb (Expr_Rep_Value): Copy missing cases from + Exp_Value. + +2020-06-05 Bob Duff <duff@adacore.com> + + * rtsfind.adb, rtsfind.ads: Move subtypes of RTU_Id into package + body, because they are not needed by clients. Change "Child_" to + "Descendant", because grandchildren and great grandchildren are + involved. Replace all the repetitive comments with a single + concise one. Change the parent subtypes to be more consistent; + use the most specific parent. + +2020-06-05 Piotr Trojanek <trojanek@adacore.com> + + * rtsfind.ads, rtsfind.adb (Is_Text_IO_Special_Package): Moved + from the GNATprove backend to the frontend. + +2020-06-05 Yannick Moy <moy@adacore.com> + + * sem_util.ads: Add comment about function only used in + CodePeer. + +2020-06-05 Ed Schonberg <schonberg@adacore.com> + + * sem_ch9.adb, (Analyze_Task_Body): After analying the task + body, indicate that all local variables have no delayed aspects. + This prevents improper later calls to + Check_Aspect_At_End_Of_Declarations, that would happen when the + constructed task_procedure body (generated during expansion) is + analyzed. The legality of aspect specifications that may appear + on local declarations has already been established, and it is in + general not possible to recheck them properly during expansion, + when visibility may not be fully established. + +2020-06-05 Piotr Trojanek <trojanek@adacore.com> + + * libgnat/a-cofuve.ads (First): Add Global contract. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * sem_prag.adb (Set_Convention_From_Pragma): Set the convention + of anonymous access array components. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-calfor.ads, libgnat/a-catizo.ads, + libgnat/a-catizo.adb (Local_Time_Offset, Local_Image): New. + (UTC_Time_Offset): Now a renaming of Local_Time_Offset. + +2020-06-05 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch3.adb (Available_Full_View): New function returning + either the full or the underlying full view. + (Build_Full_Derivation): Add guard for the full view. + (Copy_And_Build): Retrieve the underlying full view, if any, + also if deriving a completion. + (Build_Derived_Private_Type): Use Available_Full_View throughout + to decide whether a full derivation must be done. + +2020-06-05 Bob Duff <duff@adacore.com> + + * exp_attr.adb, exp_ch11.adb, exp_imgv.adb, exp_tss.ads, + par-ch4.adb, sem_attr.adb, sem_util.ads: Misc cleanup. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nudira.ads, libgnat/a-nudira.adb (Random): New + function. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * sem_attr.ads (Attribute_Impl_Def): Remove Enum_Rep/Val. + * sem_attr.adb (Attribute_20): New, move Enum_Rep/Val here. + (Analyze_Attribute): Take Attribute_20 into account. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * restrict.ads (Unit_Array): Add a-direct. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-stopoo.ads: Mark package Pure and leave room for + Nonblocking once this aspect is supported. + +2020-06-05 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference) <Valid_Scalars>: + Set the No_Truncation flag on the unchecked conversion built for + scalar types. + +2020-06-05 Bob Duff <duff@adacore.com> + + * einfo.adb, einfo.ads, exp_util.adb: Remove Invariants_Ignored + flag. + * sem_prag.adb (Invariant): Instead of setting a flag to be + checked elsewhere, remove the pragma as soon as it is analyzed + and checked for legality. + +2020-06-05 Eric Botcazou <ebotcazou@adacore.com> + + * checks.ads (Apply_Length_Check): Rename Ck_Node parameter to + Expr. + (Apply_Range_Check): Likewise. + (Get_Range_Checks): Likewise. + * checks.adb (Apply_Float_Conversion_Check): Likewise. + (Apply_Selected_Length_Checks): Likewise. + (Apply_Selected_Range_Checks): Likewise. + (Guard_Access): Likewise. + (Selected_Length_Checks): Likewise. Also avoid shadowing in + child procedures. + (Selected_Range_Checks): Likewise. + +2020-06-05 Arnaud Charlet <charlet@adacore.com> + + * par-ch3.adb, par-ch4.adb, scng.adb, sem_aggr.adb, + sem_ch10.adb, sem_ch12.adb, sem_prag.adb: Update wording: change + Ada_2020 to Ada 2020 in comments and mention -gnat2020 instead + of -gnatX switch. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * libgnat/i-c.ads (long_long, unsigned_long_long): New + definitions. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl: add a-tasini object + * impunit.adb (Non_Imp_File_Names_95): Add s-tasini. + * libgnarl/a-tasini.ads, libgnarl/a-tasini.adb: New files. + * libgnarl/s-taskin.ads (Global_Initialization_Handler): New. + * libgnarl/s-tassta.adb (Task_Wrapper): Call + Global_Initialization_Handler if non null. + +2020-06-04 Ed Schonberg <schonberg@adacore.com> + + * sem_ch12.adb (Build_Suprogram_Body_Wrapper, + Build_Subprogram_Decl_Wrapper): New suprograms, to create the + wrappers needed to implement contracts on formsl subprograms at + the point of instantiation. + (Build_Subprogram_Wrappers): New subprogram within + Analyze_Associations, calls the above when the formal subprogram + has contracts, and expansion is enabled. + (Instantiate_Formal_Subprogram): If the actual is not an entity, + such as a function attribute, or a synchronized operation, + create a function with an internal name and call it within the + wrapper. + (Analyze_Generic_Formal_Part): Analyze contracts at the end of + the list of formal declarations. + * sem_prag.adb (Analyze_Pre_Post_Condtion): In Ada_2020 the + aspect and corresponding pragma can appear on a formal + subprogram declaration. + (Find_Related_Declaration_Or_Body): Ditto. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch7.adb (Make_Final_Call): Set the type of the object, if + it is unanalyzed, before calling Convert_View on it. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * adabkend.adb, back_end.ads, opt.ads, sem_ch6.adb: Get rid of + Disable_FE_Inline_Always. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch7.adb (Make_Final_Call): Add missing guard. + * sem_ch3.adb (Copy_And_Build): Adjust recursive call for + private types. + (Build_Derived_Private_Type): Deal with underlying full views. + +2020-06-04 Bob Duff <duff@adacore.com> + + * libgnat/a-stobbu.adb, libgnat/a-stobbu.ads, + libgnat/a-stobfi.adb, libgnat/a-stobfi.ads, + libgnat/a-stoubu.adb, libgnat/a-stoubu.ads, + libgnat/a-stoufi.adb, libgnat/a-stoufi.ads, + libgnat/a-stoufo.adb, libgnat/a-stoufo.ads, + libgnat/a-stouut.adb, libgnat/a-stouut.ads, + libgnat/a-stteou.ads, libgnat/s-putaim.adb, + libgnat/s-putaim.ads, libgnat/s-putima.adb, libgnat/s-putima.ads + (Ada.Strings.Text_Output and children, System.Put_Images): New + runtime support for Put_Image. + * gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add + exp_put_image.o. + * exp_put_image.adb, exp_put_image.ads: New compiler package + that generates calls to runtime routines that implement + Put_Image. + * Makefile.rtl: Add object files for Ada.Strings.Text_Output and + children and System.Put_Images. + * aspects.adb: Simplify initialization of Canonical_Aspect. + * aspects.ads: Improve documentation. Add Aspect_Put_Image. + * exp_attr.adb: Add support for Put_Image, by calling routines + in Exp_Put_Image. + * sem_util.adb (Is_Predefined_Dispatching_Operation): Return + True for new TSS_Put_Image operation. + * exp_ch3.adb: For tagged types, build a dispatching + TSS_Put_Image operation by calling routines in Exp_Put_Image. + * exp_disp.adb, exp_disp.ads: Make TSS_Put_Image be number 10, + adjusting other operations' numbers after 10. We choose 10 + because that's the last number shared by all runtimes. + * exp_strm.adb: Use named notation as appropriate. + * exp_cg.adb, exp_tss.ads: Add TSS_Put_Image. + * libgnat/a-tags.ads: Modify Max_Predef_Prims for the new + TSS_Put_Image. + * impunit.adb: Add new runtime packages. + * rtsfind.adb, rtsfind.ads: Add support for + Ada.Strings.Text_Output, Ada.Strings.Text_Output.Utils, and + System.Put_Images. + * sem_attr.adb: Error checking for Put_Image calls. + * sem_ch12.adb (Valid_Default_Attribute): Support for passing + Put_Image as a generic formal parameter. + * sem_ch13.adb: Analysis of Put_Image aspect. Turn it into a + Put_Image attribute definition clause. + * sem_ch8.adb (Analyze_Subprogram_Renaming): Support for + renaming of the Put_Image attribute. + * snames.adb-tmpl: Fix comments. + * snames.ads-tmpl (Name_Put_Image): New Name_Id. + (Attribute_Put_Image): New Attribute_Id. + * tbuild.adb, tbuild.ads (Make_Increment): New utility. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (xpand_N_Attribute_Reference) <Input>: Call + Find_Inherited_TSS to look up the Stream_Read TSS. + <Output>: Likewise for the Stream_Write TSS. + * exp_ch7.adb (Make_Final_Call): Call Underlying_Type on + private types to account for underlying full views. + * exp_strm.ads (Build_Record_Or_Elementary_Input_Function): + Remove Use_Underlying parameter. + * exp_strm.adb (Build_Record_Or_Elementary_Input_Function): + Likewise and adjust accordingly. + * exp_tss.adb (Find_Inherited_TSS): Deal with full views. + Call Find_Inherited_TSS recursively on the parent type if + the base type is a derived type. + * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Take + into account underlying full views for derived types. + * sem_ch3.adb (Copy_And_Build): Look up the underlying full + view only for a completion. Be prepared for private types. + (Build_Derived_Private_Type): Build an underlying full view + for a completion in the general case too. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * back_end.adb, opt.ads, par-prag.adb, sem_ch5.adb, + sem_prag.adb, sinfo.adb, sinfo.ads, snames.ads-tmpl, + doc/gnat_rm/implementation_defined_pragmas.rst: Remove + experimental support for OpenACC. + * gcc-interface/misc.c, gcc-interface/trans.c, + gcc-interface/lang.opt: Ditto. + * gnat_rm.texi: Regenerate. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * checks.adb (Generate_Discriminant_Check): Remove obsolete + comment. + +2020-06-04 Gary Dismukes <dismukes@adacore.com> + + * par-ch3.adb (P_Identifier_Declarations): Add parsing of object + renamings that have neither a subtype_mark nor an + access_definition. Issue an error if the version is earlier than + Ada_2020, and suggest using -gnatX. + * sem_ch8.adb (Analyze_Object_Renaming): Handle + object_renaming_declarations that don't have an explicit + subtype. Errors are issued when the name is inappropriate or + ambiguous, and otherwise the Etype of the renaming entity is set + from the Etype of the renamed object. + * sem_util.adb (Has_Null_Exclusion): Allow for the case of no + subtype given in an N_Object_Renaming_Declaration. + * sprint.adb (Sprint_Node_Actual): Handle printing of + N_Object_Renaming_Declarations that are specified without an + explicit subtype. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * sinfo.ads (N_Delta_Aggregate): Document Etype field. + (N_Case_Expression): Likewise. + (Is_Syntactic_Field) <N_Quantified_Expression>: Adjust. + <N_Case_Expression>: Likewise. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * adaint.c: Avoid redefining IS_DIR_SEPARATOR macro. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * sem.adb (Walk_Library_Items): Defer processing of main spec + after all other specs and before processing bodies. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * bindgen.adb (Gen_Adafinal): Adafinal is convention Ada, not C. + +2020-06-04 Ed Schonberg <schonberg@adacore.com> + + * sinput.adb (Sloc_Range): Ignore node in the tree if it appears + in a unit different from that of the node whose Sloc range we + are computing. This is necessary when computing the source range + of a subprogram body whose declaration includes a pre- or + postcondition, because declaration and body may appear in + different units, and the expanded code for the body includes + copies of the contract code. + +2020-06-04 Alexandre Oliva <oliva@adacore.com> + + * switch.adb (Is_Internal_GCC_Switch): Recognize dumpdir and + dumpbase-ext. Mark auxbase and auxbase-strip for removal. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * sem_attr.adb (Resolve_Attribute) <Access>: Do not generate + the secondary message about a missing pragma if the convention + of the prefix is Intrinsic. + * sem_ch12.adb (Instantiate_Formal_Subprogram): Only set the + Convention and the Is_Inlined flag on a null procedure. + +2020-06-04 Justin Squirek <squirek@adacore.com> + + * sem_ch6.adb (Check_Return_Obj_Accessibility): Change to + Check_Return_Construct_Accessibility to better reflect its + purpose. Add loop to properly obtain the object declaration + from an expanded extended return statement and add calls to get + the original node for associated values. Also, avoid checks when + the return statement being examined comes from an internally + generated function. + +2020-06-04 Dmitriy Anisimkov <anisimko@adacore.com> + + * adaint.c (__gnat_is_absolute_path): Check for directory + separator after drive and colon. + (IS_DIR_SEPARATOR): Define new inline substitution. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * checks.ads: Update documentation about range checks and fix + minor other things. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch3.adb (Array_Type_Declaration): Apply special handling + of private index types to generic packages and restrict it to + index types defined in the current scope. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-exextr.adb (Global_Unhandled_Action): New global + variable. + (Notify_Exception): Take into account Global_Unhandled_Action + and fix latent race condition. + (Exception_Action): Mark Favor_Top_Level so that variables can + be atomic. + (Global_Action): Mark atomic to remove the need for a lock. + * libgnat/g-excact.ads, libgnat/g-excact.adb + (Register_Global_Unhandled_Action): New procedure. + (Register_Global_Action): Remove lock. + * libgnat/s-stalib.ads (Raise_Action): Mark Favor_Top_Level to + be compatible with Exception_Action. + * sem_warn.adb (Warn_On_Unreferenced_Entity): Fix logic wrt + Volatile entities and entities with an address clause: the code + did not match the comment/intent. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * comperr.adb (Compiler_Abort): Update URL and bug report + instructions. + +2020-06-04 Steve Baird <baird@adacore.com> + + * libgnat/s-imgrea.ads: Declare a named number + Max_Real_Image_Length with value 5200. Provide a comment + explaining why this value was chosen. + * libgnat/s-imgrea.adb (Set_Image_Real): Increase the upper + bound of the local String variable Digs to + Max_Real_Image_Length. + * libgnat/a-tiflau.adb (Put): Increase the upper bound of the + local String variable Buf to Max_Real_Image_Length. + (Puts): Increase the upper bound of the local String variable + Buf to Max_Real_Image_Length. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * libgnarl/a-dynpri.adb, libgnarl/a-taside.adb, + libgnarl/a-taster.adb, libgnarl/s-interr.adb, + libgnarl/s-interr__sigaction.adb, libgnarl/s-taasde.adb, + libgnarl/s-taenca.adb, libgnarl/s-taenca.ads, + libgnarl/s-taprop.ads, libgnarl/s-taprop__hpux-dce.adb, + libgnarl/s-taprop__linux.adb, libgnarl/s-taprop__mingw.adb, + libgnarl/s-taprop__posix.adb, libgnarl/s-taprop__qnx.adb, + libgnarl/s-taprop__solaris.adb, libgnarl/s-taprop__vxworks.adb, + libgnarl/s-tarest.adb, libgnarl/s-tasini.adb, + libgnarl/s-tasque.adb, libgnarl/s-tasque.ads, + libgnarl/s-tasren.adb, libgnarl/s-tasren.ads, + libgnarl/s-tassta.adb, libgnarl/s-tasuti.adb, + libgnarl/s-tasuti.ads, libgnarl/s-tpoben.adb, + libgnarl/s-tpobop.adb, libgnarl/s-tpopmo.adb, + libgnarl/s-tposen.adb, libgnat/s-parame.ads, + libgnat/s-parame__ae653.ads, libgnat/s-parame__hpux.ads, + libgnat/s-parame__vxworks.ads: Remove references to Single_Lock + and Global_Lock. + +2020-06-04 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-atopar.adb, libgnat/s-atopex.adb: Use Object_Size + instead of Size, otherwise many derived types will be rejected + (e.g. a type with a 14 bits 'Size and a 16 bits 'Object_Size). + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Copy_Generic_Node): Add special handling for a + conversion between access types. + +2020-06-04 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Check_Generic_Actuals): Also restore the proper + views of the actuals of the parent instances if the formals are + used as actuals of the children. + (Instantiate_Type): Add comment. + +2020-06-04 Gary Dismukes <dismukes@adacore.com> + + * sem_ch12.adb: Minor editorial fixes. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Denotes_Previous_Actual): Delete. + (Check_Generic_Actuals): Do not special case array types whose + component type denotes a previous actual. Do not special case + access types whose base type is private. + (Check_Private_View): Remove code dealing with secondary types. + Do not switch the views of an array because of its component. + (Copy_Generic_Node): Add special handling for a comparison + operator on array types. + (Instantiate_Type): Do not special case access types whose + designated type is private. + (Set_Global_Type): Do not special case array types whose + component type is private. + +2020-06-03 Justin Squirek <squirek@adacore.com> + + * sem_ch10.adb (Process_Body_Clauses): Add loop to interate + through all prefixes in a use_type clause so that all packages + in the expanded name get examined for effectiveness. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch12.adb (Check_Private_View): Clean up implementation of + second main case, when the generic sees the private declaration. + +2020-06-03 Arnaud Charlet <charlet@adacore.com> + + * libgnat/a-nbnbin.ads: Minor reformatting. + * libgnat/a-nbnbre.ads, libgnat/a-nbnbre.adb (Is_Valid): Add + convention Intrinsic. Add detection of uninitialized big reals. + +2020-06-03 Arnaud Charlet <charlet@adacore.com> + + * sem_util.ads, sem_util.adb (Side_Effect_Free_Statements, + Side_Effect_Free_Loop): New functions. + (Has_Non_Null_Statements): Consider N_Call_Marker as a null + statement. + * sem_ch5.adb (Analyze_Loop_Parameter_Specification): Call + Set_Is_Null_Loop even inside a generic instantiation. + (Analyze_Loop_Statement): Mark for removal loops with no side + effects. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * opt.ads (Allow_Integer_Address): Fix typo in comment. + * stand.ads (Standard_Address): New entity. + * cstand.adb (Create_Standard): Create it. + * sem_ch4.adb (Operator_Check): Convert the operands of an + operation with addresses and integers to Standard_Address + if pragma Allow_Integer_Address is in effect. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-atopar.adb (Atomic_Fetch_And_Add): Make use of an + equivalent static expression. + (Atomic_Fetch_And_Subtract): Likewise. + (Is_Lock_Free): Likewise. + * libgnat/s-atopex.adb (Atomic_Exchange): Likewise. + (Atomic_Compare_And_Exchange): Likewise. + (Is_Lock_Free): Likewise. + +2020-06-03 Vadim Godunko <godunko@adacore.com> + + * libgnat/s-parame.ads, libgnat/s-parame__ae653.ads, + libgnat/s-parame__hpux.ads: Fix typos. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * exp_util.adb (Remove_Side_Effects): For a type conversion, do + not remove the side effects of the expression only if it is of + universal integer type. + +2020-06-03 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-aotase.ads, libgnat/s-atoope.ads, + libgnat/s-atopar.ads, libgnat/s-atopex.ads: Update header. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_N_Unchecked_Type_Conversion): Also fold the + conversion for literals of enumeration types. + +2020-06-03 Yannick Moy <moy@adacore.com> + + * rtsfind.adb (Load_RTU): Correctly set/reset global variable to + ignore SPARK_Mode in instances around loading. + * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Accept Off + without prior On. + * sem_ch7.adb (Analyze_Package_Body_Helper): Likewise. + * sem_prag.adb (Analyze_Pragma): Always take into account + SPARK_Mode Off. + +2020-06-03 Arnaud Charlet <charlet@adacore.com> + + * frontend.adb (Frontend): Call (dummy for now) tree checker. + * debug.adb: Reserve -gnatd_V for the tree checker. + * vast.ads, vast.adb: New files. + * gcc-interface/Make-lang.in: Add vast.o. + +2020-06-03 Justin Squirek <squirek@adacore.com> + + * libgnat/a-cborse.adb, libgnat/a-cihase.adb, + libgnat/a-ciorse.adb, libgnat/a-coorse.adb: Modified to use + 'Unrestricted_Access in certain cases where static accessibility + errors were triggered. + * exp_ch6.adb (Expand_Simple_Return_Statement): Add generation + of dynamic accessibility checks as determined by + Is_Special_Aliased_Formal_Access. + * sem_attr.adb (Resolve_Attribute): Add call to + Is_Special_Aliased_Formal_Access to avoid performing static + checks where dynamic ones are required. + * sem_ch6.adb (Check_Return_Obj_Accessibility): Handle renamed + objects within component associations requiring special + accessibility checks. + * sem_util.adb, sem_util.ads (Is_Special_Aliased_Formal_Access): + Created to detect the special case where an aliased formal is + being compared against the level of an anonymous access return + object. + (Object_Access_Level): Remove incorrect condition leading to + overly permissive accessibility levels being returned on + explicitly aliased parameters. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (Enum_Pos_To_Rep): Adjust description. + * exp_attr.adb (Expand_N_Attribute_Reference) <Pred>: + Reimplement in the case of an enumeration type with non-standard + but contiguous representation. + <Succ>: Likewise. + <Val>: Likewise. + * exp_ch3.adb (Expand_Freeze_Enumeration_Type): Count the + literals in the first loop. If the representation is + contiguous, just build the index type of the array type and set + Enum_Pos_To_Rep to it. + +2020-06-03 Gary Dismukes <dismukes@adacore.com> + + * exp_attr.adb (Expand_Loop_Entry_Attribute): Revise loop that + resets the scopes of entities associated with Loop_Id to the + scope of the new function, so the resetting is not restricted to + itypes, but excludes loop parameters and the function entity + itself. However, this fix is believed to be incomplete and a ??? + comment is added to indicate that. + +2020-06-03 Bob Duff <duff@adacore.com> + + * libgnat/s-regexp.ads: Fix comment + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference) <Enum_Rep>: + In the case of an enumeration type, do an intermediate + conversion to a small integer type. Remove useless stuff. + <Finalization_Size>: Do not hardcode Universal_Integer and + fix a type mismatch in the assignment to the variable. + <Max_Size_In_Storage_Elements>: Likewise. + <From_Any>: Do not redefine the Ptyp local variable. + <To_Any>: Likewise. + <TypeCode>: Likewise. + <Pos>: Small tweaks. + <Val>: For an enumeration type with standard representation, + apply the range check to the expression of a convertion to + Universal_Integer, if any. For an integer type, expand to + a mere conversion. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * libgnat/s-rannum.adb (Random_Discrete): In the 32-bit case, + use the same linear implementation as in the 64-bit case when + the type has a contiguous representation. + +2020-06-03 Gary Dismukes <dismukes@adacore.com> + + * sem_util.adb (Build_Class_Wide_Clone_Decl): Call + Set_Debug_Info_Needed to set the Needs_Debug_Info flag on + Clone_Id if the flag is set on Spec_Id. + +2020-06-03 Yannick Moy <moy@adacore.com> + + * inline.adb (Expand_Inlined_Call): Do not suppress checks on + inlined code in GNATprove mode. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * einfo.ads (Has_Contiguous_Rep): Fix typo in comment. + +2020-06-03 Piotr Trojanek <trojanek@adacore.com> + + * checks.adb, einfo.adb, exp_aggr.adb, exp_ch4.adb, exp_ch6.adb, + exp_unst.adb, exp_util.adb, freeze.adb, inline.adb, repinfo.adb, + sem_aggr.adb, sem_attr.adb, sem_aux.adb, sem_ch13.adb, + sem_ch3.adb, sem_ch4.adb, sem_ch8.adb, sem_elab.adb, + sem_eval.adb, sem_prag.adb, sem_res.adb, sem_smem.adb, + sem_util.adb, treepr.adb: Replace uses of Next_ functions with + corresponding procedures. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Attribute_Valid): Use Standard_Long_Long_Integer + in lieu of Universal_Integer as large integer type. + * exp_ch3.adb (Expand_Freeze_Enumeration_Type): Likewise. + +2020-06-03 Arnaud Charlet <charlet@adacore.com> + + * libgnat/s-auxdec.ads (Address_Int): New. + +2020-06-03 Arnaud Charlet <charlet@adacore.com> + + * aspects.adb, aspects.ads, atree.adb, atree.ads, elists.adb, + elists.ads, fname.adb, fname.ads, gnat1drv.adb, lib.adb, + lib.ads, namet.adb, namet.ads, nlists.adb, nlists.ads, opt.adb, + opt.ads, osint-c.adb, osint-c.ads, repinfo.adb, repinfo.ads, + sem_aux.adb, sem_aux.ads, sinput.adb, sinput.ads, stand.ads, + stringt.adb, stringt.ads, switch-c.adb, table.adb, table.ads, + uintp.adb, uintp.ads, urealp.adb, urealp.ads (Tree_Read, + Tree_Write): Remove generation of ASIS trees. + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: + Remove -gnatt and -gnatct documentation. + * gnat_ugn.texi: Regenerate. + * tree_in.ads, tree_in.adb, tree_io.ads, tree_io.adb, + tree_gen.ads, tree_gen.adb, stand.adb: Remove. + * gcc-interface/Makefile.in, gcc-interface/Make-lang.in: Remove + references to tree_gen.o tree_in.o tree_io.o. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * opt.ads (Disable_FE_Inline): Move around. + (Disable_FE_Inline_Always): Likewise. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * checks.adb (Is_Single_Attribute_Reference): New predicate. + (Generate_Range_Check): Do not force the evaluation if the + node is a single attribute reference. + * exp_util.adb (Side_Effect_Free_Attribute): New predicate. + (Side_Effect_Free) <N_Attribute_Reference>: Call it. + (Remove_Side_Effects): Remove the side effects of the prefix + for an attribute reference whose prefix is not a name. + +2020-06-03 Arnaud Charlet <charlet@adacore.com> + + * switch-c.adb (Scan_Front_End_Switches): Remove processing of + -gnatt. + * usage.adb (Usage): Remove mention of -gnatt. + +2020-06-03 Eric Botcazou <ebotcazou@adacore.com> + + * sinfo.ads: Minor tweaks in commentary. + +2020-06-02 Alexandre Oliva <oliva@adacore.com> + + * lib.ads (Compilation_Switches): Remove -auxbase from + comments. + * switch.ads (Is_Internal_GCC_Switch): Likewise. + +2020-06-02 Arnaud Charlet <charlet@adacore.com> + + * atree.ads, checks.adb, contracts.adb, debug.adb, einfo.ads, + exp_ch3.adb, exp_util.adb, expander.ads, expander.adb, + frontend.adb, gnat1drv.adb, itypes.adb, lib.ads, namet.ads, + opt.adb, opt.ads, par-prag.adb, repinfo.ads, sem_aggr.adb, + sem_aux.ads, sem_case.ads, sem_ch10.adb, sem_ch12.adb, + sem_ch13.adb, sem_ch3.adb, sem_ch4.adb, sem_ch6.adb, + sem_dim.adb, sem_elab.adb, sem_prag.adb, sem_prag.ads, + sem_res.adb, sem_type.adb, sem_util.adb, sinfo.ads, stand.ads, + tree_io.ads: Remove references to ASIS_Mode. + +2020-06-02 Javier Miranda <miranda@adacore.com> + + * exp_ch4.adb (Generate_Temporary): New subprogram of + Discrete_Range_Check that generates a temporary to facilitate + the C backend the code generation of the unchecked conversion + since the size of the source type may differ from the size of + the target type. + +2020-06-02 Arnaud Charlet <charlet@adacore.com> + + * ada_get_targ.adb: Bump copyright year. + * adabkend.adb: Likewise. + * adabkend.ads: Likewise. + * adadecode.c: Likewise. + * adadecode.h: Likewise. + * adaint.c: Likewise. + * adaint.h: Likewise. + * affinity.c: Likewise. + * ali-util.adb: Likewise. + * ali-util.ads: Likewise. + * ali.adb: Likewise. + * ali.ads: Likewise. + * alloc.ads: Likewise. + * argv-lynxos178-raven-cert.c: Likewise. + * argv.c: Likewise. + * aspects.adb: Likewise. + * aspects.ads: Likewise. + * atree.adb: Likewise. + * atree.ads: Likewise. + * atree.h: Likewise. + * aux-io.c: Likewise. + * back_end.adb: Likewise. + * back_end.ads: Likewise. + * bcheck.adb: Likewise. + * bcheck.ads: Likewise. + * binde.adb: Likewise. + * binde.ads: Likewise. + * binderr.adb: Likewise. + * binderr.ads: Likewise. + * bindgen.adb: Likewise. + * bindgen.ads: Likewise. + * bindo-augmentors.adb: Likewise. + * bindo-augmentors.ads: Likewise. + * bindo-builders.adb: Likewise. + * bindo-builders.ads: Likewise. + * bindo-diagnostics.adb: Likewise. + * bindo-diagnostics.ads: Likewise. + * bindo-elaborators.adb: Likewise. + * bindo-elaborators.ads: Likewise. + * bindo-graphs.adb: Likewise. + * bindo-graphs.ads: Likewise. + * bindo-units.adb: Likewise. + * bindo-units.ads: Likewise. + * bindo-validators.adb: Likewise. + * bindo-validators.ads: Likewise. + * bindo-writers.adb: Likewise. + * bindo-writers.ads: Likewise. + * bindo.adb: Likewise. + * bindo.ads: Likewise. + * bindusg.adb: Likewise. + * bindusg.ads: Likewise. + * butil.adb: Likewise. + * butil.ads: Likewise. + * cal.c: Likewise. + * casing.adb: Likewise. + * casing.ads: Likewise. + * ceinfo.adb: Likewise. + * checks.adb: Likewise. + * checks.ads: Likewise. + * cio.c: Likewise. + * clean.adb: Likewise. + * clean.ads: Likewise. + * comperr.adb: Likewise. + * comperr.ads: Likewise. + * contracts.adb: Likewise. + * contracts.ads: Likewise. + * csets.adb: Likewise. + * csets.ads: Likewise. + * csinfo.adb: Likewise. + * cstand.adb: Likewise. + * cstand.ads: Likewise. + * cstreams.c: Likewise. + * ctrl_c.c: Likewise. + * debug.adb: Likewise. + * debug.ads: Likewise. + * debug_a.adb: Likewise. + * debug_a.ads: Likewise. + * einfo.adb: Likewise. + * einfo.ads: Likewise. + * elists.adb: Likewise. + * elists.ads: Likewise. + * elists.h: Likewise. + * env.c: Likewise. + * env.h: Likewise. + * err_vars.ads: Likewise. + * errno.c: Likewise. + * errout.adb: Likewise. + * errout.ads: Likewise. + * erroutc.adb: Likewise. + * erroutc.ads: Likewise. + * errutil.adb: Likewise. + * errutil.ads: Likewise. + * eval_fat.adb: Likewise. + * eval_fat.ads: Likewise. + * exit.c: Likewise. + * exp_aggr.adb: Likewise. + * exp_aggr.ads: Likewise. + * exp_atag.adb: Likewise. + * exp_atag.ads: Likewise. + * exp_attr.adb: Likewise. + * exp_attr.ads: Likewise. + * exp_cg.adb: Likewise. + * exp_cg.ads: Likewise. + * exp_ch10.ads: Likewise. + * exp_ch11.adb: Likewise. + * exp_ch11.ads: Likewise. + * exp_ch12.adb: Likewise. + * exp_ch12.ads: Likewise. + * exp_ch13.adb: Likewise. + * exp_ch13.ads: Likewise. + * exp_ch2.adb: Likewise. + * exp_ch2.ads: Likewise. + * exp_ch3.adb: Likewise. + * exp_ch3.ads: Likewise. + * exp_ch4.adb: Likewise. + * exp_ch4.ads: Likewise. + * exp_ch5.adb: Likewise. + * exp_ch5.ads: Likewise. + * exp_ch6.adb: Likewise. + * exp_ch6.ads: Likewise. + * exp_ch7.adb: Likewise. + * exp_ch7.ads: Likewise. + * exp_ch8.adb: Likewise. + * exp_ch8.ads: Likewise. + * exp_ch9.adb: Likewise. + * exp_ch9.ads: Likewise. + * exp_code.adb: Likewise. + * exp_code.ads: Likewise. + * exp_dbug.adb: Likewise. + * exp_dbug.ads: Likewise. + * exp_disp.adb: Likewise. + * exp_disp.ads: Likewise. + * exp_dist.adb: Likewise. + * exp_dist.ads: Likewise. + * exp_fixd.adb: Likewise. + * exp_fixd.ads: Likewise. + * exp_imgv.adb: Likewise. + * exp_imgv.ads: Likewise. + * exp_intr.adb: Likewise. + * exp_intr.ads: Likewise. + * exp_pakd.adb: Likewise. + * exp_pakd.ads: Likewise. + * exp_prag.adb: Likewise. + * exp_prag.ads: Likewise. + * exp_sel.adb: Likewise. + * exp_sel.ads: Likewise. + * exp_smem.adb: Likewise. + * exp_smem.ads: Likewise. + * exp_spark.adb: Likewise. + * exp_spark.ads: Likewise. + * exp_strm.adb: Likewise. + * exp_strm.ads: Likewise. + * exp_tss.adb: Likewise. + * exp_tss.ads: Likewise. + * exp_unst.adb: Likewise. + * exp_unst.ads: Likewise. + * exp_util.adb: Likewise. + * exp_util.ads: Likewise. + * expander.adb: Likewise. + * expander.ads: Likewise. + * expect.c: Likewise. + * fe.h: Likewise. + * final.c: Likewise. + * fmap.adb: Likewise. + * fmap.ads: Likewise. + * fname-sf.adb: Likewise. + * fname-sf.ads: Likewise. + * fname-uf.adb: Likewise. + * fname-uf.ads: Likewise. + * fname.adb: Likewise. + * fname.ads: Likewise. + * freeze.adb: Likewise. + * freeze.ads: Likewise. + * frontend.adb: Likewise. + * frontend.ads: Likewise. + * get_scos.adb: Likewise. + * get_scos.ads: Likewise. + * get_targ.adb: Likewise. + * get_targ.ads: Likewise. + * ghost.adb: Likewise. + * ghost.ads: Likewise. + * gnat1drv.adb: Likewise. + * gnat1drv.ads: Likewise. + * gnatbind.adb: Likewise. + * gnatbind.ads: Likewise. + * gnatchop.adb: Likewise. + * gnatclean.adb: Likewise. + * gnatcmd.adb: Likewise. + * gnatcmd.ads: Likewise. + * gnatdll.adb: Likewise. + * gnatfind.adb: Likewise. + * gnatkr.adb: Likewise. + * gnatkr.ads: Likewise. + * gnatlink.adb: Likewise. + * gnatlink.ads: Likewise. + * gnatls.adb: Likewise. + * gnatls.ads: Likewise. + * gnatmake.adb: Likewise. + * gnatmake.ads: Likewise. + * gnatname.adb: Likewise. + * gnatname.ads: Likewise. + * gnatprep.adb: Likewise. + * gnatprep.ads: Likewise. + * gnatvsn.adb: Likewise. + * gnatxref.adb: Likewise. + * gprep.adb: Likewise. + * gprep.ads: Likewise. + * gsocket.h: Likewise. + * hostparm.ads: Likewise. + * impunit.adb: Likewise. + * impunit.ads: Likewise. + * indepsw-aix.adb: Likewise. + * indepsw-darwin.adb: Likewise. + * indepsw-gnu.adb: Likewise. + * indepsw.adb: Likewise. + * indepsw.ads: Likewise. + * init.c: Likewise. + * initialize.c: Likewise. + * inline.adb: Likewise. + * inline.ads: Likewise. + * itypes.adb: Likewise. + * itypes.ads: Likewise. + * krunch.adb: Likewise. + * krunch.ads: Likewise. + * layout.adb: Likewise. + * layout.ads: Likewise. + * lib-list.adb: Likewise. + * lib-load.adb: Likewise. + * lib-load.ads: Likewise. + * lib-sort.adb: Likewise. + * lib-util.adb: Likewise. + * lib-util.ads: Likewise. + * lib-writ.adb: Likewise. + * lib-writ.ads: Likewise. + * lib-xref-spark_specific.adb: Likewise. + * lib-xref.adb: Likewise. + * lib-xref.ads: Likewise. + * lib.adb: Likewise. + * lib.ads: Likewise. + * libgnarl/a-astaco.adb: Likewise. + * libgnarl/a-dispat.adb: Likewise. + * libgnarl/a-dynpri.adb: Likewise. + * libgnarl/a-etgrbu.ads: Likewise. + * libgnarl/a-exetim__darwin.adb: Likewise. + * libgnarl/a-exetim__default.ads: Likewise. + * libgnarl/a-exetim__mingw.adb: Likewise. + * libgnarl/a-exetim__mingw.ads: Likewise. + * libgnarl/a-exetim__posix.adb: Likewise. + * libgnarl/a-interr.adb: Likewise. + * libgnarl/a-interr.ads: Likewise. + * libgnarl/a-intnam.ads: Likewise. + * libgnarl/a-intnam__aix.ads: Likewise. + * libgnarl/a-intnam__darwin.ads: Likewise. + * libgnarl/a-intnam__dragonfly.ads: Likewise. + * libgnarl/a-intnam__dummy.ads: Likewise. + * libgnarl/a-intnam__freebsd.ads: Likewise. + * libgnarl/a-intnam__hpux.ads: Likewise. + * libgnarl/a-intnam__linux.ads: Likewise. + * libgnarl/a-intnam__lynxos.ads: Likewise. + * libgnarl/a-intnam__mingw.ads: Likewise. + * libgnarl/a-intnam__qnx.ads: Likewise. + * libgnarl/a-intnam__rtems.ads: Likewise. + * libgnarl/a-intnam__solaris.ads: Likewise. + * libgnarl/a-intnam__vxworks.ads: Likewise. + * libgnarl/a-reatim.adb: Likewise. + * libgnarl/a-reatim.ads: Likewise. + * libgnarl/a-retide.adb: Likewise. + * libgnarl/a-retide.ads: Likewise. + * libgnarl/a-rttiev.adb: Likewise. + * libgnarl/a-rttiev.ads: Likewise. + * libgnarl/a-synbar.adb: Likewise. + * libgnarl/a-synbar.ads: Likewise. + * libgnarl/a-synbar__posix.adb: Likewise. + * libgnarl/a-synbar__posix.ads: Likewise. + * libgnarl/a-sytaco.adb: Likewise. + * libgnarl/a-sytaco.ads: Likewise. + * libgnarl/a-tasatt.adb: Likewise. + * libgnarl/a-tasatt.ads: Likewise. + * libgnarl/a-taside.adb: Likewise. + * libgnarl/a-taside.ads: Likewise. + * libgnarl/a-taster.adb: Likewise. + * libgnarl/g-boubuf.adb: Likewise. + * libgnarl/g-boubuf.ads: Likewise. + * libgnarl/g-boumai.ads: Likewise. + * libgnarl/g-semaph.adb: Likewise. + * libgnarl/g-semaph.ads: Likewise. + * libgnarl/g-signal.adb: Likewise. + * libgnarl/g-signal.ads: Likewise. + * libgnarl/g-tastus.ads: Likewise. + * libgnarl/g-thread.adb: Likewise. + * libgnarl/g-thread.ads: Likewise. + * libgnarl/i-vxinco.adb: Likewise. + * libgnarl/i-vxinco.ads: Likewise. + * libgnarl/s-inmaop.ads: Likewise. + * libgnarl/s-inmaop__dummy.adb: Likewise. + * libgnarl/s-inmaop__posix.adb: Likewise. + * libgnarl/s-inmaop__vxworks.adb: Likewise. + * libgnarl/s-interr.adb: Likewise. + * libgnarl/s-interr.ads: Likewise. + * libgnarl/s-interr__dummy.adb: Likewise. + * libgnarl/s-interr__hwint.adb: Likewise. + * libgnarl/s-interr__sigaction.adb: Likewise. + * libgnarl/s-interr__vxworks.adb: Likewise. + * libgnarl/s-intman.ads: Likewise. + * libgnarl/s-intman__android.adb: Likewise. + * libgnarl/s-intman__dummy.adb: Likewise. + * libgnarl/s-intman__lynxos.adb: Likewise. + * libgnarl/s-intman__mingw.adb: Likewise. + * libgnarl/s-intman__posix.adb: Likewise. + * libgnarl/s-intman__qnx.adb: Likewise. + * libgnarl/s-intman__solaris.adb: Likewise. + * libgnarl/s-intman__susv3.adb: Likewise. + * libgnarl/s-intman__vxworks.adb: Likewise. + * libgnarl/s-intman__vxworks.ads: Likewise. + * libgnarl/s-linux.ads: Likewise. + * libgnarl/s-linux__alpha.ads: Likewise. + * libgnarl/s-linux__android.ads: Likewise. + * libgnarl/s-linux__hppa.ads: Likewise. + * libgnarl/s-linux__mips.ads: Likewise. + * libgnarl/s-linux__riscv.ads: Likewise. + * libgnarl/s-linux__sparc.ads: Likewise. + * libgnarl/s-linux__x32.ads: Likewise. + * libgnarl/s-mudido.adb: Likewise. + * libgnarl/s-mudido__affinity.adb: Likewise. + * libgnarl/s-osinte__aix.adb: Likewise. + * libgnarl/s-osinte__aix.ads: Likewise. + * libgnarl/s-osinte__android.adb: Likewise. + * libgnarl/s-osinte__android.ads: Likewise. + * libgnarl/s-osinte__darwin.adb: Likewise. + * libgnarl/s-osinte__darwin.ads: Likewise. + * libgnarl/s-osinte__dragonfly.adb: Likewise. + * libgnarl/s-osinte__dragonfly.ads: Likewise. + * libgnarl/s-osinte__dummy.ads: Likewise. + * libgnarl/s-osinte__freebsd.adb: Likewise. + * libgnarl/s-osinte__freebsd.ads: Likewise. + * libgnarl/s-osinte__gnu.adb: Likewise. + * libgnarl/s-osinte__gnu.ads: Likewise. + * libgnarl/s-osinte__hpux-dce.adb: Likewise. + * libgnarl/s-osinte__hpux-dce.ads: Likewise. + * libgnarl/s-osinte__hpux.ads: Likewise. + * libgnarl/s-osinte__kfreebsd-gnu.ads: Likewise. + * libgnarl/s-osinte__linux.ads: Likewise. + * libgnarl/s-osinte__lynxos178.adb: Likewise. + * libgnarl/s-osinte__lynxos178e.ads: Likewise. + * libgnarl/s-osinte__mingw.ads: Likewise. + * libgnarl/s-osinte__posix.adb: Likewise. + * libgnarl/s-osinte__qnx.adb: Likewise. + * libgnarl/s-osinte__qnx.ads: Likewise. + * libgnarl/s-osinte__rtems.adb: Likewise. + * libgnarl/s-osinte__rtems.ads: Likewise. + * libgnarl/s-osinte__solaris.adb: Likewise. + * libgnarl/s-osinte__solaris.ads: Likewise. + * libgnarl/s-osinte__vxworks.adb: Likewise. + * libgnarl/s-osinte__vxworks.ads: Likewise. + * libgnarl/s-osinte__x32.adb: Likewise. + * libgnarl/s-proinf.adb: Likewise. + * libgnarl/s-proinf.ads: Likewise. + * libgnarl/s-qnx.ads: Likewise. + * libgnarl/s-solita.adb: Likewise. + * libgnarl/s-solita.ads: Likewise. + * libgnarl/s-stusta.adb: Likewise. + * libgnarl/s-stusta.ads: Likewise. + * libgnarl/s-taasde.adb: Likewise. + * libgnarl/s-taasde.ads: Likewise. + * libgnarl/s-tadeca.adb: Likewise. + * libgnarl/s-tadeca.ads: Likewise. + * libgnarl/s-tadert.adb: Likewise. + * libgnarl/s-tadert.ads: Likewise. + * libgnarl/s-taenca.adb: Likewise. + * libgnarl/s-taenca.ads: Likewise. + * libgnarl/s-taprob.adb: Likewise. + * libgnarl/s-taprob.ads: Likewise. + * libgnarl/s-taprop.ads: Likewise. + * libgnarl/s-taprop__dummy.adb: Likewise. + * libgnarl/s-taprop__hpux-dce.adb: Likewise. + * libgnarl/s-taprop__linux.adb: Likewise. + * libgnarl/s-taprop__mingw.adb: Likewise. + * libgnarl/s-taprop__posix.adb: Likewise. + * libgnarl/s-taprop__qnx.adb: Likewise. + * libgnarl/s-taprop__solaris.adb: Likewise. + * libgnarl/s-taprop__vxworks.adb: Likewise. + * libgnarl/s-tarest.adb: Likewise. + * libgnarl/s-tarest.ads: Likewise. + * libgnarl/s-tasdeb.adb: Likewise. + * libgnarl/s-tasdeb.ads: Likewise. + * libgnarl/s-tasinf.adb: Likewise. + * libgnarl/s-tasinf.ads: Likewise. + * libgnarl/s-tasinf__linux.adb: Likewise. + * libgnarl/s-tasinf__linux.ads: Likewise. + * libgnarl/s-tasinf__mingw.adb: Likewise. + * libgnarl/s-tasinf__mingw.ads: Likewise. + * libgnarl/s-tasinf__solaris.adb: Likewise. + * libgnarl/s-tasinf__solaris.ads: Likewise. + * libgnarl/s-tasinf__vxworks.ads: Likewise. + * libgnarl/s-tasini.adb: Likewise. + * libgnarl/s-tasini.ads: Likewise. + * libgnarl/s-taskin.adb: Likewise. + * libgnarl/s-taskin.ads: Likewise. + * libgnarl/s-taspri__dummy.ads: Likewise. + * libgnarl/s-taspri__hpux-dce.ads: Likewise. + * libgnarl/s-taspri__lynxos.ads: Likewise. + * libgnarl/s-taspri__mingw.ads: Likewise. + * libgnarl/s-taspri__posix-noaltstack.ads: Likewise. + * libgnarl/s-taspri__posix.ads: Likewise. + * libgnarl/s-taspri__solaris.ads: Likewise. + * libgnarl/s-taspri__vxworks.ads: Likewise. + * libgnarl/s-tasque.adb: Likewise. + * libgnarl/s-tasque.ads: Likewise. + * libgnarl/s-tasren.adb: Likewise. + * libgnarl/s-tasren.ads: Likewise. + * libgnarl/s-tasres.ads: Likewise. + * libgnarl/s-tassta.adb: Likewise. + * libgnarl/s-tassta.ads: Likewise. + * libgnarl/s-tasuti.adb: Likewise. + * libgnarl/s-tasuti.ads: Likewise. + * libgnarl/s-tataat.adb: Likewise. + * libgnarl/s-tataat.ads: Likewise. + * libgnarl/s-tpinop.adb: Likewise. + * libgnarl/s-tpinop.ads: Likewise. + * libgnarl/s-tpoaal.adb: Likewise. + * libgnarl/s-tpoben.adb: Likewise. + * libgnarl/s-tpoben.ads: Likewise. + * libgnarl/s-tpobmu.adb: Likewise. + * libgnarl/s-tpobmu.ads: Likewise. + * libgnarl/s-tpobop.adb: Likewise. + * libgnarl/s-tpobop.ads: Likewise. + * libgnarl/s-tpopmo.adb: Likewise. + * libgnarl/s-tpopsp__posix-foreign.adb: Likewise. + * libgnarl/s-tpopsp__posix.adb: Likewise. + * libgnarl/s-tpopsp__solaris.adb: Likewise. + * libgnarl/s-tpopsp__tls.adb: Likewise. + * libgnarl/s-tpopsp__vxworks-rtp.adb: Likewise. + * libgnarl/s-tpopsp__vxworks-tls.adb: Likewise. + * libgnarl/s-tpopsp__vxworks.adb: Likewise. + * libgnarl/s-tporft.adb: Likewise. + * libgnarl/s-tposen.adb: Likewise. + * libgnarl/s-tposen.ads: Likewise. + * libgnarl/s-vxwext.adb: Likewise. + * libgnarl/s-vxwext.ads: Likewise. + * libgnarl/s-vxwext__kernel-smp.adb: Likewise. + * libgnarl/s-vxwext__kernel.adb: Likewise. + * libgnarl/s-vxwext__kernel.ads: Likewise. + * libgnarl/s-vxwext__noints.adb: Likewise. + * libgnarl/s-vxwext__rtp-smp.adb: Likewise. + * libgnarl/s-vxwext__rtp.adb: Likewise. + * libgnarl/s-vxwext__rtp.ads: Likewise. + * libgnarl/s-vxwext__vthreads.ads: Likewise. + * libgnarl/s-vxwork__aarch64.ads: Likewise. + * libgnarl/s-vxwork__arm.ads: Likewise. + * libgnarl/s-vxwork__ppc.ads: Likewise. + * libgnarl/s-vxwork__x86.ads: Likewise. + * libgnarl/thread.c: Likewise. + * libgnat/a-assert.adb: Likewise. + * libgnat/a-assert.ads: Likewise. + * libgnat/a-btgbso.adb: Likewise. + * libgnat/a-btgbso.ads: Likewise. + * libgnat/a-calari.adb: Likewise. + * libgnat/a-calari.ads: Likewise. + * libgnat/a-calcon.adb: Likewise. + * libgnat/a-calcon.ads: Likewise. + * libgnat/a-caldel.adb: Likewise. + * libgnat/a-caldel.ads: Likewise. + * libgnat/a-calend.adb: Likewise. + * libgnat/a-calend.ads: Likewise. + * libgnat/a-calfor.adb: Likewise. + * libgnat/a-calfor.ads: Likewise. + * libgnat/a-catizo.adb: Likewise. + * libgnat/a-cbdlli.adb: Likewise. + * libgnat/a-cbdlli.ads: Likewise. + * libgnat/a-cbhama.adb: Likewise. + * libgnat/a-cbhama.ads: Likewise. + * libgnat/a-cbhase.adb: Likewise. + * libgnat/a-cbhase.ads: Likewise. + * libgnat/a-cbmutr.adb: Likewise. + * libgnat/a-cbmutr.ads: Likewise. + * libgnat/a-cborma.adb: Likewise. + * libgnat/a-cborma.ads: Likewise. + * libgnat/a-cborse.adb: Likewise. + * libgnat/a-cborse.ads: Likewise. + * libgnat/a-cbprqu.adb: Likewise. + * libgnat/a-cbprqu.ads: Likewise. + * libgnat/a-cbsyqu.adb: Likewise. + * libgnat/a-cbsyqu.ads: Likewise. + * libgnat/a-cdlili.adb: Likewise. + * libgnat/a-cdlili.ads: Likewise. + * libgnat/a-cfdlli.adb: Likewise. + * libgnat/a-cfdlli.ads: Likewise. + * libgnat/a-cfhama.adb: Likewise. + * libgnat/a-cfhama.ads: Likewise. + * libgnat/a-cfhase.adb: Likewise. + * libgnat/a-cfhase.ads: Likewise. + * libgnat/a-cfinve.adb: Likewise. + * libgnat/a-cfinve.ads: Likewise. + * libgnat/a-cforma.adb: Likewise. + * libgnat/a-cforma.ads: Likewise. + * libgnat/a-cforse.adb: Likewise. + * libgnat/a-cforse.ads: Likewise. + * libgnat/a-cgaaso.adb: Likewise. + * libgnat/a-cgaaso.ads: Likewise. + * libgnat/a-cgarso.adb: Likewise. + * libgnat/a-cgcaso.adb: Likewise. + * libgnat/a-chacon.adb: Likewise. + * libgnat/a-chacon.ads: Likewise. + * libgnat/a-chahan.adb: Likewise. + * libgnat/a-chahan.ads: Likewise. + * libgnat/a-chlat9.ads: Likewise. + * libgnat/a-chtgbk.adb: Likewise. + * libgnat/a-chtgbk.ads: Likewise. + * libgnat/a-chtgbo.adb: Likewise. + * libgnat/a-chtgbo.ads: Likewise. + * libgnat/a-chtgke.adb: Likewise. + * libgnat/a-chtgke.ads: Likewise. + * libgnat/a-chtgop.adb: Likewise. + * libgnat/a-chtgop.ads: Likewise. + * libgnat/a-chzla1.ads: Likewise. + * libgnat/a-chzla9.ads: Likewise. + * libgnat/a-cidlli.adb: Likewise. + * libgnat/a-cidlli.ads: Likewise. + * libgnat/a-cihama.adb: Likewise. + * libgnat/a-cihama.ads: Likewise. + * libgnat/a-cihase.adb: Likewise. + * libgnat/a-cihase.ads: Likewise. + * libgnat/a-cimutr.adb: Likewise. + * libgnat/a-cimutr.ads: Likewise. + * libgnat/a-ciorma.adb: Likewise. + * libgnat/a-ciorma.ads: Likewise. + * libgnat/a-ciormu.adb: Likewise. + * libgnat/a-ciormu.ads: Likewise. + * libgnat/a-ciorse.adb: Likewise. + * libgnat/a-ciorse.ads: Likewise. + * libgnat/a-clrefi.adb: Likewise. + * libgnat/a-clrefi.ads: Likewise. + * libgnat/a-coboho.adb: Likewise. + * libgnat/a-coboho.ads: Likewise. + * libgnat/a-cobove.adb: Likewise. + * libgnat/a-cobove.ads: Likewise. + * libgnat/a-cofove.adb: Likewise. + * libgnat/a-cofove.ads: Likewise. + * libgnat/a-cofuba.adb: Likewise. + * libgnat/a-cofuba.ads: Likewise. + * libgnat/a-cofuma.adb: Likewise. + * libgnat/a-cofuma.ads: Likewise. + * libgnat/a-cofuse.adb: Likewise. + * libgnat/a-cofuse.ads: Likewise. + * libgnat/a-cofuve.adb: Likewise. + * libgnat/a-cofuve.ads: Likewise. + * libgnat/a-cogeso.adb: Likewise. + * libgnat/a-cogeso.ads: Likewise. + * libgnat/a-cohama.adb: Likewise. + * libgnat/a-cohama.ads: Likewise. + * libgnat/a-cohase.adb: Likewise. + * libgnat/a-cohase.ads: Likewise. + * libgnat/a-cohata.ads: Likewise. + * libgnat/a-coinho.adb: Likewise. + * libgnat/a-coinho.ads: Likewise. + * libgnat/a-coinho__shared.adb: Likewise. + * libgnat/a-coinho__shared.ads: Likewise. + * libgnat/a-coinve.adb: Likewise. + * libgnat/a-coinve.ads: Likewise. + * libgnat/a-colien.adb: Likewise. + * libgnat/a-colien.ads: Likewise. + * libgnat/a-colire.adb: Likewise. + * libgnat/a-colire.ads: Likewise. + * libgnat/a-comlin.adb: Likewise. + * libgnat/a-comlin.ads: Likewise. + * libgnat/a-comutr.adb: Likewise. + * libgnat/a-comutr.ads: Likewise. + * libgnat/a-conhel.adb: Likewise. + * libgnat/a-conhel.ads: Likewise. + * libgnat/a-convec.adb: Likewise. + * libgnat/a-convec.ads: Likewise. + * libgnat/a-coorma.adb: Likewise. + * libgnat/a-coorma.ads: Likewise. + * libgnat/a-coormu.adb: Likewise. + * libgnat/a-coormu.ads: Likewise. + * libgnat/a-coorse.adb: Likewise. + * libgnat/a-coorse.ads: Likewise. + * libgnat/a-coprnu.adb: Likewise. + * libgnat/a-coprnu.ads: Likewise. + * libgnat/a-crbltr.ads: Likewise. + * libgnat/a-crbtgk.adb: Likewise. + * libgnat/a-crbtgk.ads: Likewise. + * libgnat/a-crbtgo.adb: Likewise. + * libgnat/a-crbtgo.ads: Likewise. + * libgnat/a-crdlli.adb: Likewise. + * libgnat/a-crdlli.ads: Likewise. + * libgnat/a-csquin.ads: Likewise. + * libgnat/a-cuprqu.adb: Likewise. + * libgnat/a-cuprqu.ads: Likewise. + * libgnat/a-cusyqu.adb: Likewise. + * libgnat/a-cusyqu.ads: Likewise. + * libgnat/a-cwila1.ads: Likewise. + * libgnat/a-cwila9.ads: Likewise. + * libgnat/a-decima.adb: Likewise. + * libgnat/a-decima.ads: Likewise. + * libgnat/a-dhfina.adb: Likewise. + * libgnat/a-dhfina.ads: Likewise. + * libgnat/a-diocst.adb: Likewise. + * libgnat/a-diocst.ads: Likewise. + * libgnat/a-direct.adb: Likewise. + * libgnat/a-direct.ads: Likewise. + * libgnat/a-direio.adb: Likewise. + * libgnat/a-direio.ads: Likewise. + * libgnat/a-dirval.adb: Likewise. + * libgnat/a-dirval.ads: Likewise. + * libgnat/a-dirval__mingw.adb: Likewise. + * libgnat/a-einuoc.adb: Likewise. + * libgnat/a-einuoc.ads: Likewise. + * libgnat/a-elchha.adb: Likewise. + * libgnat/a-elchha.ads: Likewise. + * libgnat/a-elchha__vxworks-ppc-full.adb: Likewise. + * libgnat/a-envvar.adb: Likewise. + * libgnat/a-excach.adb: Likewise. + * libgnat/a-except.adb: Likewise. + * libgnat/a-except.ads: Likewise. + * libgnat/a-excpol.adb: Likewise. + * libgnat/a-excpol__abort.adb: Likewise. + * libgnat/a-exctra.adb: Likewise. + * libgnat/a-exctra.ads: Likewise. + * libgnat/a-exexda.adb: Likewise. + * libgnat/a-exexpr.adb: Likewise. + * libgnat/a-exextr.adb: Likewise. + * libgnat/a-exstat.adb: Likewise. + * libgnat/a-finali.adb: Likewise. + * libgnat/a-finali.ads: Likewise. + * libgnat/a-locale.adb: Likewise. + * libgnat/a-locale.ads: Likewise. + * libgnat/a-nbnbin.adb: Likewise. + * libgnat/a-nbnbin__gmp.adb: Likewise. + * libgnat/a-nbnbre.adb: Likewise. + * libgnat/a-ngcefu.adb: Likewise. + * libgnat/a-ngcoar.adb: Likewise. + * libgnat/a-ngcoty.adb: Likewise. + * libgnat/a-ngcoty.ads: Likewise. + * libgnat/a-ngelfu.adb: Likewise. + * libgnat/a-ngelfu.ads: Likewise. + * libgnat/a-ngrear.adb: Likewise. + * libgnat/a-ngrear.ads: Likewise. + * libgnat/a-nudira.adb: Likewise. + * libgnat/a-nudira.ads: Likewise. + * libgnat/a-nuflra.adb: Likewise. + * libgnat/a-nuflra.ads: Likewise. + * libgnat/a-numaux.ads: Likewise. + * libgnat/a-numaux__darwin.adb: Likewise. + * libgnat/a-numaux__darwin.ads: Likewise. + * libgnat/a-numaux__libc-x86.ads: Likewise. + * libgnat/a-numaux__vxworks.ads: Likewise. + * libgnat/a-numaux__x86.adb: Likewise. + * libgnat/a-numaux__x86.ads: Likewise. + * libgnat/a-rbtgbk.adb: Likewise. + * libgnat/a-rbtgbk.ads: Likewise. + * libgnat/a-rbtgbo.adb: Likewise. + * libgnat/a-rbtgbo.ads: Likewise. + * libgnat/a-rbtgso.adb: Likewise. + * libgnat/a-rbtgso.ads: Likewise. + * libgnat/a-sbecin.adb: Likewise. + * libgnat/a-sbecin.ads: Likewise. + * libgnat/a-sbhcin.adb: Likewise. + * libgnat/a-sbhcin.ads: Likewise. + * libgnat/a-sblcin.adb: Likewise. + * libgnat/a-sblcin.ads: Likewise. + * libgnat/a-secain.adb: Likewise. + * libgnat/a-secain.ads: Likewise. + * libgnat/a-sequio.adb: Likewise. + * libgnat/a-sequio.ads: Likewise. + * libgnat/a-sfecin.ads: Likewise. + * libgnat/a-sfhcin.ads: Likewise. + * libgnat/a-sflcin.ads: Likewise. + * libgnat/a-shcain.adb: Likewise. + * libgnat/a-shcain.ads: Likewise. + * libgnat/a-siocst.adb: Likewise. + * libgnat/a-siocst.ads: Likewise. + * libgnat/a-slcain.adb: Likewise. + * libgnat/a-slcain.ads: Likewise. + * libgnat/a-ssicst.adb: Likewise. + * libgnat/a-ssicst.ads: Likewise. + * libgnat/a-stboha.adb: Likewise. + * libgnat/a-stmaco.ads: Likewise. + * libgnat/a-storio.adb: Likewise. + * libgnat/a-strbou.adb: Likewise. + * libgnat/a-strbou.ads: Likewise. + * libgnat/a-stream.adb: Likewise. + * libgnat/a-stream.ads: Likewise. + * libgnat/a-strfix.adb: Likewise. + * libgnat/a-strhas.adb: Likewise. + * libgnat/a-strmap.adb: Likewise. + * libgnat/a-strmap.ads: Likewise. + * libgnat/a-strsea.adb: Likewise. + * libgnat/a-strsea.ads: Likewise. + * libgnat/a-strsup.adb: Likewise. + * libgnat/a-strsup.ads: Likewise. + * libgnat/a-strunb.adb: Likewise. + * libgnat/a-strunb.ads: Likewise. + * libgnat/a-strunb__shared.adb: Likewise. + * libgnat/a-strunb__shared.ads: Likewise. + * libgnat/a-ststio.adb: Likewise. + * libgnat/a-ststio.ads: Likewise. + * libgnat/a-stunau.adb: Likewise. + * libgnat/a-stunau.ads: Likewise. + * libgnat/a-stunau__shared.adb: Likewise. + * libgnat/a-stunha.adb: Likewise. + * libgnat/a-stuten.adb: Likewise. + * libgnat/a-stwibo.adb: Likewise. + * libgnat/a-stwibo.ads: Likewise. + * libgnat/a-stwifi.adb: Likewise. + * libgnat/a-stwiha.adb: Likewise. + * libgnat/a-stwima.adb: Likewise. + * libgnat/a-stwima.ads: Likewise. + * libgnat/a-stwise.adb: Likewise. + * libgnat/a-stwise.ads: Likewise. + * libgnat/a-stwisu.adb: Likewise. + * libgnat/a-stwisu.ads: Likewise. + * libgnat/a-stwiun.adb: Likewise. + * libgnat/a-stwiun.ads: Likewise. + * libgnat/a-stwiun__shared.adb: Likewise. + * libgnat/a-stwiun__shared.ads: Likewise. + * libgnat/a-stzbou.adb: Likewise. + * libgnat/a-stzbou.ads: Likewise. + * libgnat/a-stzfix.adb: Likewise. + * libgnat/a-stzhas.adb: Likewise. + * libgnat/a-stzmap.adb: Likewise. + * libgnat/a-stzmap.ads: Likewise. + * libgnat/a-stzsea.adb: Likewise. + * libgnat/a-stzsea.ads: Likewise. + * libgnat/a-stzsup.adb: Likewise. + * libgnat/a-stzsup.ads: Likewise. + * libgnat/a-stzunb.adb: Likewise. + * libgnat/a-stzunb.ads: Likewise. + * libgnat/a-stzunb__shared.adb: Likewise. + * libgnat/a-stzunb__shared.ads: Likewise. + * libgnat/a-suecin.adb: Likewise. + * libgnat/a-suecin.ads: Likewise. + * libgnat/a-suenco.adb: Likewise. + * libgnat/a-suenst.adb: Likewise. + * libgnat/a-suewst.adb: Likewise. + * libgnat/a-suezst.adb: Likewise. + * libgnat/a-suhcin.adb: Likewise. + * libgnat/a-suhcin.ads: Likewise. + * libgnat/a-sulcin.adb: Likewise. + * libgnat/a-sulcin.ads: Likewise. + * libgnat/a-suteio.adb: Likewise. + * libgnat/a-suteio.ads: Likewise. + * libgnat/a-suteio__shared.adb: Likewise. + * libgnat/a-swbwha.adb: Likewise. + * libgnat/a-swmwco.ads: Likewise. + * libgnat/a-swunau.adb: Likewise. + * libgnat/a-swunau.ads: Likewise. + * libgnat/a-swunau__shared.adb: Likewise. + * libgnat/a-swuwha.adb: Likewise. + * libgnat/a-swuwti.adb: Likewise. + * libgnat/a-swuwti.ads: Likewise. + * libgnat/a-swuwti__shared.adb: Likewise. + * libgnat/a-szbzha.adb: Likewise. + * libgnat/a-szmzco.ads: Likewise. + * libgnat/a-szunau.adb: Likewise. + * libgnat/a-szunau.ads: Likewise. + * libgnat/a-szunau__shared.adb: Likewise. + * libgnat/a-szuzha.adb: Likewise. + * libgnat/a-szuzti.adb: Likewise. + * libgnat/a-szuzti.ads: Likewise. + * libgnat/a-szuzti__shared.adb: Likewise. + * libgnat/a-tags.adb: Likewise. + * libgnat/a-tags.ads: Likewise. + * libgnat/a-teioed.adb: Likewise. + * libgnat/a-teioed.ads: Likewise. + * libgnat/a-textio.adb: Likewise. + * libgnat/a-textio.ads: Likewise. + * libgnat/a-tiboio.adb: Likewise. + * libgnat/a-ticoau.adb: Likewise. + * libgnat/a-ticoau.ads: Likewise. + * libgnat/a-ticoio.adb: Likewise. + * libgnat/a-ticoio.ads: Likewise. + * libgnat/a-tideau.adb: Likewise. + * libgnat/a-tideau.ads: Likewise. + * libgnat/a-tideio.adb: Likewise. + * libgnat/a-tideio.ads: Likewise. + * libgnat/a-tienau.adb: Likewise. + * libgnat/a-tienau.ads: Likewise. + * libgnat/a-tienio.adb: Likewise. + * libgnat/a-tifiio.adb: Likewise. + * libgnat/a-tiflau.adb: Likewise. + * libgnat/a-tiflau.ads: Likewise. + * libgnat/a-tiflio.adb: Likewise. + * libgnat/a-tiflio.ads: Likewise. + * libgnat/a-tigeau.adb: Likewise. + * libgnat/a-tigeau.ads: Likewise. + * libgnat/a-tigeli.adb: Likewise. + * libgnat/a-tiinau.adb: Likewise. + * libgnat/a-tiinau.ads: Likewise. + * libgnat/a-tiinio.adb: Likewise. + * libgnat/a-tiinio.ads: Likewise. + * libgnat/a-timoau.adb: Likewise. + * libgnat/a-timoau.ads: Likewise. + * libgnat/a-timoio.adb: Likewise. + * libgnat/a-timoio.ads: Likewise. + * libgnat/a-tiocst.adb: Likewise. + * libgnat/a-tiocst.ads: Likewise. + * libgnat/a-tirsfi.adb: Likewise. + * libgnat/a-tirsfi.ads: Likewise. + * libgnat/a-titest.adb: Likewise. + * libgnat/a-undesu.adb: Likewise. + * libgnat/a-wichha.adb: Likewise. + * libgnat/a-wichun.adb: Likewise. + * libgnat/a-wichun.ads: Likewise. + * libgnat/a-witeio.adb: Likewise. + * libgnat/a-witeio.ads: Likewise. + * libgnat/a-wrstfi.adb: Likewise. + * libgnat/a-wrstfi.ads: Likewise. + * libgnat/a-wtcoau.adb: Likewise. + * libgnat/a-wtcoau.ads: Likewise. + * libgnat/a-wtcoio.adb: Likewise. + * libgnat/a-wtcstr.adb: Likewise. + * libgnat/a-wtcstr.ads: Likewise. + * libgnat/a-wtdeau.adb: Likewise. + * libgnat/a-wtdeau.ads: Likewise. + * libgnat/a-wtdeio.adb: Likewise. + * libgnat/a-wtedit.adb: Likewise. + * libgnat/a-wtedit.ads: Likewise. + * libgnat/a-wtenau.adb: Likewise. + * libgnat/a-wtenau.ads: Likewise. + * libgnat/a-wtenio.adb: Likewise. + * libgnat/a-wtfiio.adb: Likewise. + * libgnat/a-wtflau.adb: Likewise. + * libgnat/a-wtflau.ads: Likewise. + * libgnat/a-wtflio.adb: Likewise. + * libgnat/a-wtgeau.adb: Likewise. + * libgnat/a-wtgeau.ads: Likewise. + * libgnat/a-wtinau.adb: Likewise. + * libgnat/a-wtinau.ads: Likewise. + * libgnat/a-wtinio.adb: Likewise. + * libgnat/a-wtmoau.adb: Likewise. + * libgnat/a-wtmoau.ads: Likewise. + * libgnat/a-wtmoio.adb: Likewise. + * libgnat/a-wtmoio.ads: Likewise. + * libgnat/a-wttest.adb: Likewise. + * libgnat/a-wwboio.adb: Likewise. + * libgnat/a-zchhan.adb: Likewise. + * libgnat/a-zchuni.adb: Likewise. + * libgnat/a-zchuni.ads: Likewise. + * libgnat/a-zrstfi.adb: Likewise. + * libgnat/a-zrstfi.ads: Likewise. + * libgnat/a-ztcoau.adb: Likewise. + * libgnat/a-ztcoio.adb: Likewise. + * libgnat/a-ztcstr.adb: Likewise. + * libgnat/a-ztcstr.ads: Likewise. + * libgnat/a-ztdeau.adb: Likewise. + * libgnat/a-ztdeau.ads: Likewise. + * libgnat/a-ztdeio.adb: Likewise. + * libgnat/a-ztedit.adb: Likewise. + * libgnat/a-ztedit.ads: Likewise. + * libgnat/a-ztenau.adb: Likewise. + * libgnat/a-ztenau.ads: Likewise. + * libgnat/a-ztenio.adb: Likewise. + * libgnat/a-ztexio.adb: Likewise. + * libgnat/a-ztexio.ads: Likewise. + * libgnat/a-ztfiio.adb: Likewise. + * libgnat/a-ztflau.adb: Likewise. + * libgnat/a-ztflau.ads: Likewise. + * libgnat/a-ztflio.adb: Likewise. + * libgnat/a-ztgeau.adb: Likewise. + * libgnat/a-ztgeau.ads: Likewise. + * libgnat/a-ztinau.adb: Likewise. + * libgnat/a-ztinau.ads: Likewise. + * libgnat/a-ztinio.adb: Likewise. + * libgnat/a-ztmoau.adb: Likewise. + * libgnat/a-ztmoau.ads: Likewise. + * libgnat/a-ztmoio.adb: Likewise. + * libgnat/a-zttest.adb: Likewise. + * libgnat/a-zzboio.adb: Likewise. + * libgnat/g-allein.ads: Likewise. + * libgnat/g-alleve.adb: Likewise. + * libgnat/g-alleve.ads: Likewise. + * libgnat/g-alleve__hard.adb: Likewise. + * libgnat/g-alleve__hard.ads: Likewise. + * libgnat/g-altcon.adb: Likewise. + * libgnat/g-altcon.ads: Likewise. + * libgnat/g-altive.ads: Likewise. + * libgnat/g-alveop.adb: Likewise. + * libgnat/g-alveop.ads: Likewise. + * libgnat/g-alvety.ads: Likewise. + * libgnat/g-alvevi.ads: Likewise. + * libgnat/g-arrspl.adb: Likewise. + * libgnat/g-arrspl.ads: Likewise. + * libgnat/g-awk.adb: Likewise. + * libgnat/g-awk.ads: Likewise. + * libgnat/g-binenv.adb: Likewise. + * libgnat/g-binenv.ads: Likewise. + * libgnat/g-brapre.ads: Likewise. + * libgnat/g-bubsor.adb: Likewise. + * libgnat/g-bubsor.ads: Likewise. + * libgnat/g-busora.adb: Likewise. + * libgnat/g-busora.ads: Likewise. + * libgnat/g-busorg.adb: Likewise. + * libgnat/g-busorg.ads: Likewise. + * libgnat/g-byorma.adb: Likewise. + * libgnat/g-byorma.ads: Likewise. + * libgnat/g-bytswa.adb: Likewise. + * libgnat/g-bytswa.ads: Likewise. + * libgnat/g-calend.adb: Likewise. + * libgnat/g-calend.ads: Likewise. + * libgnat/g-casuti.adb: Likewise. + * libgnat/g-casuti.ads: Likewise. + * libgnat/g-catiio.adb: Likewise. + * libgnat/g-catiio.ads: Likewise. + * libgnat/g-cgi.adb: Likewise. + * libgnat/g-cgi.ads: Likewise. + * libgnat/g-cgicoo.adb: Likewise. + * libgnat/g-cgicoo.ads: Likewise. + * libgnat/g-cgideb.adb: Likewise. + * libgnat/g-cgideb.ads: Likewise. + * libgnat/g-comlin.adb: Likewise. + * libgnat/g-comlin.ads: Likewise. + * libgnat/g-comver.adb: Likewise. + * libgnat/g-comver.ads: Likewise. + * libgnat/g-cppexc.adb: Likewise. + * libgnat/g-cppexc.ads: Likewise. + * libgnat/g-crc32.adb: Likewise. + * libgnat/g-crc32.ads: Likewise. + * libgnat/g-ctrl_c.adb: Likewise. + * libgnat/g-ctrl_c.ads: Likewise. + * libgnat/g-curexc.ads: Likewise. + * libgnat/g-debpoo.adb: Likewise. + * libgnat/g-debpoo.ads: Likewise. + * libgnat/g-debuti.adb: Likewise. + * libgnat/g-debuti.ads: Likewise. + * libgnat/g-decstr.adb: Likewise. + * libgnat/g-decstr.ads: Likewise. + * libgnat/g-deutst.ads: Likewise. + * libgnat/g-diopit.adb: Likewise. + * libgnat/g-diopit.ads: Likewise. + * libgnat/g-dirope.adb: Likewise. + * libgnat/g-dirope.ads: Likewise. + * libgnat/g-dynhta.adb: Likewise. + * libgnat/g-dynhta.ads: Likewise. + * libgnat/g-dyntab.adb: Likewise. + * libgnat/g-dyntab.ads: Likewise. + * libgnat/g-eacodu.adb: Likewise. + * libgnat/g-encstr.adb: Likewise. + * libgnat/g-encstr.ads: Likewise. + * libgnat/g-enutst.ads: Likewise. + * libgnat/g-excact.adb: Likewise. + * libgnat/g-excact.ads: Likewise. + * libgnat/g-except.ads: Likewise. + * libgnat/g-exctra.adb: Likewise. + * libgnat/g-exctra.ads: Likewise. + * libgnat/g-expect.adb: Likewise. + * libgnat/g-expect.ads: Likewise. + * libgnat/g-exptty.adb: Likewise. + * libgnat/g-exptty.ads: Likewise. + * libgnat/g-flocon.ads: Likewise. + * libgnat/g-forstr.adb: Likewise. + * libgnat/g-forstr.ads: Likewise. + * libgnat/g-graphs.adb: Likewise. + * libgnat/g-graphs.ads: Likewise. + * libgnat/g-heasor.adb: Likewise. + * libgnat/g-heasor.ads: Likewise. + * libgnat/g-hesora.adb: Likewise. + * libgnat/g-hesora.ads: Likewise. + * libgnat/g-hesorg.adb: Likewise. + * libgnat/g-hesorg.ads: Likewise. + * libgnat/g-htable.adb: Likewise. + * libgnat/g-htable.ads: Likewise. + * libgnat/g-io-put__vxworks.adb: Likewise. + * libgnat/g-io.adb: Likewise. + * libgnat/g-io.ads: Likewise. + * libgnat/g-io_aux.adb: Likewise. + * libgnat/g-io_aux.ads: Likewise. + * libgnat/g-lists.adb: Likewise. + * libgnat/g-lists.ads: Likewise. + * libgnat/g-locfil.adb: Likewise. + * libgnat/g-locfil.ads: Likewise. + * libgnat/g-mbdira.adb: Likewise. + * libgnat/g-mbdira.ads: Likewise. + * libgnat/g-mbflra.adb: Likewise. + * libgnat/g-mbflra.ads: Likewise. + * libgnat/g-md5.adb: Likewise. + * libgnat/g-md5.ads: Likewise. + * libgnat/g-memdum.adb: Likewise. + * libgnat/g-memdum.ads: Likewise. + * libgnat/g-moreex.adb: Likewise. + * libgnat/g-moreex.ads: Likewise. + * libgnat/g-os_lib.adb: Likewise. + * libgnat/g-os_lib.ads: Likewise. + * libgnat/g-pehage.adb: Likewise. + * libgnat/g-pehage.ads: Likewise. + * libgnat/g-rannum.adb: Likewise. + * libgnat/g-rannum.ads: Likewise. + * libgnat/g-regexp.adb: Likewise. + * libgnat/g-regexp.ads: Likewise. + * libgnat/g-regist.adb: Likewise. + * libgnat/g-regist.ads: Likewise. + * libgnat/g-regpat.adb: Likewise. + * libgnat/g-regpat.ads: Likewise. + * libgnat/g-rewdat.adb: Likewise. + * libgnat/g-rewdat.ads: Likewise. + * libgnat/g-sechas.adb: Likewise. + * libgnat/g-sechas.ads: Likewise. + * libgnat/g-sehamd.adb: Likewise. + * libgnat/g-sehamd.ads: Likewise. + * libgnat/g-sehash.adb: Likewise. + * libgnat/g-sehash.ads: Likewise. + * libgnat/g-sercom.adb: Likewise. + * libgnat/g-sercom.ads: Likewise. + * libgnat/g-sercom__linux.adb: Likewise. + * libgnat/g-sercom__mingw.adb: Likewise. + * libgnat/g-sestin.ads: Likewise. + * libgnat/g-sets.adb: Likewise. + * libgnat/g-sets.ads: Likewise. + * libgnat/g-sha1.adb: Likewise. + * libgnat/g-sha1.ads: Likewise. + * libgnat/g-sha224.ads: Likewise. + * libgnat/g-sha256.ads: Likewise. + * libgnat/g-sha384.ads: Likewise. + * libgnat/g-sha512.ads: Likewise. + * libgnat/g-shsh32.adb: Likewise. + * libgnat/g-shsh32.ads: Likewise. + * libgnat/g-shsh64.adb: Likewise. + * libgnat/g-shsh64.ads: Likewise. + * libgnat/g-shshco.adb: Likewise. + * libgnat/g-shshco.ads: Likewise. + * libgnat/g-soccon.ads: Likewise. + * libgnat/g-socket.adb: Likewise. + * libgnat/g-socket.ads: Likewise. + * libgnat/g-socket__dummy.adb: Likewise. + * libgnat/g-socket__dummy.ads: Likewise. + * libgnat/g-socthi.adb: Likewise. + * libgnat/g-socthi.ads: Likewise. + * libgnat/g-socthi__dummy.adb: Likewise. + * libgnat/g-socthi__dummy.ads: Likewise. + * libgnat/g-socthi__mingw.adb: Likewise. + * libgnat/g-socthi__mingw.ads: Likewise. + * libgnat/g-socthi__vxworks.adb: Likewise. + * libgnat/g-socthi__vxworks.ads: Likewise. + * libgnat/g-soliop.ads: Likewise. + * libgnat/g-soliop__lynxos.ads: Likewise. + * libgnat/g-soliop__mingw.ads: Likewise. + * libgnat/g-soliop__qnx.ads: Likewise. + * libgnat/g-soliop__solaris.ads: Likewise. + * libgnat/g-sothco.adb: Likewise. + * libgnat/g-sothco.ads: Likewise. + * libgnat/g-sothco__dummy.adb: Likewise. + * libgnat/g-sothco__dummy.ads: Likewise. + * libgnat/g-souinf.ads: Likewise. + * libgnat/g-spchge.adb: Likewise. + * libgnat/g-spchge.ads: Likewise. + * libgnat/g-speche.adb: Likewise. + * libgnat/g-speche.ads: Likewise. + * libgnat/g-spipat.adb: Likewise. + * libgnat/g-spipat.ads: Likewise. + * libgnat/g-spitbo.adb: Likewise. + * libgnat/g-spitbo.ads: Likewise. + * libgnat/g-sptabo.ads: Likewise. + * libgnat/g-sptain.ads: Likewise. + * libgnat/g-sptavs.ads: Likewise. + * libgnat/g-sse.ads: Likewise. + * libgnat/g-ssvety.ads: Likewise. + * libgnat/g-sthcso.adb: Likewise. + * libgnat/g-stheme.adb: Likewise. + * libgnat/g-strhas.ads: Likewise. + * libgnat/g-string.adb: Likewise. + * libgnat/g-string.ads: Likewise. + * libgnat/g-strspl.ads: Likewise. + * libgnat/g-stseme.adb: Likewise. + * libgnat/g-stsifd__sockets.adb: Likewise. + * libgnat/g-table.adb: Likewise. + * libgnat/g-table.ads: Likewise. + * libgnat/g-tasloc.adb: Likewise. + * libgnat/g-tasloc.ads: Likewise. + * libgnat/g-timsta.adb: Likewise. + * libgnat/g-timsta.ads: Likewise. + * libgnat/g-traceb.adb: Likewise. + * libgnat/g-traceb.ads: Likewise. + * libgnat/g-trasym.adb: Likewise. + * libgnat/g-trasym.ads: Likewise. + * libgnat/g-tty.adb: Likewise. + * libgnat/g-tty.ads: Likewise. + * libgnat/g-u3spch.adb: Likewise. + * libgnat/g-u3spch.ads: Likewise. + * libgnat/g-utf_32.adb: Likewise. + * libgnat/g-utf_32.ads: Likewise. + * libgnat/g-wispch.adb: Likewise. + * libgnat/g-wispch.ads: Likewise. + * libgnat/g-wistsp.ads: Likewise. + * libgnat/g-zspche.adb: Likewise. + * libgnat/g-zspche.ads: Likewise. + * libgnat/g-zstspl.ads: Likewise. + * libgnat/gnat.ads: Likewise. + * libgnat/i-c.adb: Likewise. + * libgnat/i-cexten.ads: Likewise. + * libgnat/i-cobol.adb: Likewise. + * libgnat/i-cobol.ads: Likewise. + * libgnat/i-cpoint.adb: Likewise. + * libgnat/i-cpoint.ads: Likewise. + * libgnat/i-cstrea.adb: Likewise. + * libgnat/i-cstrea.ads: Likewise. + * libgnat/i-cstrin.adb: Likewise. + * libgnat/i-cstrin.ads: Likewise. + * libgnat/i-fortra.adb: Likewise. + * libgnat/i-pacdec.adb: Likewise. + * libgnat/i-pacdec.ads: Likewise. + * libgnat/i-vxwoio.adb: Likewise. + * libgnat/i-vxwoio.ads: Likewise. + * libgnat/i-vxwork.ads: Likewise. + * libgnat/i-vxwork__x86.ads: Likewise. + * libgnat/interfac.ads: Likewise. + * libgnat/memtrack.adb: Likewise. + * libgnat/s-addima.adb: Likewise. + * libgnat/s-addima.ads: Likewise. + * libgnat/s-addope.adb: Likewise. + * libgnat/s-addope.ads: Likewise. + * libgnat/s-aotase.adb: Likewise. + * libgnat/s-aotase.ads: Likewise. + * libgnat/s-arit64.adb: Likewise. + * libgnat/s-arit64.ads: Likewise. + * libgnat/s-assert.adb: Likewise. + * libgnat/s-assert.ads: Likewise. + * libgnat/s-atacco.adb: Likewise. + * libgnat/s-atacco.ads: Likewise. + * libgnat/s-atocou.adb: Likewise. + * libgnat/s-atocou.ads: Likewise. + * libgnat/s-atocou__builtin.adb: Likewise. + * libgnat/s-atocou__x86.adb: Likewise. + * libgnat/s-atoope.ads: Likewise. + * libgnat/s-atopar.adb: Likewise. + * libgnat/s-atopar.ads: Likewise. + * libgnat/s-atopex.adb: Likewise. + * libgnat/s-atopex.ads: Likewise. + * libgnat/s-atopri.adb: Likewise. + * libgnat/s-atopri.ads: Likewise. + * libgnat/s-auxdec.adb: Likewise. + * libgnat/s-auxdec.ads: Likewise. + * libgnat/s-bignum.adb: Likewise. + * libgnat/s-bignum.ads: Likewise. + * libgnat/s-bitfie.ads: Likewise. + * libgnat/s-bitops.adb: Likewise. + * libgnat/s-bitops.ads: Likewise. + * libgnat/s-bituti.adb: Likewise. + * libgnat/s-bituti.ads: Likewise. + * libgnat/s-boarop.ads: Likewise. + * libgnat/s-boustr.adb: Likewise. + * libgnat/s-boustr.ads: Likewise. + * libgnat/s-bytswa.ads: Likewise. + * libgnat/s-carsi8.adb: Likewise. + * libgnat/s-carsi8.ads: Likewise. + * libgnat/s-carun8.adb: Likewise. + * libgnat/s-carun8.ads: Likewise. + * libgnat/s-casi16.adb: Likewise. + * libgnat/s-casi16.ads: Likewise. + * libgnat/s-casi32.adb: Likewise. + * libgnat/s-casi32.ads: Likewise. + * libgnat/s-casi64.adb: Likewise. + * libgnat/s-casi64.ads: Likewise. + * libgnat/s-casuti.adb: Likewise. + * libgnat/s-casuti.ads: Likewise. + * libgnat/s-caun16.adb: Likewise. + * libgnat/s-caun16.ads: Likewise. + * libgnat/s-caun32.adb: Likewise. + * libgnat/s-caun32.ads: Likewise. + * libgnat/s-caun64.adb: Likewise. + * libgnat/s-caun64.ads: Likewise. + * libgnat/s-chepoo.ads: Likewise. + * libgnat/s-commun.adb: Likewise. + * libgnat/s-commun.ads: Likewise. + * libgnat/s-conca2.adb: Likewise. + * libgnat/s-conca2.ads: Likewise. + * libgnat/s-conca3.adb: Likewise. + * libgnat/s-conca3.ads: Likewise. + * libgnat/s-conca4.adb: Likewise. + * libgnat/s-conca4.ads: Likewise. + * libgnat/s-conca5.adb: Likewise. + * libgnat/s-conca5.ads: Likewise. + * libgnat/s-conca6.adb: Likewise. + * libgnat/s-conca6.ads: Likewise. + * libgnat/s-conca7.adb: Likewise. + * libgnat/s-conca7.ads: Likewise. + * libgnat/s-conca8.adb: Likewise. + * libgnat/s-conca8.ads: Likewise. + * libgnat/s-conca9.adb: Likewise. + * libgnat/s-conca9.ads: Likewise. + * libgnat/s-crc32.adb: Likewise. + * libgnat/s-crc32.ads: Likewise. + * libgnat/s-crtl.ads: Likewise. + * libgnat/s-dfmkio.ads: Likewise. + * libgnat/s-dfmopr.ads: Likewise. + * libgnat/s-dgmgop.ads: Likewise. + * libgnat/s-diflio.adb: Likewise. + * libgnat/s-diflio.ads: Likewise. + * libgnat/s-diflmk.ads: Likewise. + * libgnat/s-digemk.ads: Likewise. + * libgnat/s-diinio.adb: Likewise. + * libgnat/s-diinio.ads: Likewise. + * libgnat/s-dilomk.ads: Likewise. + * libgnat/s-dim.ads: Likewise. + * libgnat/s-dimkio.ads: Likewise. + * libgnat/s-dimmks.ads: Likewise. + * libgnat/s-direio.adb: Likewise. + * libgnat/s-direio.ads: Likewise. + * libgnat/s-dlmkio.ads: Likewise. + * libgnat/s-dlmopr.ads: Likewise. + * libgnat/s-dmotpr.ads: Likewise. + * libgnat/s-dsaser.ads: Likewise. + * libgnat/s-dwalin.adb: Likewise. + * libgnat/s-dwalin.ads: Likewise. + * libgnat/s-elaall.adb: Likewise. + * libgnat/s-elaall.ads: Likewise. + * libgnat/s-excdeb.adb: Likewise. + * libgnat/s-excdeb.ads: Likewise. + * libgnat/s-except.adb: Likewise. + * libgnat/s-except.ads: Likewise. + * libgnat/s-excmac__arm.adb: Likewise. + * libgnat/s-excmac__arm.ads: Likewise. + * libgnat/s-excmac__gcc.adb: Likewise. + * libgnat/s-excmac__gcc.ads: Likewise. + * libgnat/s-exctab.adb: Likewise. + * libgnat/s-exctab.ads: Likewise. + * libgnat/s-exctra.adb: Likewise. + * libgnat/s-exctra.ads: Likewise. + * libgnat/s-exnint.adb: Likewise. + * libgnat/s-exnint.ads: Likewise. + * libgnat/s-exnllf.adb: Likewise. + * libgnat/s-exnllf.ads: Likewise. + * libgnat/s-exnlli.adb: Likewise. + * libgnat/s-exnlli.ads: Likewise. + * libgnat/s-expint.adb: Likewise. + * libgnat/s-expint.ads: Likewise. + * libgnat/s-explli.adb: Likewise. + * libgnat/s-explli.ads: Likewise. + * libgnat/s-expllu.adb: Likewise. + * libgnat/s-expllu.ads: Likewise. + * libgnat/s-expmod.adb: Likewise. + * libgnat/s-expmod.ads: Likewise. + * libgnat/s-expuns.adb: Likewise. + * libgnat/s-expuns.ads: Likewise. + * libgnat/s-fatflt.ads: Likewise. + * libgnat/s-fatgen.adb: Likewise. + * libgnat/s-fatgen.ads: Likewise. + * libgnat/s-fatlfl.ads: Likewise. + * libgnat/s-fatllf.ads: Likewise. + * libgnat/s-fatsfl.ads: Likewise. + * libgnat/s-ficobl.ads: Likewise. + * libgnat/s-filatt.ads: Likewise. + * libgnat/s-fileio.adb: Likewise. + * libgnat/s-fileio.ads: Likewise. + * libgnat/s-finmas.adb: Likewise. + * libgnat/s-finmas.ads: Likewise. + * libgnat/s-finroo.adb: Likewise. + * libgnat/s-finroo.ads: Likewise. + * libgnat/s-flocon.adb: Likewise. + * libgnat/s-flocon.ads: Likewise. + * libgnat/s-flocon__none.adb: Likewise. + * libgnat/s-fore.adb: Likewise. + * libgnat/s-fore.ads: Likewise. + * libgnat/s-gearop.adb: Likewise. + * libgnat/s-gearop.ads: Likewise. + * libgnat/s-genbig.adb: Likewise. + * libgnat/s-genbig.ads: Likewise. + * libgnat/s-geveop.adb: Likewise. + * libgnat/s-geveop.ads: Likewise. + * libgnat/s-gloloc.adb: Likewise. + * libgnat/s-gloloc.ads: Likewise. + * libgnat/s-gloloc__mingw.adb: Likewise. + * libgnat/s-htable.adb: Likewise. + * libgnat/s-htable.ads: Likewise. + * libgnat/s-imenne.adb: Likewise. + * libgnat/s-imenne.ads: Likewise. + * libgnat/s-imgbiu.adb: Likewise. + * libgnat/s-imgbiu.ads: Likewise. + * libgnat/s-imgboo.adb: Likewise. + * libgnat/s-imgboo.ads: Likewise. + * libgnat/s-imgcha.adb: Likewise. + * libgnat/s-imgcha.ads: Likewise. + * libgnat/s-imgdec.adb: Likewise. + * libgnat/s-imgdec.ads: Likewise. + * libgnat/s-imgenu.adb: Likewise. + * libgnat/s-imgenu.ads: Likewise. + * libgnat/s-imgint.adb: Likewise. + * libgnat/s-imgint.ads: Likewise. + * libgnat/s-imgllb.adb: Likewise. + * libgnat/s-imgllb.ads: Likewise. + * libgnat/s-imglld.adb: Likewise. + * libgnat/s-imglld.ads: Likewise. + * libgnat/s-imglli.adb: Likewise. + * libgnat/s-imglli.ads: Likewise. + * libgnat/s-imgllu.adb: Likewise. + * libgnat/s-imgllu.ads: Likewise. + * libgnat/s-imgllw.adb: Likewise. + * libgnat/s-imgllw.ads: Likewise. + * libgnat/s-imgrea.adb: Likewise. + * libgnat/s-imgrea.ads: Likewise. + * libgnat/s-imguns.adb: Likewise. + * libgnat/s-imguns.ads: Likewise. + * libgnat/s-imgwch.adb: Likewise. + * libgnat/s-imgwch.ads: Likewise. + * libgnat/s-imgwiu.adb: Likewise. + * libgnat/s-imgwiu.ads: Likewise. + * libgnat/s-io.adb: Likewise. + * libgnat/s-io.ads: Likewise. + * libgnat/s-llflex.ads: Likewise. + * libgnat/s-maccod.ads: Likewise. + * libgnat/s-mantis.adb: Likewise. + * libgnat/s-mantis.ads: Likewise. + * libgnat/s-mastop.adb: Likewise. + * libgnat/s-mastop.ads: Likewise. + * libgnat/s-memcop.ads: Likewise. + * libgnat/s-memory.adb: Likewise. + * libgnat/s-memory.ads: Likewise. + * libgnat/s-mmap.adb: Likewise. + * libgnat/s-mmap.ads: Likewise. + * libgnat/s-mmauni__long.ads: Likewise. + * libgnat/s-mmosin__mingw.adb: Likewise. + * libgnat/s-mmosin__mingw.ads: Likewise. + * libgnat/s-mmosin__unix.adb: Likewise. + * libgnat/s-mmosin__unix.ads: Likewise. + * libgnat/s-multip.adb: Likewise. + * libgnat/s-objrea.adb: Likewise. + * libgnat/s-objrea.ads: Likewise. + * libgnat/s-optide.adb: Likewise. + * libgnat/s-os_lib.adb: Likewise. + * libgnat/s-os_lib.ads: Likewise. + * libgnat/s-osprim.ads: Likewise. + * libgnat/s-osprim__darwin.adb: Likewise. + * libgnat/s-osprim__lynxos.ads: Likewise. + * libgnat/s-osprim__mingw.adb: Likewise. + * libgnat/s-osprim__posix.adb: Likewise. + * libgnat/s-osprim__posix2008.adb: Likewise. + * libgnat/s-osprim__rtems.adb: Likewise. + * libgnat/s-osprim__solaris.adb: Likewise. + * libgnat/s-osprim__unix.adb: Likewise. + * libgnat/s-osprim__vxworks.adb: Likewise. + * libgnat/s-osprim__x32.adb: Likewise. + * libgnat/s-osvers__vxworks-653.ads: Likewise. + * libgnat/s-pack03.adb: Likewise. + * libgnat/s-pack03.ads: Likewise. + * libgnat/s-pack05.adb: Likewise. + * libgnat/s-pack05.ads: Likewise. + * libgnat/s-pack06.adb: Likewise. + * libgnat/s-pack06.ads: Likewise. + * libgnat/s-pack07.adb: Likewise. + * libgnat/s-pack07.ads: Likewise. + * libgnat/s-pack09.adb: Likewise. + * libgnat/s-pack09.ads: Likewise. + * libgnat/s-pack10.adb: Likewise. + * libgnat/s-pack10.ads: Likewise. + * libgnat/s-pack11.adb: Likewise. + * libgnat/s-pack11.ads: Likewise. + * libgnat/s-pack12.adb: Likewise. + * libgnat/s-pack12.ads: Likewise. + * libgnat/s-pack13.adb: Likewise. + * libgnat/s-pack13.ads: Likewise. + * libgnat/s-pack14.adb: Likewise. + * libgnat/s-pack14.ads: Likewise. + * libgnat/s-pack15.adb: Likewise. + * libgnat/s-pack15.ads: Likewise. + * libgnat/s-pack17.adb: Likewise. + * libgnat/s-pack17.ads: Likewise. + * libgnat/s-pack18.adb: Likewise. + * libgnat/s-pack18.ads: Likewise. + * libgnat/s-pack19.adb: Likewise. + * libgnat/s-pack19.ads: Likewise. + * libgnat/s-pack20.adb: Likewise. + * libgnat/s-pack20.ads: Likewise. + * libgnat/s-pack21.adb: Likewise. + * libgnat/s-pack21.ads: Likewise. + * libgnat/s-pack22.adb: Likewise. + * libgnat/s-pack22.ads: Likewise. + * libgnat/s-pack23.adb: Likewise. + * libgnat/s-pack23.ads: Likewise. + * libgnat/s-pack24.adb: Likewise. + * libgnat/s-pack24.ads: Likewise. + * libgnat/s-pack25.adb: Likewise. + * libgnat/s-pack25.ads: Likewise. + * libgnat/s-pack26.adb: Likewise. + * libgnat/s-pack26.ads: Likewise. + * libgnat/s-pack27.adb: Likewise. + * libgnat/s-pack27.ads: Likewise. + * libgnat/s-pack28.adb: Likewise. + * libgnat/s-pack28.ads: Likewise. + * libgnat/s-pack29.adb: Likewise. + * libgnat/s-pack29.ads: Likewise. + * libgnat/s-pack30.adb: Likewise. + * libgnat/s-pack30.ads: Likewise. + * libgnat/s-pack31.adb: Likewise. + * libgnat/s-pack31.ads: Likewise. + * libgnat/s-pack33.adb: Likewise. + * libgnat/s-pack33.ads: Likewise. + * libgnat/s-pack34.adb: Likewise. + * libgnat/s-pack34.ads: Likewise. + * libgnat/s-pack35.adb: Likewise. + * libgnat/s-pack35.ads: Likewise. + * libgnat/s-pack36.adb: Likewise. + * libgnat/s-pack36.ads: Likewise. + * libgnat/s-pack37.adb: Likewise. + * libgnat/s-pack37.ads: Likewise. + * libgnat/s-pack38.adb: Likewise. + * libgnat/s-pack38.ads: Likewise. + * libgnat/s-pack39.adb: Likewise. + * libgnat/s-pack39.ads: Likewise. + * libgnat/s-pack40.adb: Likewise. + * libgnat/s-pack40.ads: Likewise. + * libgnat/s-pack41.adb: Likewise. + * libgnat/s-pack41.ads: Likewise. + * libgnat/s-pack42.adb: Likewise. + * libgnat/s-pack42.ads: Likewise. + * libgnat/s-pack43.adb: Likewise. + * libgnat/s-pack43.ads: Likewise. + * libgnat/s-pack44.adb: Likewise. + * libgnat/s-pack44.ads: Likewise. + * libgnat/s-pack45.adb: Likewise. + * libgnat/s-pack45.ads: Likewise. + * libgnat/s-pack46.adb: Likewise. + * libgnat/s-pack46.ads: Likewise. + * libgnat/s-pack47.adb: Likewise. + * libgnat/s-pack47.ads: Likewise. + * libgnat/s-pack48.adb: Likewise. + * libgnat/s-pack48.ads: Likewise. + * libgnat/s-pack49.adb: Likewise. + * libgnat/s-pack49.ads: Likewise. + * libgnat/s-pack50.adb: Likewise. + * libgnat/s-pack50.ads: Likewise. + * libgnat/s-pack51.adb: Likewise. + * libgnat/s-pack51.ads: Likewise. + * libgnat/s-pack52.adb: Likewise. + * libgnat/s-pack52.ads: Likewise. + * libgnat/s-pack53.adb: Likewise. + * libgnat/s-pack53.ads: Likewise. + * libgnat/s-pack54.adb: Likewise. + * libgnat/s-pack54.ads: Likewise. + * libgnat/s-pack55.adb: Likewise. + * libgnat/s-pack55.ads: Likewise. + * libgnat/s-pack56.adb: Likewise. + * libgnat/s-pack56.ads: Likewise. + * libgnat/s-pack57.adb: Likewise. + * libgnat/s-pack57.ads: Likewise. + * libgnat/s-pack58.adb: Likewise. + * libgnat/s-pack58.ads: Likewise. + * libgnat/s-pack59.adb: Likewise. + * libgnat/s-pack59.ads: Likewise. + * libgnat/s-pack60.adb: Likewise. + * libgnat/s-pack60.ads: Likewise. + * libgnat/s-pack61.adb: Likewise. + * libgnat/s-pack61.ads: Likewise. + * libgnat/s-pack62.adb: Likewise. + * libgnat/s-pack62.ads: Likewise. + * libgnat/s-pack63.adb: Likewise. + * libgnat/s-pack63.ads: Likewise. + * libgnat/s-parame.adb: Likewise. + * libgnat/s-parame.ads: Likewise. + * libgnat/s-parame__ae653.ads: Likewise. + * libgnat/s-parame__hpux.ads: Likewise. + * libgnat/s-parame__rtems.adb: Likewise. + * libgnat/s-parame__vxworks.adb: Likewise. + * libgnat/s-parame__vxworks.ads: Likewise. + * libgnat/s-parint.adb: Likewise. + * libgnat/s-parint.ads: Likewise. + * libgnat/s-pooglo.adb: Likewise. + * libgnat/s-pooglo.ads: Likewise. + * libgnat/s-pooloc.adb: Likewise. + * libgnat/s-pooloc.ads: Likewise. + * libgnat/s-poosiz.adb: Likewise. + * libgnat/s-poosiz.ads: Likewise. + * libgnat/s-powtab.ads: Likewise. + * libgnat/s-purexc.ads: Likewise. + * libgnat/s-rannum.adb: Likewise. + * libgnat/s-rannum.ads: Likewise. + * libgnat/s-ransee.adb: Likewise. + * libgnat/s-ransee.ads: Likewise. + * libgnat/s-regexp.adb: Likewise. + * libgnat/s-regexp.ads: Likewise. + * libgnat/s-regpat.adb: Likewise. + * libgnat/s-regpat.ads: Likewise. + * libgnat/s-resfil.adb: Likewise. + * libgnat/s-resfil.ads: Likewise. + * libgnat/s-restri.adb: Likewise. + * libgnat/s-restri.ads: Likewise. + * libgnat/s-rident.ads: Likewise. + * libgnat/s-rpc.adb: Likewise. + * libgnat/s-rpc.ads: Likewise. + * libgnat/s-scaval.adb: Likewise. + * libgnat/s-scaval.ads: Likewise. + * libgnat/s-secsta.adb: Likewise. + * libgnat/s-secsta.ads: Likewise. + * libgnat/s-sequio.adb: Likewise. + * libgnat/s-sequio.ads: Likewise. + * libgnat/s-shasto.adb: Likewise. + * libgnat/s-shasto.ads: Likewise. + * libgnat/s-soflin.adb: Likewise. + * libgnat/s-soflin.ads: Likewise. + * libgnat/s-soliin.adb: Likewise. + * libgnat/s-soliin.ads: Likewise. + * libgnat/s-sopco3.adb: Likewise. + * libgnat/s-sopco3.ads: Likewise. + * libgnat/s-sopco4.adb: Likewise. + * libgnat/s-sopco4.ads: Likewise. + * libgnat/s-sopco5.adb: Likewise. + * libgnat/s-sopco5.ads: Likewise. + * libgnat/s-spsufi.adb: Likewise. + * libgnat/s-spsufi.ads: Likewise. + * libgnat/s-stache.adb: Likewise. + * libgnat/s-stache.ads: Likewise. + * libgnat/s-stalib.adb: Likewise. + * libgnat/s-stalib.ads: Likewise. + * libgnat/s-stausa.adb: Likewise. + * libgnat/s-stausa.ads: Likewise. + * libgnat/s-stchop.adb: Likewise. + * libgnat/s-stchop.ads: Likewise. + * libgnat/s-stchop__limit.ads: Likewise. + * libgnat/s-stchop__rtems.adb: Likewise. + * libgnat/s-stchop__vxworks.adb: Likewise. + * libgnat/s-stoele.adb: Likewise. + * libgnat/s-stoele.ads: Likewise. + * libgnat/s-stopoo.adb: Likewise. + * libgnat/s-stopoo.ads: Likewise. + * libgnat/s-stposu.adb: Likewise. + * libgnat/s-stposu.ads: Likewise. + * libgnat/s-stratt.adb: Likewise. + * libgnat/s-stratt.ads: Likewise. + * libgnat/s-stratt__xdr.adb: Likewise. + * libgnat/s-strcom.adb: Likewise. + * libgnat/s-strcom.ads: Likewise. + * libgnat/s-strhas.adb: Likewise. + * libgnat/s-strhas.ads: Likewise. + * libgnat/s-string.adb: Likewise. + * libgnat/s-string.ads: Likewise. + * libgnat/s-strops.adb: Likewise. + * libgnat/s-strops.ads: Likewise. + * libgnat/s-ststop.adb: Likewise. + * libgnat/s-ststop.ads: Likewise. + * libgnat/s-tasloc.adb: Likewise. + * libgnat/s-tasloc.ads: Likewise. + * libgnat/s-thread.ads: Likewise. + * libgnat/s-thread__ae653.adb: Likewise. + * libgnat/s-traceb.adb: Likewise. + * libgnat/s-traceb.ads: Likewise. + * libgnat/s-traceb__hpux.adb: Likewise. + * libgnat/s-traceb__mastop.adb: Likewise. + * libgnat/s-traent.adb: Likewise. + * libgnat/s-traent.ads: Likewise. + * libgnat/s-trasym.adb: Likewise. + * libgnat/s-trasym.ads: Likewise. + * libgnat/s-trasym__dwarf.adb: Likewise. + * libgnat/s-tsmona.adb: Likewise. + * libgnat/s-tsmona__linux.adb: Likewise. + * libgnat/s-tsmona__mingw.adb: Likewise. + * libgnat/s-unstyp.ads: Likewise. + * libgnat/s-utf_32.adb: Likewise. + * libgnat/s-utf_32.ads: Likewise. + * libgnat/s-valboo.adb: Likewise. + * libgnat/s-valboo.ads: Likewise. + * libgnat/s-valcha.adb: Likewise. + * libgnat/s-valcha.ads: Likewise. + * libgnat/s-valdec.adb: Likewise. + * libgnat/s-valdec.ads: Likewise. + * libgnat/s-valenu.adb: Likewise. + * libgnat/s-valenu.ads: Likewise. + * libgnat/s-valint.adb: Likewise. + * libgnat/s-valint.ads: Likewise. + * libgnat/s-vallld.adb: Likewise. + * libgnat/s-vallld.ads: Likewise. + * libgnat/s-vallli.adb: Likewise. + * libgnat/s-vallli.ads: Likewise. + * libgnat/s-valllu.adb: Likewise. + * libgnat/s-valllu.ads: Likewise. + * libgnat/s-valrea.adb: Likewise. + * libgnat/s-valrea.ads: Likewise. + * libgnat/s-valuns.adb: Likewise. + * libgnat/s-valuns.ads: Likewise. + * libgnat/s-valuti.adb: Likewise. + * libgnat/s-valuti.ads: Likewise. + * libgnat/s-valwch.adb: Likewise. + * libgnat/s-valwch.ads: Likewise. + * libgnat/s-veboop.adb: Likewise. + * libgnat/s-veboop.ads: Likewise. + * libgnat/s-vector.ads: Likewise. + * libgnat/s-vercon.adb: Likewise. + * libgnat/s-vercon.ads: Likewise. + * libgnat/s-wchcnv.adb: Likewise. + * libgnat/s-wchcnv.ads: Likewise. + * libgnat/s-wchcon.adb: Likewise. + * libgnat/s-wchcon.ads: Likewise. + * libgnat/s-wchjis.adb: Likewise. + * libgnat/s-wchjis.ads: Likewise. + * libgnat/s-wchstw.adb: Likewise. + * libgnat/s-wchstw.ads: Likewise. + * libgnat/s-wchwts.adb: Likewise. + * libgnat/s-wchwts.ads: Likewise. + * libgnat/s-widboo.adb: Likewise. + * libgnat/s-widboo.ads: Likewise. + * libgnat/s-widcha.adb: Likewise. + * libgnat/s-widcha.ads: Likewise. + * libgnat/s-widenu.adb: Likewise. + * libgnat/s-widenu.ads: Likewise. + * libgnat/s-widlli.adb: Likewise. + * libgnat/s-widlli.ads: Likewise. + * libgnat/s-widllu.adb: Likewise. + * libgnat/s-widllu.ads: Likewise. + * libgnat/s-widwch.adb: Likewise. + * libgnat/s-widwch.ads: Likewise. + * libgnat/s-win32.ads: Likewise. + * libgnat/s-winext.ads: Likewise. + * libgnat/s-wwdcha.adb: Likewise. + * libgnat/s-wwdcha.ads: Likewise. + * libgnat/s-wwdenu.adb: Likewise. + * libgnat/s-wwdenu.ads: Likewise. + * libgnat/s-wwdwch.adb: Likewise. + * libgnat/s-wwdwch.ads: Likewise. + * libgnat/system-aix.ads: Likewise. + * libgnat/system-darwin-arm.ads: Likewise. + * libgnat/system-darwin-ppc.ads: Likewise. + * libgnat/system-darwin-x86.ads: Likewise. + * libgnat/system-djgpp.ads: Likewise. + * libgnat/system-dragonfly-x86_64.ads: Likewise. + * libgnat/system-freebsd.ads: Likewise. + * libgnat/system-hpux-ia64.ads: Likewise. + * libgnat/system-hpux.ads: Likewise. + * libgnat/system-linux-alpha.ads: Likewise. + * libgnat/system-linux-arm.ads: Likewise. + * libgnat/system-linux-hppa.ads: Likewise. + * libgnat/system-linux-ia64.ads: Likewise. + * libgnat/system-linux-m68k.ads: Likewise. + * libgnat/system-linux-mips.ads: Likewise. + * libgnat/system-linux-ppc.ads: Likewise. + * libgnat/system-linux-riscv.ads: Likewise. + * libgnat/system-linux-s390.ads: Likewise. + * libgnat/system-linux-sh4.ads: Likewise. + * libgnat/system-linux-sparc.ads: Likewise. + * libgnat/system-linux-x86.ads: Likewise. + * libgnat/system-lynxos178-ppc.ads: Likewise. + * libgnat/system-lynxos178-x86.ads: Likewise. + * libgnat/system-mingw.ads: Likewise. + * libgnat/system-qnx-aarch64.ads: Likewise. + * libgnat/system-rtems.ads: Likewise. + * libgnat/system-solaris-sparc.ads: Likewise. + * libgnat/system-solaris-x86.ads: Likewise. + * libgnat/system-vxworks-arm-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-arm-rtp.ads: Likewise. + * libgnat/system-vxworks-arm.ads: Likewise. + * libgnat/system-vxworks-e500-kernel.ads: Likewise. + * libgnat/system-vxworks-e500-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-e500-rtp.ads: Likewise. + * libgnat/system-vxworks-e500-vthread.ads: Likewise. + * libgnat/system-vxworks-ppc-kernel.ads: Likewise. + * libgnat/system-vxworks-ppc-ravenscar.ads: Likewise. + * libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-ppc-rtp.ads: Likewise. + * libgnat/system-vxworks-ppc-vthread.ads: Likewise. + * libgnat/system-vxworks-ppc.ads: Likewise. + * libgnat/system-vxworks-x86-kernel.ads: Likewise. + * libgnat/system-vxworks-x86-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-x86-rtp.ads: Likewise. + * libgnat/system-vxworks-x86-vthread.ads: Likewise. + * libgnat/system-vxworks-x86.ads: Likewise. + * libgnat/system-vxworks7-aarch64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-aarch64.ads: Likewise. + * libgnat/system-vxworks7-arm-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-arm.ads: Likewise. + * libgnat/system-vxworks7-e500-kernel.ads: Likewise. + * libgnat/system-vxworks7-e500-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-e500-rtp.ads: Likewise. + * libgnat/system-vxworks7-ppc-kernel.ads: Likewise. + * libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-ppc-rtp.ads: Likewise. + * libgnat/system-vxworks7-ppc64-kernel.ads: Likewise. + * libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86-kernel.ads: Likewise. + * libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86-rtp.ads: Likewise. + * libgnat/system-vxworks7-x86_64-kernel.ads: Likewise. + * libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise. + * libgnat/system.ads: Likewise. + * link.c: Likewise. + * live.adb: Likewise. + * live.ads: Likewise. + * locales.c: Likewise. + * make.adb: Likewise. + * make.ads: Likewise. + * make_util.adb: Likewise. + * make_util.ads: Likewise. + * makeusg.adb: Likewise. + * makeusg.ads: Likewise. + * mdll-fil.adb: Likewise. + * mdll-fil.ads: Likewise. + * mdll-utl.adb: Likewise. + * mdll-utl.ads: Likewise. + * mdll.adb: Likewise. + * mdll.ads: Likewise. + * mingw32.h: Likewise. + * mkdir.c: Likewise. + * namet-sp.adb: Likewise. + * namet-sp.ads: Likewise. + * namet.adb: Likewise. + * namet.ads: Likewise. + * namet.h: Likewise. + * nlists.adb: Likewise. + * nlists.ads: Likewise. + * nlists.h: Likewise. + * opt.adb: Likewise. + * opt.ads: Likewise. + * osint-b.adb: Likewise. + * osint-b.ads: Likewise. + * osint-c.adb: Likewise. + * osint-c.ads: Likewise. + * osint-l.adb: Likewise. + * osint-l.ads: Likewise. + * osint-m.adb: Likewise. + * osint-m.ads: Likewise. + * osint.adb: Likewise. + * osint.ads: Likewise. + * output.adb: Likewise. + * output.ads: Likewise. + * par-ch10.adb: Likewise. + * par-ch11.adb: Likewise. + * par-ch12.adb: Likewise. + * par-ch13.adb: Likewise. + * par-ch2.adb: Likewise. + * par-ch3.adb: Likewise. + * par-ch4.adb: Likewise. + * par-ch5.adb: Likewise. + * par-ch6.adb: Likewise. + * par-ch7.adb: Likewise. + * par-ch8.adb: Likewise. + * par-ch9.adb: Likewise. + * par-endh.adb: Likewise. + * par-labl.adb: Likewise. + * par-load.adb: Likewise. + * par-prag.adb: Likewise. + * par-sync.adb: Likewise. + * par-tchk.adb: Likewise. + * par-util.adb: Likewise. + * par.adb: Likewise. + * par.ads: Likewise. + * par_sco.adb: Likewise. + * par_sco.ads: Likewise. + * pprint.adb: Likewise. + * pprint.ads: Likewise. + * prep.adb: Likewise. + * prep.ads: Likewise. + * prepcomp.adb: Likewise. + * prepcomp.ads: Likewise. + * put_scos.adb: Likewise. + * put_scos.ads: Likewise. + * raise-gcc.c: Likewise. + * raise.c: Likewise. + * raise.h: Likewise. + * repinfo-input.adb: Likewise. + * repinfo-input.ads: Likewise. + * repinfo.adb: Likewise. + * repinfo.ads: Likewise. + * repinfo.h: Likewise. + * restrict.adb: Likewise. + * restrict.ads: Likewise. + * rident.ads: Likewise. + * rtfinal.c: Likewise. + * rtinit.c: Likewise. + * rtsfind.adb: Likewise. + * rtsfind.ads: Likewise. + * runtime.h: Likewise. + * s-oscons-tmplt.c: Likewise. + * sa_messages.adb: Likewise. + * sa_messages.ads: Likewise. + * scans.adb: Likewise. + * scans.ads: Likewise. + * scil_ll.adb: Likewise. + * scil_ll.ads: Likewise. + * scn.adb: Likewise. + * scn.ads: Likewise. + * scng.adb: Likewise. + * scng.ads: Likewise. + * scos.adb: Likewise. + * scos.ads: Likewise. + * scos.h: Likewise. + * sdefault.ads: Likewise. + * seh_init.c: Likewise. + * sem.adb: Likewise. + * sem.ads: Likewise. + * sem_aggr.adb: Likewise. + * sem_aggr.ads: Likewise. + * sem_attr.adb: Likewise. + * sem_attr.ads: Likewise. + * sem_aux.adb: Likewise. + * sem_aux.ads: Likewise. + * sem_case.adb: Likewise. + * sem_case.ads: Likewise. + * sem_cat.adb: Likewise. + * sem_cat.ads: Likewise. + * sem_ch10.adb: Likewise. + * sem_ch10.ads: Likewise. + * sem_ch11.adb: Likewise. + * sem_ch11.ads: Likewise. + * sem_ch12.adb: Likewise. + * sem_ch12.ads: Likewise. + * sem_ch13.adb: Likewise. + * sem_ch13.ads: Likewise. + * sem_ch2.adb: Likewise. + * sem_ch2.ads: Likewise. + * sem_ch3.adb: Likewise. + * sem_ch3.ads: Likewise. + * sem_ch4.adb: Likewise. + * sem_ch4.ads: Likewise. + * sem_ch5.adb: Likewise. + * sem_ch5.ads: Likewise. + * sem_ch6.adb: Likewise. + * sem_ch6.ads: Likewise. + * sem_ch7.adb: Likewise. + * sem_ch7.ads: Likewise. + * sem_ch8.adb: Likewise. + * sem_ch8.ads: Likewise. + * sem_ch9.adb: Likewise. + * sem_ch9.ads: Likewise. + * sem_dim.adb: Likewise. + * sem_dim.ads: Likewise. + * sem_disp.adb: Likewise. + * sem_disp.ads: Likewise. + * sem_dist.adb: Likewise. + * sem_dist.ads: Likewise. + * sem_elab.adb: Likewise. + * sem_elab.ads: Likewise. + * sem_elim.adb: Likewise. + * sem_elim.ads: Likewise. + * sem_eval.adb: Likewise. + * sem_eval.ads: Likewise. + * sem_intr.adb: Likewise. + * sem_intr.ads: Likewise. + * sem_mech.adb: Likewise. + * sem_mech.ads: Likewise. + * sem_prag.adb: Likewise. + * sem_prag.ads: Likewise. + * sem_res.adb: Likewise. + * sem_res.ads: Likewise. + * sem_scil.adb: Likewise. + * sem_scil.ads: Likewise. + * sem_smem.adb: Likewise. + * sem_smem.ads: Likewise. + * sem_type.adb: Likewise. + * sem_type.ads: Likewise. + * sem_util.adb: Likewise. + * sem_util.ads: Likewise. + * sem_warn.adb: Likewise. + * sem_warn.ads: Likewise. + * set_targ.adb: Likewise. + * set_targ.ads: Likewise. + * sfn_scan.adb: Likewise. + * sfn_scan.ads: Likewise. + * sigtramp-armdroid.c: Likewise. + * sigtramp-ios.c: Likewise. + * sigtramp-qnx.c: Likewise. + * sigtramp-vxworks.c: Likewise. + * sigtramp.h: Likewise. + * sinfo-cn.adb: Likewise. + * sinfo-cn.ads: Likewise. + * sinfo.adb: Likewise. + * sinfo.ads: Likewise. + * sinput-c.adb: Likewise. + * sinput-c.ads: Likewise. + * sinput-d.adb: Likewise. + * sinput-d.ads: Likewise. + * sinput-l.adb: Likewise. + * sinput-l.ads: Likewise. + * sinput.adb: Likewise. + * sinput.ads: Likewise. + * socket.c: Likewise. + * spark_xrefs.adb: Likewise. + * spark_xrefs.ads: Likewise. + * sprint.adb: Likewise. + * sprint.ads: Likewise. + * stand.adb: Likewise. + * stand.ads: Likewise. + * stringt.adb: Likewise. + * stringt.ads: Likewise. + * stringt.h: Likewise. + * style.adb: Likewise. + * style.ads: Likewise. + * styleg.adb: Likewise. + * styleg.ads: Likewise. + * stylesw.adb: Likewise. + * stylesw.ads: Likewise. + * switch-b.adb: Likewise. + * switch-b.ads: Likewise. + * switch-c.adb: Likewise. + * switch-c.ads: Likewise. + * switch-m.adb: Likewise. + * switch-m.ads: Likewise. + * switch.adb: Likewise. + * switch.ads: Likewise. + * symbols.adb: Likewise. + * symbols.ads: Likewise. + * sysdep.c: Likewise. + * table.adb: Likewise. + * table.ads: Likewise. + * targext.c: Likewise. + * targparm.adb: Likewise. + * targparm.ads: Likewise. + * tbuild.adb: Likewise. + * tbuild.ads: Likewise. + * tempdir.adb: Likewise. + * tempdir.ads: Likewise. + * terminals.c: Likewise. + * tracebak.c: Likewise. + * tree_gen.adb: Likewise. + * tree_gen.ads: Likewise. + * tree_in.adb: Likewise. + * tree_in.ads: Likewise. + * tree_io.adb: Likewise. + * tree_io.ads: Likewise. + * treepr.adb: Likewise. + * treepr.ads: Likewise. + * ttypes.ads: Likewise. + * types.adb: Likewise. + * types.ads: Likewise. + * types.h: Likewise. + * uintp.adb: Likewise. + * uintp.ads: Likewise. + * uintp.h: Likewise. + * uname.adb: Likewise. + * uname.ads: Likewise. + * urealp.adb: Likewise. + * urealp.ads: Likewise. + * urealp.h: Likewise. + * usage.adb: Likewise. + * usage.ads: Likewise. + * validsw.adb: Likewise. + * validsw.ads: Likewise. + * warnsw.adb: Likewise. + * warnsw.ads: Likewise. + * widechar.adb: Likewise. + * widechar.ads: Likewise. + * xeinfo.adb: Likewise. + * xnmake.adb: Likewise. + * xoscons.adb: Likewise. + * xr_tabls.adb: Likewise. + * xr_tabls.ads: Likewise. + * xref_lib.adb: Likewise. + * xref_lib.ads: Likewise. + * xsinfo.adb: Likewise. + * xsnamest.adb: Likewise. + * xtreeprs.adb: Likewise. + * xutil.adb: Likewise. + * xutil.ads: Likewise. + +2020-06-02 Javier Miranda <miranda@adacore.com> + + * sem_ch3.adb (Analyze_Object_Declaration): Set attribute + Expansion_Delayed on aggregates that initialize an object that + has aspect alignment or address clause. Done to allow ther + initialization by means of multiple assignments. + * exp_ch3.adb (Expand_N_Object_Declaration): Resolve delayed + aggregates. This patch complements the patch applied to + sem_ch3.adb + +2020-06-02 Javier Miranda <miranda@adacore.com> + + * sem_util.adb (Ensure_Minimum_Decoration): New subprogram that + ensures the minimum decoration required by + Requires_Transient_Scope() to provide its functionality when the + entity is not frozen. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * exp_ch4.adb (Expand_N_Op_Divide): Remove code dealing with + the Treat_Fixed_As_Integer flag. + (Expand_N_Op_Multiply): Likewise. + * exp_fixd.adb (Build_Divide): Do the division in an integer + type long enough to hold both operands and convert the result + to the type of the LHS. Do not set Treat_Fixed_As_Integer. + (Build_Multiply): Do not set Treat_Fixed_As_Integer. + (Build_Rem): Likewise. + * sem_ch4.adb (Analyze_Arithmetic_Op): Remove code dealing with + the Treat_Fixed_As_Integer flag. + (Check_Arithmetic_Pair): Likewise. + * sinfo.ads (Treat_Fixed_As_Integer): Delete. + (N_Has_Treat_Fixed_As_Integer): Likewise. + (Set_Treat_Fixed_As_Integer): Likewise. + * sinfo.adb (Treat_Fixed_As_Integer): Likewise. + (Set_Treat_Fixed_As_Integer): Likewise. + * sprint.ads (Syntax Extensions): Remove '#' special character. + * sprint.adb (Process_TFAI_RR_Flags): Delete. + (Sprint_Node_Actual) <N_Op_Divide>: Print '@' manually. + <N_Op_Multiply>: Likewise. + <N_Op_Mod>: Do not print '#'. + <N_Op_Rem>: Likewise. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb (Others_Check): In the positional case, use the + general expression for the comparison only when needed. + * exp_attr.adb (Expand_Fpt_Attribute;): Use a simple conversion + to the target type instead of an unchecked conversion to the + base type to do the range check, as in the other cases. + (Expand_N_Attribute_Reference) <Attribute_Storage_Size>: Do the + Max operation in the type of the storage size variable, and use + Convert_To as in the other cases. + * tbuild.adb (Convert_To): Do not get rid of an intermediate + conversion to Universal_Integer here... + * sem_res.adb (Simplify_Type_Conversion): ...but here instead. + +2020-06-02 Bob Duff <duff@adacore.com> + + * doc/gnat_ugn/gnat_utility_programs.rst: Update documentation + for --RM-style-spacing. + +2020-06-02 Bob Duff <duff@adacore.com> + + * doc/gnat_ugn/gnat_utility_programs.rst: Add documentation for + --[no-]compact switch. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * exp_aggr.adb (Build_Array_Aggr_Code): Set the type of the PAT + on the zero used to clear the array. + * exp_attr.adb (Expand_N_Attribute_Reference) + <Attribute_Alignment>: In the CW case, directly convert from the + alignment's type to the target type if the parent is an + unchecked conversion. + * sem_res.adb (Set_String_Literal_Subtype): In the dynamic case, + use the general expression for the upper bound only when needed. + Set the base type of the index as the type of the low bound. + (Simplify_Type_Conversion): Do an intermediate conversion to the + root type of the target type if the operand is an integer + literal. + * tbuild.adb (Convert_To): Get rid of an intermediate conversion + to Universal_Integer if the inner expression has integer tyoe. + * libgnat/a-sequio.adb (Byte_Swap): Make use of an equivalent + static expression in the case statement. + +2020-06-02 Thomas Quinot <quinot@adacore.com> + + * par_sco.adb (Traverse_Degenerate_Subprogram): Set statement + code to 'X'. + * scos.ads: Update comment documenting SCO data. + +2020-06-02 Gary Dismukes <dismukes@adacore.com> + + * exp_unst.adb (Register_Subprogram): Test for Address_Taken (in + addition to the existing test for In_Synchonized_Unit) when + deciding whether to reset the Reachable flag on all subprograms + enclosing the subprogram being registered. + +2020-06-02 Justin Squirek <squirek@adacore.com> + + * sem_ch6.adb (Check_Return_Obj_Accessibility): Avoid use of + parent node pointers so we are not relying on expansion done in + GNATprove mode. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * exp_attr.adb (Expand_N_Attribute_Reference) + <Attribute_Alignment>: Adjust comment and compare against proper + type. + +2020-06-02 Gary Dismukes <dismukes@adacore.com> + + * exp_unst.adb (Visit_Node): When visiting array attribute + nodes, apply Get_Referenced_Object to the attribute prefix, to + handle prefixes denoting renamed objects by picking up the Etype + of the renamed object rather than the possibly unconstrained + nominal subtype of the renaming declaration's Entity. + * sem_util.ads (Get_Referenced_Object): Update comment to + clearly indicate that any kind of node can be passed to this + function. + * sem_util.adb (Get_Referenced_Object): Add test of Is_Object to + the condition, to allow for passing names that denote types and + subtypes. + +2020-06-02 Bob Duff <duff@adacore.com> + + * snames.ads-tmpl: Add comments explaining that enumeration + types have to be kept in synch with subtypes of Name_Id. + +2020-06-02 Piotr Trojanek <trojanek@adacore.com> + + * sem_util.adb (Check_No_Hidden_State): Remove dead code. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * exp_pakd.adb (Expand_Packed_Bit_Reference): Change type of + reference from Universal_Integer to Standard_Natural. + +2020-06-02 Piotr Trojanek <trojanek@adacore.com> + + * sem_prag.adb (Collect_States_And_Objects): Call itself on + declaration of nested packages; append abstract states + one-by-one, so that in recursive call we do not overwrite the + ones that have been already collected. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * exp_atag.ads (Build_Inherit_Predefined_Prims): Change type + of Num_Predef_Prim parameter from Int to Nat. + * exp_atag.adb (Build_Range): New procedure. + (Build_Val): Likewise. + (Build_CW_Membership): Call Build_Val. + (Build_Get_Predefined_Prim_Op_Address): Likewise. + (Build_Inherit_CPP_Prims): Likewise. + (Build_Get_Prim_Op_Address): Likewise. + (Build_Set_Predefined_Prim_Op_Address): Likewise. + (Build_Inherit_Prims): Call Build_Range. + (Build_Inherit_Predefined_Prims): Likewise. Change type of + Num_Predef_Prim parameter from Int to Nat. + +2020-06-02 Gary Dismukes <dismukes@adacore.com> + + * sem_ch3.adb: Two typo fixes. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch3.adb (Replace_Discriminants): Preserve the Etype of the + Name of N_Variant_Part nodes when rewriting it. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch3.adb (Signed_Integer_Type_Declaration): Change the type + of the bounds from Universal_Integer to Implicit_Base. + +2020-06-02 Arnaud Charlet <charlet@adacore.com> + + * bcheck.adb, binde.adb, bindo-diagnostics.adb, checks.adb, + exp_aggr.adb, exp_ch3.adb, exp_ch4.adb, exp_ch7.adb, + exp_ch9.adb, gnatname.adb, sem_case.adb, sem_ch13.adb, + sem_ch5.adb, sem_prag.adb, sem_util.adb, uintp.adb, urealp.adb, + xoscons.adb, xr_tabls.adb, xref_lib.adb: Initialize objects more + explicitly and add corresponding assertions. Remove dead code. + Also add a few Annotate pragmas to help static analysis. + * libgnat/a-caldel.adb, libgnat/a-calend.adb, + libgnat/a-ngcoty.adb, libgnat/a-ngelfu.adb, + libgnat/a-ngrear.adb, libgnat/a-strfix.adb, + libgnat/g-calend.adb, libgnat/g-catiio.adb, + libgnat/g-comlin.adb, libgnat/g-debpoo.adb, + libgnat/g-dirope.adb, libgnat/g-hesorg.adb, + libgnat/g-pehage.adb, libgnat/g-socket.adb, libgnat/i-cobol.adb, + libgnat/s-dwalin.adb, libgnat/s-dwalin.ads, + libgnat/s-fatgen.adb, libgnat/s-gearop.adb, + libgnat/s-genbig.adb, libgnat/s-imgrea.adb, + libgnat/s-os_lib.adb, libgnat/s-rannum.adb, + libgnat/s-regpat.adb, libgnat/s-trasym__dwarf.adb, + libgnat/s-valrea.adb: Ditto. + +2020-06-02 Eric Botcazou <ebotcazou@adacore.com> + + * sem_ch3.adb (Replace_Components): Rename into... + (Replace_Discriminants): ...this. Replace girder discriminants + with non-girder ones. Do not replace components. + * sem_ch13.adb (Check_Record_Representation_Clause): Deal with + non-girder discriminants correctly. + +2020-06-02 Piotr Trojanek <trojanek@adacore.com> + + * lib-xref-spark_specific.adb (Create_Heap): use a new variant + of Name_Enter to directly converts String to Make_Id. + +2020-06-02 Gary Dismukes <dismukes@adacore.com> + + * exp_attr.adb, par-ch4.adb, par-util.adb, scans.ads, scng.adb, + sem_attr.adb, sem_ch4.adb, sinfo.ads: Typo corrections and minor + reformatting. + +2020-06-02 Arnaud Charlet <charlet@adacore.com> + + * snames.ads-tmpl (Name_Img, Attribute_Img): Make it an + attribute returning renamable functions. + +2020-06-02 Yannick Moy <moy@adacore.com> + + * sem_prag.adb, sem_prag.ads (Set_Overflow_Mode): New procedure + to set overflow mode. + +2020-06-02 Piotr Trojanek <trojanek@adacore.com> + + * contracts.adb, einfo.adb, exp_ch9.adb, sem_ch12.adb, + sem_ch4.adb, sem_ch7.adb, sem_ch8.adb, sem_elab.adb, + sem_type.adb, sem_util.adb: Reuse Is_Package_Or_Generic_Package + where possible (similarly, reuse Is_Concurrent_Type if it was + possible in the same expressions). + +2020-05-30 Arnaud Charlet <charlet@adacore.com> + + * Makefile.rtl (ADA_INCLUDE_SRCS): Replace Makefile.adalib by + libada.gpr and associated project files. + (g-debpoo.o): Add missing rule to ensure subprograms are not reordered. + (setup-rts): Add generation of libgnat/libgnarl.lst. + (LIBGNAT_SRCS): Remove thread.c which is part of libgnarl. + * tracebak.c, tb-gcc.c: Merged the two files to simplify dependencies. + * libgnarl/libgnarl.gpr, libgnat/libada.gpr, + libgnat/libgnat.gpr, libgnat/libgnat_common.gpr: New files. + * doc/gnat_ugn/the_gnat_compilation_model.rst: Makefile.adalib + replaced by libada.gpr. + * libgnat/system-mingw.ads: Remove obsolete comment. + * gcc-interface/Makefile.in: Remove dependency on tb-gcc.c. + +2020-05-27 Martin Liska <mliska@suse.cz> + + * gnatvsn.ads: Bump Library_Version to 11. + +2020-05-26 Eric Botcazou <ebotcazou@adacore.com> + + PR ada/95333 + * gcc-interface/decl.c (gnat_to_gnu_param): Never make a variant of + the type. + +2020-05-26 Alexandre Oliva <oliva@adacore.com> + + * gcc-interface/lang-specs.h (ADA_DUMPS_OPTIONS): Define in + terms of DUMPS_OPTIONS. Replace occurrences of %{d*} %:dumps + with it. + +2020-05-26 Alexandre Oliva <oliva@adacore.com> + + * gcc-interface/lang-specs.h: Drop auxbase and auxbase-strip. + Use %:dumps instead of -dumpbase. Add %w for implicit .s + primary output. + * switch.adb (Is_Internal_GCC_Switch): Recognize dumpdir and + dumpbase-ext. Drop auxbase and auxbase-strip. + +2020-05-25 Yannick Moy <moy@adacore.com> + + * sem_util.adb (Check_No_Hidden_State): Stop propagation at + first block/task/entry. + +2020-05-25 Yannick Moy <moy@adacore.com> + + * doc/gnat_rm/implementation_defined_pragmas.rst: Document + changes to pragmas Compile_Time_Error/Compile_Time_Warning. + * gnat_rm.texi: Regenerate. + * libgnat/g-bytswa.adb: Change uses of Compile_Time_Error to + Compile_Time_Warning, as the actual expression may not always be + known statically. + * sem_prag.adb (Analyze_Pragma): Handle differently pragma + Compile_Time_Error in both compilation and in GNATprove mode. + (Validate_Compile_Time_Warning_Or_Error): Issue an error or + warning when the expression is not known at compile time. + * usage.adb: Add missing documentation for warning switches _c + and _r. + * warnsw.ads: Update comment. + +2020-05-25 Justin Squirek <squirek@adacore.com> + + * sem_ch6.adb (Check_Return_Obj_Accessibility): Use original + node to avoid looking at expansion done in GNATprove mode. + +2020-05-25 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity): Add new local variable + and use it throughout the function. + <E_Variable>: Rename local variable and adjust accordingly. In the + case of a renaming, materialize the entity if the renamed object is + an N_Expression_With_Actions node. + <E_Procedure>: Use Alias accessor function consistently. + +2020-05-25 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/misc.c (get_array_bit_stride): Get to the debug type, + if any, before calling gnat_get_array_descr_info. + +2020-05-25 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Tidy up. + (build_variant_list): Add GNAT_VARIANT_PART parameter and annotate its + variants if it is present. Adjust the recursive call by passing the + variant subpart of variants, if any. + (copy_and_substitute_in_layout): Rename GNU_SUBST_LIST to SUBST_LIST + and adjust throughout. For a type, pass the variant part in the + call to build_variant_list. + +2020-05-25 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_component_type): Cap the alignment + of the component type according to the component size. + +2020-05-25 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Add a + description of the various types associated with the unconstrained + type. Declare the fat pointer earlier. Set the current function + as context on the template type, and the fat pointer type on the + array type. Always mark the fat pointer type as artificial and set + it as the context for the pointer type to the array. Also reuse + GNU_ENTITY_NAME. Finish up the unconstrained type at the very end. + * gcc-interface/misc.c (gnat_get_array_descr_info): Do not handle + fat pointer types and tidy up accordingly. + * gcc-interface/utils.c (build_unc_object_type): Do not set the + context on the template type. + (gnat_pushdecl): Mark the canonical fat pointer types as artificial. + +2020-05-25 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/gigi.h (operand_type): New static inline function. + * gcc-interface/trans.c (gnat_to_gnu): Do not suppress conversion + to the resulty type at the end for array types. + * gcc-interface/utils2.c (build_binary_op) <MODIFY_EXPR>: Do not + remove conversions between array types on the LHS. + +2020-05-12 Eric Botcazou <ebotcazou@adacore.com> + + * sem_aggr.ads (Is_Single_Aggregate): New function. + * sem_aggr.adb (Is_Others_Aggregate): Use local variable. + (Is_Single_Aggregate): New function to recognize an aggregate with + a single association containing a single choice. + * fe.h (Is_Others_Aggregate): Delete. + (Is_Single_Aggregate): New declaration. + * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Call + Is_Single_Aggregate instead of Is_Others_Aggregate. + +2020-05-12 Eric Botcazou <ebotcazou@adacore.com> + + PR ada/95035 + * gcc-interface/utils.c (packable_type_hasher::equal): Also compare + the scalar storage order. + (hash_packable_type): Also hash the scalar storage order. + (hash_pad_type): Likewise. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/*.[ch]: Update copyright year. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Access>: Assert that + the prefix is not a type. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/ada-tree.h (TYPE_PACKED_ARRAY_TYPE_P): Rename into... + (TYPE_BIT_PACKED_ARRAY_TYPE_P): ...this. + (TYPE_IS_PACKED_ARRAY_TYPE_P): Rename into... + (BIT_PACKED_ARRAY_TYPE_P): ...this. + (TYPE_IMPL_PACKED_ARRAY_P): Adjust to above renaming. + * gcc-interface/gigi.h (maybe_pad_type): Remove IS_USER_TYPE parameter. + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Adjust call + to maybe_pad_type. + <E_Ordinary_Fixed_Point_Type>: Remove const qualifiers for tree. + <E_Signed_Integer_Subtype>: Remove redundant test and redundant call + to associate_original_type_to_packed_array. Turn test into assertion. + Call associate_original_type_to_packed_array and modify gnu_entity_name + accordingly. Explicitly set the parallel type for GNAT encodings. + Call create_type_decl in the misaligned case before maybe_pad_type. + <E_Array_Type>: Do not use the name of the implementation type for a + packed array when not using GNAT encodings. + <E_Array_Subtype>: Move around setting flags. Use the result of the + call to associate_original_type_to_packed_array for gnu_entity_name. + <E_Record_Subtype>: Create XVS type and XVZ variable only if debug + info is requested for the type. + Call create_type_decl if a padded type was created for a type entity. + (gnat_to_gnu_component_type): Use local variable and adjust calls to + maybe_pad_type. + (gnat_to_gnu_subprog_type): Adjust call to maybe_pad_type. + (gnat_to_gnu_field): Likewise. + (validate_size): Adjust to renaming of macro. + (set_rm_size): Likewise. + (associate_original_type_to_packed_array): Adjust return type and + return the name of the original type if GNAT encodings are not used. + * gcc-interface/misc.c (gnat_get_debug_typ): Remove obsolete stuff. + (gnat_get_fixed_point_type_info): Remove const qualifiers for tree. + (gnat_get_array_descr_info): Likewise and set variables lazily. + Remove call to maybe_debug_type. Simplify a few computations. + (enumerate_modes): Remove const qualifier for tree. + * gcc-interface/utils.c (make_type_from_size): Adjust to renaming. + (maybe_pad_type): Remove IS_USER_TYPE parameter and adjust. Remove + specific code for implementation types for packed arrays. + (compute_deferred_decl_context): Remove const qualifier for tree. + (convert): Adjust call to maybe_pad_type. + (unchecked_convert): Likewise. + * gcc-interface/utils2.c (is_simple_additive_expressio): Likewise. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils2.c (build_binary_op) <ARRAY_RANGE_REF>: Use + build_nonshared_array_type to build the common type and declare it. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/misc.c (gnat_init_gcc_eh): Do not override the user + for -fnon-call-exceptions in default mode. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (lvalue_required_p) <N_Selected_Component>: + Merge with N_Slice. + <N_Allocator>: Move to... + (lvalue_for_aggregate_p): ...here. New function. + (Identifier_to_gnu): For an identifier with aggregate type, also + call lvalue_for_aggregate_p if lvalue_required_p returned false + before substituting the identifier with the constant. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (gnat_to_gnu): Do not wrap boolean values if + they appear in any kind of attribute references. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Deal + with qualified "others" aggregates in the memset case. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_param): Also back-annotate the + mechanism in the case of an Out parameter only passed by copy-out. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/gigi.h (change_qualified_type): Move around. + (maybe_vector_array): Likewise. + (maybe_padded_object): New static line function. + * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Component_Size>: + Remove useless code. + <Attr_Null_Parameter>: Remove obsolete code. + (Call_to_gn): Likewise. Use maybe_padded_object to remove padding. + (gnat_to_gnu): Likewise. + <N_String_Literal>: Do not add a useless null character at the end. + <N_Indexed_Component>: Likewise and remove obsolete code. + (add_decl_expr): Likewise. + (maybe_implicit_deref): Likewise. + * gcc-interface/utils.c (maybe_unconstrained_array): Likewise. + * gcc-interface/utils2.c (gnat_invariant_expr): Likewise. + +2020-05-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils2.c: Include builtins.h. + (known_alignment) <ADDR_EXPR>: Use DECL_ALIGN for DECL_P operands + and get_object_alignment for the rest. + +2020-05-08 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Force at + least the unit size for an aliased object of a constrained nominal + subtype whose size is variable. + +2020-05-08 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Deal + with artificial maximally-sized types designed by access types. + * gcc-interface/utils.c (packable_type_hash): New structure. + (packable_type_hasher): Likewise. + (packable_type_hash_table): New hash table. + (init_gnat_utils): Initialize it. + (destroy_gnat_utils): Destroy it. + (packable_type_hasher::equal): New method. + (hash_packable_type): New static function. + (canonicalize_packable_type): Likewise. + (make_packable_type): Make sure not to use too small a type for the + size of the new fields. Canonicalize the type if it is named. + +2020-05-08 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (Raise_Error_to_gnu): Always compute a lower + bound and an upper bound for use by the -gnateE switch for range and + comparison operators. + +2020-05-08 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/decl.c (gnat_to_gnu_param): Do not make a variant of + the type in LTO mode. + +2020-05-04 Mikael Pettersson <mikpelinux@gmail.com> + + PR bootstrap/94918 + * mingw32.h: Prevent windows.h from including emmintrin.h on Cygwin64. + * s-oscons-tmplt.c (Serial_Port_Descriptor): Use System.Win32.HANDLE + also on Cygwin. + +2020-03-11 Richard Wai <richard@annexi-strayline.com> + + * gcc-interface/decl.c (gnat_to_gnu_entity): Also test Is_Public on + the Alias of the entitiy, if it is present, in the main assertion. + +2020-02-06 Alexandre Oliva <oliva@adacore.com> + + * raise-gcc.c (personality_body) [__ARM_EABI_UNWINDER__]: + Initialize barrier_cache.sp when ending phase1. + +2020-01-04 Eric Botcazou <ebotcazou@adacore.com> + + * gnatvsn.ads: Bump copyright year. + +2020-01-01 Jakub Jelinek <jakub@redhat.com> + + Update copyright years. + + * gnat_ugn.texi: Bump @copying's copyright year. + * gnat_rm.texi: Likewise. + +Copyright (C) 2020 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl index 64ddc26..35faf13 100644 --- a/gcc/ada/Makefile.rtl +++ b/gcc/ada/Makefile.rtl @@ -596,7 +596,6 @@ GNATRTL_NONTASKING_OBJS= \ s-fatgen$(objext) \ s-fatlfl$(objext) \ s-fatllf$(objext) \ - s-fatsfl$(objext) \ s-ficobl$(objext) \ s-filatt$(objext) \ s-fileio$(objext) \ @@ -713,7 +712,9 @@ GNATRTL_NONTASKING_OBJS= \ s-pooglo$(objext) \ s-pooloc$(objext) \ s-poosiz$(objext) \ - s-powtab$(objext) \ + s-powflt$(objext) \ + s-powlfl$(objext) \ + s-powllf$(objext) \ s-purexc$(objext) \ s-putima$(objext) \ s-rannum$(objext) \ @@ -756,7 +757,10 @@ GNATRTL_NONTASKING_OBJS= \ s-vafi32$(objext) \ s-vafi64$(objext) \ s-valenu$(objext) \ + s-valflt$(objext) \ s-valint$(objext) \ + s-vallfl$(objext) \ + s-valllf$(objext) \ s-vallli$(objext) \ s-valllu$(objext) \ s-valrea$(objext) \ @@ -2164,11 +2168,16 @@ ifeq ($(strip $(filter-out rtems%,$(target_os))),) s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \ s-stchop.adb<libgnat/s-stchop__rtems.adb \ s-interr.adb<libgnarl/s-interr__hwint.adb + ifeq ($(strip $(filter-out arm%, $(target_cpu))),) EH_MECHANISM=-arm else EH_MECHANISM=-gcc endif + + ifeq ($(strip $(filter-out riscv%,$(target_cpu))),) + LIBGNAT_TARGET_PAIRS += a-nallfl.ads<libgnat/a-nallfl__wraplf.ads + endif endif # PikeOS @@ -2379,12 +2388,14 @@ ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),) s-tasinf.adb<libgnarl/s-tasinf__linux.adb \ s-taspri.ads<libgnarl/s-taspri__posix-noaltstack.ads \ s-tpopsp.adb<libgnarl/s-tpopsp__posix-foreign.adb \ + $(TRASYM_DWARF_UNIX_PAIRS) \ $(ATOMICS_TARGET_PAIRS) \ $(ATOMICS_BUILTINS_TARGET_PAIRS) \ system.ads<libgnat/system-linux-arm.ads TOOLS_TARGET_PAIRS = indepsw.adb<indepsw-gnu.adb + EXTRA_GNATRTL_NONTASKING_OBJS += $(TRASYM_DWARF_UNIX_OBJS) EXTRA_GNATRTL_TASKING_OBJS=s-linux.o EH_MECHANISM=-arm THREADSLIB = -lpthread diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index 41453d1..0a90c92 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -244,6 +244,8 @@ UINT __gnat_current_ccs_encoding; #include "adaint.h" +int __gnat_in_child_after_fork = 0; + #if defined (__APPLE__) && defined (st_mtime) #define st_atim st_atimespec #define st_mtim st_mtimespec @@ -2421,6 +2423,7 @@ __gnat_portable_spawn (char *args[] ATTRIBUTE_UNUSED) if (pid == 0) { /* The child. */ + __gnat_in_child_after_fork = 1; if (execv (args[0], MAYBE_TO_PTR32 (args)) != 0) _exit (1); } diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h index 4f42f6c..85997b9 100644 --- a/gcc/ada/adaint.h +++ b/gcc/ada/adaint.h @@ -139,7 +139,15 @@ struct file_attributes { * fit the above struct on any system) */ -extern int __gnat_max_path_len; +extern int __gnat_max_path_len; +extern int __gnat_in_child_after_fork; +/* This flag expresses the state when the fork call just returned zero result, + * i.e. when the new born child process is created and the new executable is + * not loaded yet. It is used to e.g. disable tracing memory + * allocation/deallocation in memtrack.adb just after fork returns in the child + * process to avoid both parent and child writing to the same gmem.out file + * simultaneously */ + extern OS_Time __gnat_current_time (void); extern void __gnat_current_time_string (char *); extern void __gnat_to_gm_time (OS_Time *, int *, int *, diff --git a/gcc/ada/ali.adb b/gcc/ada/ali.adb index 3bf1257..f213c30 100644 --- a/gcc/ada/ali.adb +++ b/gcc/ada/ali.adb @@ -3814,15 +3814,15 @@ package body ALI is return No_ALI_Id; end Scan_ALI; - ----------- - -- Scope -- - ----------- + -------------- + -- IS_Scope -- + -------------- - function Scope (IS_Id : Invocation_Signature_Id) return Name_Id is + function IS_Scope (IS_Id : Invocation_Signature_Id) return Name_Id is begin pragma Assert (Present (IS_Id)); return Invocation_Signatures.Table (IS_Id).Scope; - end Scope; + end IS_Scope; --------- -- SEq -- diff --git a/gcc/ada/ali.ads b/gcc/ada/ali.ads index 928fdbd..ccb516f 100644 --- a/gcc/ada/ali.ads +++ b/gcc/ada/ali.ads @@ -1350,8 +1350,8 @@ package ALI is pragma Inline (Name); -- Obtain the name of invocation signature IS_Id - function Scope (IS_Id : Invocation_Signature_Id) return Name_Id; - pragma Inline (Scope); + function IS_Scope (IS_Id : Invocation_Signature_Id) return Name_Id; + pragma Inline (IS_Scope); -- Obtain the scope of invocation signature IS_Id procedure Set_Invocation_Graph_Encoding diff --git a/gcc/ada/bindo-writers.adb b/gcc/ada/bindo-writers.adb index cca6687..926fb82 100644 --- a/gcc/ada/bindo-writers.adb +++ b/gcc/ada/bindo-writers.adb @@ -222,7 +222,7 @@ package body Bindo.Writers is Write_Eol; Write_Str (" Scope = "); - Write_Name (Scope (IS_Id)); + Write_Name (IS_Scope (IS_Id)); Write_Eol; end Write_Invocation_Signature; diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 803bd21..61e41dd 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -3922,6 +3922,13 @@ package body Checks is function Aggregate_Discriminant_Val (Disc : Entity_Id) return Node_Id; + function Replace_Current_Instance + (N : Node_Id) return Traverse_Result; + -- Replace a reference to the current instance of the type with the + -- corresponding _init formal of the initialization procedure. Note: + -- this function relies on us currently being within the initialization + -- procedure. + -------------------------------- -- Aggregate_Discriminant_Val -- -------------------------------- @@ -3949,6 +3956,26 @@ package body Checks is raise Program_Error; end Aggregate_Discriminant_Val; + ------------------------------ + -- Replace_Current_Instance -- + ------------------------------ + + function Replace_Current_Instance + (N : Node_Id) return Traverse_Result is + begin + if Is_Entity_Name (N) + and then Etype (N) = Entity (N) + then + Rewrite (N, + New_Occurrence_Of (First_Formal (Current_Subprogram), Loc)); + end if; + + return OK; + end Replace_Current_Instance; + + procedure Search_And_Replace_Current_Instance is new + Traverse_Proc (Replace_Current_Instance); + -- Start of processing for Build_Discriminant_Checks begin @@ -3978,6 +4005,13 @@ package body Checks is Dval := Duplicate_Subexpr_No_Checks (Dval); end if; + -- Replace references to the current instance of the type with the + -- corresponding _init formal of the initialization procedure. + + if Within_Init_Proc then + Search_And_Replace_Current_Instance (Dval); + end if; + -- If we have an Unchecked_Union node, we can infer the discriminants -- of the node. @@ -4386,7 +4420,7 @@ package body Checks is Apply_Compile_Time_Constraint_Error (N => Expr, Msg => - "(Ada 2005) null not allowed in null-excluding " + "(Ada 2005) NULL not allowed in null-excluding " & "components??", Reason => CE_Null_Not_Allowed); @@ -4394,7 +4428,7 @@ package body Checks is Apply_Compile_Time_Constraint_Error (N => Expr, Msg => - "(Ada 2005) null not allowed in null-excluding " + "(Ada 2005) NULL not allowed in null-excluding " & "objects??", Reason => CE_Null_Not_Allowed); @@ -4402,7 +4436,7 @@ package body Checks is Apply_Compile_Time_Constraint_Error (N => Expr, Msg => - "(Ada 2005) null not allowed in null-excluding " + "(Ada 2005) NULL not allowed in null-excluding " & "formals??", Reason => CE_Null_Not_Allowed); @@ -11161,8 +11195,7 @@ package body Checks is procedure Validity_Check_Range (N : Node_Id; - Related_Id : Entity_Id := Empty) - is + Related_Id : Entity_Id := Empty) is begin if Validity_Checks_On and Validity_Check_Operands then if Nkind (N) = N_Range then @@ -11179,17 +11212,4 @@ package body Checks is end if; end Validity_Check_Range; - -------------------------------- - -- Validity_Checks_Suppressed -- - -------------------------------- - - function Validity_Checks_Suppressed (E : Entity_Id) return Boolean is - begin - if Present (E) and then Checks_May_Be_Suppressed (E) then - return Is_Check_Suppressed (E, Validity_Check); - else - return Scope_Suppress.Suppress (Validity_Check); - end if; - end Validity_Checks_Suppressed; - end Checks; diff --git a/gcc/ada/checks.ads b/gcc/ada/checks.ads index d75c602..e7b7261 100644 --- a/gcc/ada/checks.ads +++ b/gcc/ada/checks.ads @@ -64,7 +64,6 @@ package Checks is function Range_Checks_Suppressed (E : Entity_Id) return Boolean; function Storage_Checks_Suppressed (E : Entity_Id) return Boolean; function Tag_Checks_Suppressed (E : Entity_Id) return Boolean; - function Validity_Checks_Suppressed (E : Entity_Id) return Boolean; -- These functions check to see if the named check is suppressed, either -- by an active scope suppress setting, or because the check has been -- specifically suppressed for the given entity. If no entity is relevant diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb index 7387ffe..29557ec 100644 --- a/gcc/ada/contracts.adb +++ b/gcc/ada/contracts.adb @@ -2198,12 +2198,24 @@ package body Contracts is Result : Entity_Id) is Loc : constant Source_Ptr := Sloc (Body_Decl); + Last_Decl : Node_Id; Params : List_Id := No_List; Proc_Bod : Node_Id; Proc_Decl : Node_Id; Proc_Id : Entity_Id; Proc_Spec : Node_Id; + -- Extra declarations needed to handle interactions between + -- postconditions and finalization. + + Postcond_Enabled_Decl : Node_Id; + Return_Success_Decl : Node_Id; + Result_Obj_Decl : Node_Id; + Result_Obj_Type_Decl : Node_Id; + Result_Obj_Type : Entity_Id; + + -- Start of processing for Build_Postconditions_Procedure + begin -- Nothing to do if there are no actions to check on exit @@ -2211,6 +2223,29 @@ package body Contracts is return; end if; + -- Otherwise, we generate the postcondition procedure and add + -- associated objects and conditions used to coordinate postcondition + -- evaluation with finalization. + + -- Generate: + -- + -- procedure _postconditions (Return_Exp : Result_Typ); + -- + -- -- Result_Obj_Type created when Result_Type is non-elementary + -- [type Result_Obj_Type is access all Result_Typ;] + -- + -- Result_Obj : Result_Obj_Type; + -- + -- Postcond_Enabled : Boolean := True; + -- Return_Success_For_Postcond : Boolean := False; + -- + -- procedure _postconditions (Return_Exp : Result_Typ) is + -- begin + -- if Postcond_Enabled and then Return_Success_For_Postcond then + -- [stmts]; + -- end if; + -- end; + Proc_Id := Make_Defining_Identifier (Loc, Name_uPostconditions); Set_Debug_Info_Needed (Proc_Id); Set_Postconditions_Proc (Subp_Id, Proc_Id); @@ -2248,12 +2283,14 @@ package body Contracts is -- body. This ensures that the body will not cause any premature -- freezing, as it may mention types: + -- Generate: + -- -- procedure Proc (Obj : Array_Typ) is -- procedure _postconditions is -- begin -- ... Obj ... -- end _postconditions; - + -- -- subtype T is Array_Typ (Obj'First (1) .. Obj'Last (1)); -- begin @@ -2265,12 +2302,121 @@ package body Contracts is Insert_Before_First_Source_Declaration (Proc_Decl, Declarations (Body_Decl)); Analyze (Proc_Decl); + Last_Decl := Proc_Decl; + + -- When Result is present (e.g. the postcondition checks apply to a + -- function) we make a local object to capture the result, so, if + -- needed, we can call the generated postconditions procedure during + -- finalization instead of at the point of return. + + -- Note: The placement of the following declarations before the + -- declaration of the body of the postconditions, but after the + -- declaration of the postconditions spec is deliberate and required + -- since other code within the expander expects them to be located + -- here. Perhaps when more space is available in the tree this will + -- no longer be necessary ??? + + if Present (Result) then + -- Elementary result types mean a copy is cheap and preferred over + -- using pointers. + + if Is_Elementary_Type (Etype (Result)) then + Result_Obj_Type := Etype (Result); + + -- Otherwise, we create a named access type to capture the result + + -- Generate: + -- + -- type Result_Obj_Type is access all [Result_Type]; + + else + Result_Obj_Type := Make_Temporary (Loc, 'R'); + + Result_Obj_Type_Decl := + Make_Full_Type_Declaration (Loc, + Defining_Identifier => Result_Obj_Type, + Type_Definition => + Make_Access_To_Object_Definition (Loc, + All_Present => True, + Subtype_Indication => New_Occurrence_Of + (Etype (Result), Loc))); + Insert_After_And_Analyze (Proc_Decl, Result_Obj_Type_Decl); + Last_Decl := Result_Obj_Type_Decl; + end if; + + -- Create the result obj declaration + + -- Generate: + -- + -- Result_Object_For_Postcond : Result_Obj_Type; + + Result_Obj_Decl := + Make_Object_Declaration (Loc, + Defining_Identifier => + Make_Defining_Identifier + (Loc, Name_uResult_Object_For_Postcond), + Object_Definition => + New_Occurrence_Of + (Result_Obj_Type, Loc)); + Set_No_Initialization (Result_Obj_Decl); + Insert_After_And_Analyze (Last_Decl, Result_Obj_Decl); + Last_Decl := Result_Obj_Decl; + end if; + + -- Build the Postcond_Enabled flag used to delay evaluation of + -- postconditions until finalization has been performed when cleanup + -- actions are present. + + -- Generate: + -- + -- Postcond_Enabled : Boolean := True; + + Postcond_Enabled_Decl := + Make_Object_Declaration (Loc, + Defining_Identifier => + Make_Defining_Identifier + (Loc, Name_uPostcond_Enabled), + Object_Definition => New_Occurrence_Of (Standard_Boolean, Loc), + Expression => New_Occurrence_Of (Standard_True, Loc)); + Insert_After_And_Analyze (Last_Decl, Postcond_Enabled_Decl); + Last_Decl := Postcond_Enabled_Decl; + + -- Create a flag to indicate that return has been reached + + -- This is necessary for deciding whether to execute _postconditions + -- during finalization. + + -- Generate: + -- + -- Return_Success_For_Postcond : Boolean := False; + + Return_Success_Decl := + Make_Object_Declaration (Loc, + Defining_Identifier => + Make_Defining_Identifier + (Loc, Name_uReturn_Success_For_Postcond), + Object_Definition => New_Occurrence_Of (Standard_Boolean, Loc), + Expression => New_Occurrence_Of (Standard_False, Loc)); + Insert_After_And_Analyze (Last_Decl, Return_Success_Decl); + Last_Decl := Return_Success_Decl; -- Set an explicit End_Label to override the sloc of the implicit -- RETURN statement, and prevent it from inheriting the sloc of one -- the postconditions: this would cause confusing debug info to be -- produced, interfering with coverage-analysis tools. + -- Also, wrap the postcondition checks in a conditional which can be + -- used to delay their evaluation when clean-up actions are present. + + -- Generate: + -- + -- procedure _postconditions is + -- begin + -- if Postcond_Enabled and then Return_Success_For_Postcond then + -- [Stmts]; + -- end if; + -- end; + Proc_Bod := Make_Subprogram_Body (Loc, Specification => @@ -2278,10 +2424,22 @@ package body Contracts is Declarations => Empty_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, - Statements => Stmts, - End_Label => Make_Identifier (Loc, Chars (Proc_Id)))); + End_Label => Make_Identifier (Loc, Chars (Proc_Id)), + Statements => New_List ( + Make_If_Statement (Loc, + Condition => + Make_And_Then (Loc, + Left_Opnd => + New_Occurrence_Of + (Defining_Identifier + (Postcond_Enabled_Decl), Loc), + Right_Opnd => + New_Occurrence_Of + (Defining_Identifier + (Return_Success_Decl), Loc)), + Then_Statements => Stmts)))); + Insert_After_And_Analyze (Last_Decl, Proc_Bod); - Insert_After_And_Analyze (Proc_Decl, Proc_Bod); end Build_Postconditions_Procedure; ---------------------------- @@ -3280,6 +3438,81 @@ package body Contracts is Freeze_Contracts; end Freeze_Previous_Contracts; + -------------------------- + -- Get_Postcond_Enabled -- + -------------------------- + + function Get_Postcond_Enabled (Subp : Entity_Id) return Node_Id is + Decl : Node_Id; + begin + Decl := + Next (Unit_Declaration_Node (Postconditions_Proc (Subp))); + while Present (Decl) loop + + if Nkind (Decl) = N_Object_Declaration + and then Chars (Defining_Identifier (Decl)) + = Name_uPostcond_Enabled + then + return Defining_Identifier (Decl); + end if; + + Next (Decl); + end loop; + + return Empty; + end Get_Postcond_Enabled; + + ------------------------------------ + -- Get_Result_Object_For_Postcond -- + ------------------------------------ + + function Get_Result_Object_For_Postcond + (Subp : Entity_Id) return Node_Id + is + Decl : Node_Id; + begin + Decl := + Next (Unit_Declaration_Node (Postconditions_Proc (Subp))); + while Present (Decl) loop + + if Nkind (Decl) = N_Object_Declaration + and then Chars (Defining_Identifier (Decl)) + = Name_uResult_Object_For_Postcond + then + return Defining_Identifier (Decl); + end if; + + Next (Decl); + end loop; + + return Empty; + end Get_Result_Object_For_Postcond; + + ------------------------------------- + -- Get_Return_Success_For_Postcond -- + ------------------------------------- + + function Get_Return_Success_For_Postcond (Subp : Entity_Id) return Node_Id + is + Decl : Node_Id; + begin + Decl := + Next (Unit_Declaration_Node (Postconditions_Proc (Subp))); + while Present (Decl) loop + + if Nkind (Decl) = N_Object_Declaration + and then Chars (Defining_Identifier (Decl)) + = Name_uReturn_Success_For_Postcond + then + return Defining_Identifier (Decl); + end if; + + Next (Decl); + end loop; + + return Empty; + end Get_Return_Success_For_Postcond; + --------------------------------- -- Inherit_Subprogram_Contract -- --------------------------------- diff --git a/gcc/ada/contracts.ads b/gcc/ada/contracts.ads index 4782ef5..b8a12ff 100644 --- a/gcc/ada/contracts.ads +++ b/gcc/ada/contracts.ads @@ -188,6 +188,21 @@ package Contracts is -- denoted by Body_Decl. In addition, freeze the contract of the nearest -- enclosing package body. + function Get_Postcond_Enabled (Subp : Entity_Id) return Entity_Id; + -- Get the defining identifier for a subprogram's Postcond_Enabled + -- object created during the expansion of the subprogram's postconditions. + + function Get_Result_Object_For_Postcond (Subp : Entity_Id) return Entity_Id; + -- Get the defining identifier for a subprogram's + -- Result_Object_For_Postcond object created during the expansion of the + -- subprogram's postconditions. + + function Get_Return_Success_For_Postcond + (Subp : Entity_Id) return Entity_Id; + -- Get the defining identifier for a subprogram's + -- Return_Success_For_Postcond object created during the expansion of the + -- subprogram's postconditions. + procedure Inherit_Subprogram_Contract (Subp : Entity_Id; From_Subp : Entity_Id); diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index f57b148..2c7c712 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -74,7 +74,7 @@ package body Debug is -- dN No file name information in exception messages -- dO Output immediate error messages -- dP Do not check for controlled objects in preelaborable packages - -- dQ Use old secondary stack method + -- dQ -- dR Bypass check for correct version of s-rpc -- dS Never convert numbers to machine numbers in Sem_Eval -- dT Convert to machine numbers only for constant declarations @@ -643,11 +643,6 @@ package body Debug is -- in preelaborable packages, but this restriction is a huge pain, -- especially in the predefined library units. - -- dQ Use old method for determining what goes on the secondary stack. - -- This disables some newer optimizations. The intent is to use this - -- temporarily to measure before/after efficiency. ???Remove this - -- when we are done (see Sem_Util.Requires_Transient_Scope). - -- dR Bypass the check for a proper version of s-rpc being present -- to use the -gnatz? switch. This allows debugging of the use -- of stubs generation without needing to have GLADE (or some diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst index f8a62a5..74b9718 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst @@ -6652,8 +6652,8 @@ expression. The following is an example of use within a package spec: function Sqrt (Arg : Float) return Float; pragma Test_Case (Name => "Test 1", Mode => Nominal, - Requires => Arg < 10000, - Ensures => Sqrt'Result < 10); + Requires => Arg < 10000.0, + Ensures => Sqrt'Result < 10.0); ... end Math_Functions; diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst index 9c62d6e..82e992a 100644 --- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst +++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst @@ -3344,7 +3344,7 @@ of the pragma in the :title:`GNAT_Reference_manual`). :switch:`-gnatw.K` *Suppress warnings on redefinition of names in standard.* - This switch activates warnings for declarations that declare a name that + This switch disables warnings for declarations that declare a name that is defined in package Standard. diff --git a/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst b/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst index ba2c9b6..c4f186e 100644 --- a/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst +++ b/gcc/ada/doc/gnat_ugn/gnat_and_program_execution.rst @@ -1840,7 +1840,7 @@ improves performance for your program. .. _Floating_Point_Operations: -Floating_Point_Operations +Floating Point Operations ^^^^^^^^^^^^^^^^^^^^^^^^^ .. index:: Floating-Point Operations diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb index 8949703..8c401ca 100644 --- a/gcc/ada/einfo.adb +++ b/gcc/ada/einfo.adb @@ -6802,7 +6802,9 @@ package body Einfo is procedure Set_Stores_Attribute_Old_Prefix (Id : E; V : B := True) is begin - pragma Assert (Ekind (Id) = E_Constant); + pragma Assert (Is_Type (Id) + or else (Ekind (Id) in E_Constant + | E_Variable)); Set_Flag270 (Id, V); end Set_Stores_Attribute_Old_Prefix; diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index 360ce7c..cc0c815 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -4503,8 +4503,8 @@ package Einfo is -- stored discriminants for the record (sub)type. -- Stores_Attribute_Old_Prefix (Flag270) --- Defined in constants. Set when the constant has been generated to save --- the value of attribute 'Old's prefix. +-- Defined in constants, variables, and types which are created during +-- expansion in order to save the value of attribute 'Old's prefix. -- Strict_Alignment (Flag145) [implementation base type only] -- Defined in all type entities. Indicates that the type is by-reference diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb index fbbf579..cc291c6 100644 --- a/gcc/ada/errout.adb +++ b/gcc/ada/errout.adb @@ -612,6 +612,25 @@ package body Errout is end; end Error_Msg; + ---------------------------------- + -- Error_Msg_Ada_2005_Extension -- + ---------------------------------- + + procedure Error_Msg_Ada_2005_Extension (Extension : String) is + Loc : constant Source_Ptr := Token_Ptr; + begin + if Ada_Version < Ada_2005 then + Error_Msg (Extension & " is an Ada 2005 extension", Loc); + + if No (Ada_Version_Pragma) then + Error_Msg ("\unit must be compiled with -gnat05 switch", Loc); + else + Error_Msg_Sloc := Sloc (Ada_Version_Pragma); + Error_Msg ("\incompatible with Ada version set#", Loc); + end if; + end if; + end Error_Msg_Ada_2005_Extension; + -------------------------------- -- Error_Msg_Ada_2012_Feature -- -------------------------------- diff --git a/gcc/ada/errout.ads b/gcc/ada/errout.ads index b49b9a9..02cfdee 100644 --- a/gcc/ada/errout.ads +++ b/gcc/ada/errout.ads @@ -902,6 +902,11 @@ package Errout is -- overridden interface primitive Iface_Prim) indicating wrong mode of the -- first formal (RM 9.4(11.9/3)). + procedure Error_Msg_Ada_2005_Extension (Extension : String); + -- Analogous to Error_Msg_Ada_2012_Feature, but phrase the message using + -- "extension" and not "feature". This routine is only used in the parser, + -- so the error is always placed at the Token_Ptr. + procedure Error_Msg_Ada_2012_Feature (Feature : String; Loc : Source_Ptr); -- If not operating in Ada 2012 mode or higher, posts errors complaining -- that Feature is only supported in Ada 2012, with appropriate suggestions diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 30f6dd9..d7e5470 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -1865,21 +1865,6 @@ package body Exp_Aggr is Typ => Ctype, With_Default_Init => True)); - -- If Default_Initial_Condition applies to the component type, - -- add a DIC check after the component is default-initialized. - -- It will be analyzed and resolved before the code for - -- initialization of other components. - - -- Theoretically this might also be needed for cases where - -- the component type doesn't have an init proc (such as for - -- Default_Value cases), but those should be uncommon, and for - -- now we only support the init proc case. ??? - - if Has_DIC (Ctype) and then Present (DIC_Procedure (Ctype)) then - Append_To (Stmts, - Build_DIC_Call (Loc, New_Copy_Tree (Indexed_Comp), Ctype)); - end if; - -- If the component type has invariants, add an invariant -- check after the component is default-initialized. It will -- be analyzed and resolved before the code for initialization @@ -1910,6 +1895,22 @@ package body Exp_Aggr is Append_To (Stmts, Init_Call); end if; end if; + + -- If Default_Initial_Condition applies to the component type, + -- add a DIC check after the component is default-initialized, + -- as well as after an Initialize procedure is called, in the + -- case of components of a controlled type. It will be analyzed + -- and resolved before the code for initialization of other + -- components. + + -- Theoretically this might also be needed for cases where Expr + -- is not empty, but a default init still applies, such as for + -- Default_Value cases, in which case we won't get here. ??? + + if Has_DIC (Ctype) and then Present (DIC_Procedure (Ctype)) then + Append_To (Stmts, + Build_DIC_Call (Loc, New_Copy_Tree (Indexed_Comp), Ctype)); + end if; end if; return Add_Loop_Actions (Stmts); diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 251fa14..7f63a2d 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -4702,13 +4702,15 @@ package body Exp_Attr is when Attribute_Mod => Mod_Case : declare Arg : constant Node_Id := Relocate_Node (First (Exprs)); - Hi : constant Node_Id := Type_High_Bound (Etype (Arg)); + Hi : constant Node_Id := Type_High_Bound (Base_Type (Etype (Arg))); Modv : constant Uint := Modulus (Btyp); begin -- This is not so simple. The issue is what type to use for the - -- computation of the modular value. + -- computation of the modular value. In addition we need to use + -- the base type as above to retrieve a static bound for the + -- comparisons that follow. -- The easy case is when the modulus value is within the bounds -- of the signed integer type of the argument. In this case we can @@ -6194,20 +6196,19 @@ package body Exp_Attr is -- Round -- ----------- - -- The handling of the Round attribute is quite delicate. The processing - -- in Sem_Attr introduced a conversion to universal real, reflecting the - -- semantics of Round, but we do not want anything to do with universal - -- real at runtime, since this corresponds to using floating-point - -- arithmetic. + -- The handling of the Round attribute is delicate when the operand is + -- universal fixed. In this case, the processing in Sem_Attr introduced + -- a conversion to universal real, reflecting the semantics of Round, + -- but we do not want anything to do with universal real at run time, + -- since this corresponds to using floating-point arithmetic. -- What we have now is that the Etype of the Round attribute correctly -- indicates the final result type. The operand of the Round is the -- conversion to universal real, described above, and the operand of -- this conversion is the actual operand of Round, which may be the - -- special case of a fixed point multiplication or division (Etype = - -- universal fixed) + -- special case of a fixed point multiplication or division. - -- The exapander will expand first the operand of the conversion, then + -- The expander will expand first the operand of the conversion, then -- the conversion, and finally the round attribute itself, since we -- always work inside out. But we cannot simply process naively in this -- order. In the semantic world where universal fixed and real really @@ -6215,14 +6216,13 @@ package body Exp_Attr is -- implementation world, where universal real is a floating-point type, -- we would get the wrong result. - -- So the approach is as follows. First, when expanding a multiply or - -- divide whose type is universal fixed, we do nothing at all, instead - -- deferring the operation till later. - - -- The actual processing is done in Expand_N_Type_Conversion which - -- handles the special case of Round by looking at its parent to see if - -- it is a Round attribute, and if it is, handling the conversion (or - -- its fixed multiply/divide child) in an appropriate manner. + -- So the approach is as follows. When expanding a multiply or divide + -- whose type is universal fixed, Fixup_Universal_Fixed_Operation will + -- look up and skip the conversion to universal real if its parent is + -- a Round attribute, taking information from this attribute node. In + -- the other cases, Expand_N_Type_Conversion does the same by looking + -- at its parent to see if it is a Round attribute, before calling the + -- fixed-point expansion routine. -- This means that by the time we get to expanding the Round attribute -- itself, the Round is nothing more than a type conversion (and will @@ -6230,8 +6230,12 @@ package body Exp_Attr is -- appropriate conversion operation. when Attribute_Round => - Rewrite (N, - Convert_To (Etype (N), Relocate_Node (First (Exprs)))); + if Etype (First (Exprs)) = Etype (N) then + Rewrite (N, Relocate_Node (First (Exprs))); + else + Rewrite (N, Convert_To (Etype (N), First (Exprs))); + Set_Rounded_Result (N); + end if; Analyze_And_Resolve (N); -------------- @@ -8307,27 +8311,25 @@ package body Exp_Attr is -- All we do is use the root type (historically this dealt with -- VAX-float .. to be cleaned up further later ???) - Fat_Type := Rtyp; + if Rtyp = Standard_Short_Float or else Rtyp = Standard_Float then + Fat_Type := Standard_Float; + Fat_Pkg := RE_Attr_Float; - if Fat_Type = Standard_Short_Float then - Fat_Pkg := RE_Attr_Short_Float; + elsif Rtyp = Standard_Long_Float then + Fat_Type := Standard_Long_Float; + Fat_Pkg := RE_Attr_Long_Float; - elsif Fat_Type = Standard_Float then - Fat_Pkg := RE_Attr_Float; - - elsif Fat_Type = Standard_Long_Float then - Fat_Pkg := RE_Attr_Long_Float; - - elsif Fat_Type = Standard_Long_Long_Float then - Fat_Pkg := RE_Attr_Long_Long_Float; + elsif Rtyp = Standard_Long_Long_Float then + Fat_Type := Standard_Long_Long_Float; + Fat_Pkg := RE_Attr_Long_Long_Float; -- Universal real (which is its own root type) is treated as being -- equivalent to Standard.Long_Long_Float, since it is defined to -- have the same precision as the longest Float type. - elsif Fat_Type = Universal_Real then + elsif Rtyp = Universal_Real then Fat_Type := Standard_Long_Long_Float; - Fat_Pkg := RE_Attr_Long_Long_Float; + Fat_Pkg := RE_Attr_Long_Long_Float; else raise Program_Error; diff --git a/gcc/ada/exp_ch11.adb b/gcc/ada/exp_ch11.adb index 3ab2ea2..a501bf1 100644 --- a/gcc/ada/exp_ch11.adb +++ b/gcc/ada/exp_ch11.adb @@ -1864,8 +1864,8 @@ package body Exp_Ch11 is then return Empty; - -- Test for handled sequence of statements with at least one - -- exception handler which might be the one we are looking for. + -- Test for handled sequence of statements with at least one + -- exception handler which might be the one we are looking for. elsif Nkind (P) = N_Handled_Sequence_Of_Statements and then Present (Exception_Handlers (P)) diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index bbb7d53..e0040ed 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -697,6 +697,11 @@ package body Exp_Ch3 is and then not GNATprove_Mode + -- DIC checks for components of controlled types are done later + -- (see Exp_Ch7.Make_Deep_Array_Body). + + and then not Is_Controlled (Comp_Type) + and then Present (DIC_Procedure (Comp_Type)) and then not Has_Null_Body (DIC_Procedure (Comp_Type)) @@ -9019,13 +9024,13 @@ package body Exp_Ch3 is if Warning_Needed then Error_Msg_N - ("Objects of the type cannot be initialized statically " + ("objects of the type cannot be initialized statically " & "by default??", Parent (E)); end if; end if; else - Error_Msg_N ("Object cannot be initialized statically??", E); + Error_Msg_N ("object cannot be initialized statically??", E); end if; end if; end Initialization_Warning; diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index ecaeeb2..04bd1fe 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -11162,7 +11162,7 @@ package body Exp_Ch4 is -- because the selected component may be a reference to the -- object being initialized, whose discriminant is not yet -- set. This only happens in complex cases involving changes - -- or representation. + -- of representation. if Disc = Entity (Selector_Name (N)) and then (Is_Entity_Name (Dval) @@ -11174,15 +11174,7 @@ package body Exp_Ch4 is -- constrained by an outer discriminant, which cannot -- be optimized away. - if Denotes_Discriminant - (Dval, Check_Concurrent => True) - then - exit Discr_Loop; - - elsif Nkind (Original_Node (Dval)) = N_Selected_Component - and then - Denotes_Discriminant - (Selector_Name (Original_Node (Dval)), True) + if Denotes_Discriminant (Dval, Check_Concurrent => True) then exit Discr_Loop; @@ -12556,9 +12548,9 @@ package body Exp_Ch4 is and then Nkind (Parent (N)) = N_Attribute_Reference and then Attribute_Name (Parent (N)) = Name_Round then - Set_Rounded_Result (N); Set_Etype (N, Etype (Parent (N))); Target_Type := Etype (N); + Set_Rounded_Result (N); end if; if Is_Fixed_Point_Type (Target_Type) then @@ -12815,56 +12807,6 @@ package body Exp_Ch4 is return; end if; - -- If we have a conversion of a compile time known value to a target - -- type and the value is in range of the target type, then we can simply - -- replace the construct by an integer literal of the correct type. We - -- only apply this to discrete types being converted. Possibly it may - -- apply in other cases, but it is too much trouble to worry about. - - -- Note that we do not do this transformation if the Kill_Range_Check - -- flag is set, since then the value may be outside the expected range. - -- This happens in the Normalize_Scalars case. - - -- We also skip this if either the target or operand type is biased - -- because in this case, the unchecked conversion is supposed to - -- preserve the bit pattern, not the integer value. - - if Is_Integer_Type (Target_Type) - and then not Has_Biased_Representation (Target_Type) - and then Is_Discrete_Type (Operand_Type) - and then not Has_Biased_Representation (Operand_Type) - and then Compile_Time_Known_Value (Operand) - and then not Kill_Range_Check (N) - then - declare - Val : constant Uint := Expr_Rep_Value (Operand); - - begin - if Compile_Time_Known_Value (Type_Low_Bound (Target_Type)) - and then - Compile_Time_Known_Value (Type_High_Bound (Target_Type)) - and then - Val >= Expr_Value (Type_Low_Bound (Target_Type)) - and then - Val <= Expr_Value (Type_High_Bound (Target_Type)) - then - Rewrite (N, Make_Integer_Literal (Sloc (N), Val)); - - -- If Address is the target type, just set the type to avoid a - -- spurious type error on the literal when Address is a visible - -- integer type. - - if Is_Descendant_Of_Address (Target_Type) then - Set_Etype (N, Target_Type); - else - Analyze_And_Resolve (N, Target_Type); - end if; - - return; - end if; - end; - end if; - -- Generate an extra temporary for cases unsupported by the C backend if Modify_Tree_For_C then @@ -13375,7 +13317,8 @@ package body Exp_Ch4 is -- will be to universal real, and our real type comes from the Round -- attribute (as well as an indication that we must round the result) - if Nkind (Parent (Conv)) = N_Attribute_Reference + if Etype (Conv) = Universal_Real + and then Nkind (Parent (Conv)) = N_Attribute_Reference and then Attribute_Name (Parent (Conv)) = Name_Round then Set_Etype (N, Base_Type (Etype (Parent (Conv)))); diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 307acaa..4cae2ee 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -1623,14 +1623,27 @@ package body Exp_Ch5 is CI : constant List_Id := Component_Items (CL); VP : constant Node_Id := Variant_Part (CL); - Alts : List_Id; - DC : Node_Id; - DCH : List_Id; - Expr : Node_Id; - Result : List_Id; - V : Node_Id; + Constrained_Typ : Entity_Id; + Alts : List_Id; + DC : Node_Id; + DCH : List_Id; + Expr : Node_Id; + Result : List_Id; + V : Node_Id; begin + -- Try to find a constrained type to extract discriminant values + -- from, so that the case statement built below gets an + -- opportunity to be folded by Expand_N_Case_Statement. + + if U_U or else Is_Constrained (Etype (Rhs)) then + Constrained_Typ := Etype (Rhs); + elsif Is_Constrained (Etype (Expression (N))) then + Constrained_Typ := Etype (Expression (N)); + else + Constrained_Typ := Empty; + end if; + Result := Make_Field_Assigns (CI); if Present (VP) then @@ -1652,17 +1665,12 @@ package body Exp_Ch5 is Next_Non_Pragma (V); end loop; - -- If we have an Unchecked_Union, use the value of the inferred - -- discriminant of the variant part expression as the switch - -- for the case statement. The case statement may later be - -- folded. - - if U_U then + if Present (Constrained_Typ) then Expr := New_Copy (Get_Discriminant_Value ( Entity (Name (VP)), - Etype (Rhs), - Discriminant_Constraint (Etype (Rhs)))); + Constrained_Typ, + Discriminant_Constraint (Constrained_Typ))); else Expr := Make_Selected_Component (Loc, @@ -1786,9 +1794,10 @@ package body Exp_Ch5 is -- Start of processing for Expand_Assign_Record begin - -- Note that we use the base types for this processing. This results - -- in some extra work in the constrained case, but the change of - -- representation case is so unusual that it is not worth the effort. + -- Note that we need to use the base types for this processing in + -- order to retrieve the Type_Definition. In the constrained case, + -- we filter out the non relevant fields in + -- Make_Component_List_Assign. -- First copy the discriminants. This is done unconditionally. It -- is required in the unconstrained left side case, and also in the @@ -1824,7 +1833,7 @@ package body Exp_Ch5 is CF := F; end if; - if Is_Unchecked_Union (Base_Type (R_Typ)) then + if Is_Unchecked_Union (R_Typ) then -- Within an initialization procedure this is the -- assignment to an unchecked union component, in which @@ -1916,8 +1925,8 @@ package body Exp_Ch5 is Insert_Actions (N, Make_Component_List_Assign (Component_List (RDef), True)); else - Insert_Actions - (N, Make_Component_List_Assign (Component_List (RDef))); + Insert_Actions (N, + Make_Component_List_Assign (Component_List (RDef))); end if; Rewrite (N, Make_Null_Statement (Loc)); @@ -4681,6 +4690,16 @@ package body Exp_Ch5 is New_Id : Entity_Id; begin + -- If Discrete_Subtype_Definition has been rewritten as an + -- N_Raise_xxx_Error, rewrite the whole loop as a raise node to + -- avoid confusing the code generator down the line. + + if Nkind (Discrete_Subtype_Definition (LPS)) in N_Raise_xxx_Error + then + Rewrite (N, Discrete_Subtype_Definition (LPS)); + return; + end if; + if Present (Iterator_Filter (LPS)) then pragma Assert (Ada_Version >= Ada_2020); Set_Statements (N, diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 98a1ceb..2cd40e4 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -883,9 +883,8 @@ package body Exp_Ch6 is is Loc : constant Source_Ptr := Sloc (Func_Body); - Proc_Decl : constant Node_Id := - Next (Unit_Declaration_Node (Func_Id)); - -- It is assumed that the next node following the declaration of the + Proc_Decl : constant Node_Id := Prev (Unit_Declaration_Node (Func_Id)); + -- It is assumed that the node before the declaration of the -- corresponding subprogram spec is the declaration of the procedure -- form. @@ -3492,8 +3491,7 @@ package body Exp_Ch6 is -- of the dimension I/O packages. if Ada_Version >= Ada_2012 - and then - Nkind (Call_Node) in N_Procedure_Call_Statement | N_Function_Call + and then Nkind (Call_Node) in N_Subprogram_Call and then Present (Parameter_Associations (Call_Node)) then Expand_Put_Call_With_Symbol (Call_Node); @@ -6247,9 +6245,24 @@ package body Exp_Ch6 is -- Call the _Postconditions procedure if the related subprogram -- has contract assertions that need to be verified on exit. + -- Also, mark the successful return to signal that postconditions + -- need to be evaluated when finalization occurs. + if Ekind (Spec_Id) = E_Procedure and then Present (Postconditions_Proc (Spec_Id)) then + -- Generate: + -- + -- Return_Success_For_Postcond := True; + -- _postconditions; + + Insert_Action (Stmt, + Make_Assignment_Statement (Loc, + Name => + New_Occurrence_Of + (Get_Return_Success_For_Postcond (Spec_Id), Loc), + Expression => New_Occurrence_Of (Standard_True, Loc))); + Insert_Action (Stmt, Make_Procedure_Call_Statement (Loc, Name => @@ -6571,6 +6584,7 @@ package body Exp_Ch6 is Prot_Bod : Node_Id; Prot_Decl : Node_Id; Prot_Id : Entity_Id; + Typ : Entity_Id; begin -- Deal with case of protected subprogram. Do not generate protected @@ -6645,10 +6659,12 @@ package body Exp_Ch6 is -- are not needed by the C generator (and this also produces cleaner -- output). + Typ := Get_Fullest_View (Etype (Subp)); + if Transform_Function_Array and then Nkind (Specification (N)) = N_Function_Specification - and then Is_Array_Type (Etype (Subp)) - and then Is_Constrained (Etype (Subp)) + and then Is_Array_Type (Typ) + and then Is_Constrained (Typ) and then not Is_Unchecked_Conversion_Instance (Subp) then Build_Procedure_Form (N); @@ -6674,9 +6690,24 @@ package body Exp_Ch6 is -- Call the _Postconditions procedure if the related subprogram has -- contract assertions that need to be verified on exit. + -- Also, mark the successful return to signal that postconditions need + -- to be evaluated when finalization occurs. + if Ekind (Scope_Id) in E_Entry | E_Entry_Family | E_Procedure and then Present (Postconditions_Proc (Scope_Id)) then + -- Generate: + -- + -- Return_Success_For_Postcond := True; + -- _postconditions; + + Insert_Action (N, + Make_Assignment_Statement (Loc, + Name => + New_Occurrence_Of + (Get_Return_Success_For_Postcond (Scope_Id), Loc), + Expression => New_Occurrence_Of (Standard_True, Loc))); + Insert_Action (N, Make_Procedure_Call_Statement (Loc, Name => New_Occurrence_Of (Postconditions_Proc (Scope_Id), Loc))); @@ -7563,6 +7594,41 @@ package body Exp_Ch6 is Force_Evaluation (Exp, Mode => Strict); + -- Save the return value or a pointer to the return value since we + -- may need to call postconditions after finalization when cleanup + -- actions are present. + + -- Generate: + -- + -- Result_Object_For_Postcond := [Exp]'Unrestricted_Access; + + Insert_Action (Exp, + Make_Assignment_Statement (Loc, + Name => + New_Occurrence_Of + (Get_Result_Object_For_Postcond (Scope_Id), Loc), + Expression => + (if Is_Elementary_Type (Etype (R_Type)) then + New_Copy_Tree (Exp) + else + Make_Attribute_Reference (Loc, + Attribute_Name => Name_Unrestricted_Access, + Prefix => New_Copy_Tree (Exp))))); + + -- Mark the successful return to signal that postconditions need to + -- be evaluated when finalization occurs. + + -- Generate: + -- + -- Return_Success_For_Postcond := True; + + Insert_Action (Exp, + Make_Assignment_Statement (Loc, + Name => + New_Occurrence_Of + (Get_Return_Success_For_Postcond (Scope_Id), Loc), + Expression => New_Occurrence_Of (Standard_True, Loc))); + -- Generate call to _Postconditions Insert_Action (Exp, @@ -8091,6 +8157,7 @@ package body Exp_Ch6 is if True then Result := Is_Controlled (T) + and then not Is_Generic_Actual_Type (T) and then Present (Enclosing_Subprogram (T)) and then not Is_Compilation_Unit (Enclosing_Subprogram (T)) and then Ekind (Enclosing_Subprogram (T)) = E_Procedure; @@ -9275,7 +9342,7 @@ package body Exp_Ch6 is Tmp_Id : Entity_Id; begin - -- No action of the call has already been processed + -- No action if the call has already been processed if Is_Expanded_Build_In_Place_Call (BIP_Func_Call) then return; @@ -9950,7 +10017,7 @@ package body Exp_Ch6 is procedure Warn_BIP (Func_Call : Node_Id) is begin if Debug_Flag_Underscore_BB then - Error_Msg_N ("build-in-place function call?", Func_Call); + Error_Msg_N ("build-in-place function call??", Func_Call); end if; end Warn_BIP; diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 55f714c..5d8ad7d 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -27,42 +27,43 @@ -- - controlled types -- - transient scopes -with Atree; use Atree; -with Debug; use Debug; -with Einfo; use Einfo; -with Elists; use Elists; -with Errout; use Errout; -with Exp_Ch6; use Exp_Ch6; -with Exp_Ch9; use Exp_Ch9; -with Exp_Ch11; use Exp_Ch11; -with Exp_Dbug; use Exp_Dbug; -with Exp_Dist; use Exp_Dist; -with Exp_Disp; use Exp_Disp; -with Exp_Prag; use Exp_Prag; -with Exp_Tss; use Exp_Tss; -with Exp_Util; use Exp_Util; -with Freeze; use Freeze; -with Lib; use Lib; -with Nlists; use Nlists; -with Nmake; use Nmake; -with Opt; use Opt; -with Output; use Output; -with Restrict; use Restrict; -with Rident; use Rident; -with Rtsfind; use Rtsfind; -with Sinfo; use Sinfo; -with Sem; use Sem; -with Sem_Aux; use Sem_Aux; -with Sem_Ch3; use Sem_Ch3; -with Sem_Ch7; use Sem_Ch7; -with Sem_Ch8; use Sem_Ch8; -with Sem_Res; use Sem_Res; -with Sem_Util; use Sem_Util; -with Snames; use Snames; -with Stand; use Stand; -with Tbuild; use Tbuild; -with Ttypes; use Ttypes; -with Uintp; use Uintp; +with Atree; use Atree; +with Contracts; use Contracts; +with Debug; use Debug; +with Einfo; use Einfo; +with Elists; use Elists; +with Errout; use Errout; +with Exp_Ch6; use Exp_Ch6; +with Exp_Ch9; use Exp_Ch9; +with Exp_Ch11; use Exp_Ch11; +with Exp_Dbug; use Exp_Dbug; +with Exp_Dist; use Exp_Dist; +with Exp_Disp; use Exp_Disp; +with Exp_Prag; use Exp_Prag; +with Exp_Tss; use Exp_Tss; +with Exp_Util; use Exp_Util; +with Freeze; use Freeze; +with Lib; use Lib; +with Nlists; use Nlists; +with Nmake; use Nmake; +with Opt; use Opt; +with Output; use Output; +with Restrict; use Restrict; +with Rident; use Rident; +with Rtsfind; use Rtsfind; +with Sinfo; use Sinfo; +with Sem; use Sem; +with Sem_Aux; use Sem_Aux; +with Sem_Ch3; use Sem_Ch3; +with Sem_Ch7; use Sem_Ch7; +with Sem_Ch8; use Sem_Ch8; +with Sem_Res; use Sem_Res; +with Sem_Util; use Sem_Util; +with Snames; use Snames; +with Stand; use Stand; +with Tbuild; use Tbuild; +with Ttypes; use Ttypes; +with Uintp; use Uintp; package body Exp_Ch7 is @@ -339,6 +340,17 @@ package body Exp_Ch7 is -- such as for task termination. Fin_Id is the finalizer declaration -- entity. + procedure Build_Finalizer_Helper + (N : Node_Id; + Clean_Stmts : List_Id; + Mark_Id : Entity_Id; + Top_Decls : List_Id; + Defer_Abort : Boolean; + Fin_Id : out Entity_Id; + Finalize_Old_Only : Boolean); + -- An internal routine which does all of the heavy lifting on behalf of + -- Build_Finalizer. + procedure Build_Finalizer_Call (N : Node_Id; Fin_Id : Entity_Id); -- N is a construct which contains a handled sequence of statements, Fin_Id -- is the entity of a finalizer. Create an At_End handler which covers the @@ -1397,20 +1409,32 @@ package body Exp_Ch7 is else Append_Freeze_Actions (Ptr_Typ, Actions); end if; + + Analyze_List (Actions); + + -- When the type the finalization master is being generated for was + -- created to store a 'Old object, then mark it as such so its + -- finalization can be delayed until after postconditions have been + -- checked. + + if Stores_Attribute_Old_Prefix (Ptr_Typ) then + Set_Stores_Attribute_Old_Prefix (Fin_Mas_Id); + end if; end; end Build_Finalization_Master; - --------------------- - -- Build_Finalizer -- - --------------------- + ---------------------------- + -- Build_Finalizer_Helper -- + ---------------------------- - procedure Build_Finalizer + procedure Build_Finalizer_Helper (N : Node_Id; Clean_Stmts : List_Id; Mark_Id : Entity_Id; Top_Decls : List_Id; Defer_Abort : Boolean; - Fin_Id : out Entity_Id) + Fin_Id : out Entity_Id; + Finalize_Old_Only : Boolean) is Acts_As_Clean : constant Boolean := Present (Mark_Id) @@ -1746,9 +1770,20 @@ package body Exp_Ch7 is -- The default name is _finalizer else - Fin_Id := - Make_Defining_Identifier (Loc, - Chars => New_External_Name (Name_uFinalizer)); + -- Generation of a finalization procedure exclusively for 'Old + -- interally generated constants requires different name since + -- there will need to be multiple finalization routines in the + -- same scope. See Build_Finalizer for details. + + if Finalize_Old_Only then + Fin_Id := + Make_Defining_Identifier (Loc, + Chars => New_External_Name (Name_uFinalizer_Old)); + else + Fin_Id := + Make_Defining_Identifier (Loc, + Chars => New_External_Name (Name_uFinalizer)); + end if; -- The visibility semantics of AT_END handlers force a strange -- separation of spec and body for stack-related finalizers: @@ -2051,8 +2086,26 @@ package body Exp_Ch7 is pragma Assert (Present (Spec_Decls)); - Append_To (Spec_Decls, Fin_Spec); - Analyze (Fin_Spec); + -- It maybe possible that we are finalizing 'Old objects which + -- exist in the spec declarations. When this is the case the + -- Finalizer_Insert_Node will come before the end of the + -- Spec_Decls. So, to mitigate this, we insert the finalizer spec + -- earlier at the Finalizer_Insert_Nod instead of appending to the + -- end of Spec_Decls to prevent its body appearing before its + -- corresponding spec. + + if Present (Finalizer_Insert_Nod) + and then List_Containing (Finalizer_Insert_Nod) = Spec_Decls + then + Insert_After_And_Analyze (Finalizer_Insert_Nod, Fin_Spec); + Finalizer_Insert_Nod := Fin_Spec; + + -- Otherwise, Finalizer_Insert_Nod is not in Spec_Decls + + else + Append_To (Spec_Decls, Fin_Spec); + Analyze (Fin_Spec); + end if; -- When the finalizer acts solely as a cleanup routine, the body -- is inserted right after the spec. @@ -2194,9 +2247,26 @@ package body Exp_Ch7 is Decl := Last_Non_Pragma (Decls); while Present (Decl) loop + -- Depending on the value of flag Finalize_Old_Only we determine + -- which objects get finalized as part of the current finalizer + -- being built. + + -- When True, only temporaries capturing the value of attribute + -- 'Old are finalized and all other cases are ignored. + + -- When False, temporary objects used to capture the value of 'Old + -- are ignored and all others are considered. + + if Finalize_Old_Only + xor (Nkind (Decl) = N_Object_Declaration + and then Stores_Attribute_Old_Prefix + (Defining_Identifier (Decl))) + then + null; + -- Library-level tagged types - if Nkind (Decl) = N_Full_Type_Declaration then + elsif Nkind (Decl) = N_Full_Type_Declaration then Typ := Defining_Identifier (Decl); -- Ignored Ghost types do not need any cleanup actions because @@ -3409,7 +3479,7 @@ package body Exp_Ch7 is New_Occurrence_Of (DT_Ptr, Loc)))); end Process_Tagged_Type_Declaration; - -- Start of processing for Build_Finalizer + -- Start of processing for Build_Finalizer_Helper begin Fin_Id := Empty; @@ -3559,7 +3629,7 @@ package body Exp_Ch7 is if Acts_As_Clean or else Has_Ctrl_Objs or else Has_Tagged_Types then Create_Finalizer; end if; - end Build_Finalizer; + end Build_Finalizer_Helper; -------------------------- -- Build_Finalizer_Call -- @@ -3643,6 +3713,468 @@ package body Exp_Ch7 is end Build_Finalizer_Call; --------------------- + -- Build_Finalizer -- + --------------------- + + procedure Build_Finalizer + (N : Node_Id; + Clean_Stmts : List_Id; + Mark_Id : Entity_Id; + Top_Decls : List_Id; + Defer_Abort : Boolean; + Fin_Id : out Entity_Id) + is + Def_Ent : constant Entity_Id := Unique_Defining_Entity (N); + Loc : constant Source_Ptr := Sloc (N); + + -- Declarations used for the creation of _finalization_controller + + Fin_Old_Id : Entity_Id := Empty; + Fin_Controller_Id : Entity_Id := Empty; + Fin_Controller_Decls : List_Id; + Fin_Controller_Stmts : List_Id; + Fin_Controller_Body : Node_Id := Empty; + Fin_Controller_Spec : Node_Id := Empty; + Postconditions_Call : Node_Id := Empty; + + -- Defining identifiers for local objects used to store exception info + + Raised_Post_Exception_Id : Entity_Id := Empty; + Raised_Finalization_Exception_Id : Entity_Id := Empty; + Saved_Exception_Id : Entity_Id := Empty; + + -- Start of processing for Build_Finalizer + + begin + -- Create the general finalization routine + + Build_Finalizer_Helper + (N => N, + Clean_Stmts => Clean_Stmts, + Mark_Id => Mark_Id, + Top_Decls => Top_Decls, + Defer_Abort => Defer_Abort, + Fin_Id => Fin_Id, + Finalize_Old_Only => False); + + -- When postconditions are present, expansion gets much more complicated + -- due to both the fact that they must be called after finalization and + -- that finalization of 'Old objects must occur after the postconditions + -- get checked. + + -- Additionally, exceptions between general finalization and 'Old + -- finalization must be propagated correctly and exceptions which happen + -- during _postconditions need to be saved and reraised after + -- finalization of 'Old objects. + + -- Generate: + -- + -- Postcond_Enabled := False; + -- + -- procedure _finalization_controller is + -- + -- -- Exception capturing and tracking + -- + -- Saved_Exception : Exception_Occurrence; + -- Raised_Post_Exception : Boolean := False; + -- Raised_Finalization_Exception : Boolean := False; + -- + -- -- Start of processing for _finalization_controller + -- + -- begin + -- -- Perform general finalization + -- + -- begin + -- _finalizer; + -- exception + -- when others => + -- -- Save the exception + -- + -- Raised_Finalization_Exception := True; + -- Save_Occurrence + -- (Saved_Exception, Get_Current_Excep.all); + -- end; + -- + -- -- Perform postcondition checks after general finalization, but + -- -- before finalization of 'Old related objects. + -- + -- if not Raised_Finalization_Exception then + -- begin + -- -- Re-enable postconditions and check them + -- + -- Postcond_Enabled := True; + -- _postconditions [(Result_Obj_For_Postcond[.all])]; + -- exception + -- when others => + -- -- Save the exception + -- + -- Raised_Post_Exception := True; + -- Save_Occurrence + -- (Saved_Exception, Get_Current_Excep.all); + -- end; + -- end if; + -- + -- -- Finally finalize 'Old related objects + -- + -- begin + -- _finalizer_old; + -- exception + -- when others => + -- -- Reraise the previous finalization error if there is + -- -- one. + -- + -- if Raised_Finalization_Exception then + -- Reraise_Occurrence (Saved_Exception); + -- end if; + -- + -- -- Otherwise, reraise the current one + -- + -- raise; + -- end; + -- + -- -- Reraise any saved exception + -- + -- if Raised_Finalization_Exception + -- or else Raised_Post_Exception + -- then + -- Reraise_Occurrence (Saved_Exception); + -- end if; + -- end _finalization_controller; + + if Nkind (N) = N_Subprogram_Body + and then Present (Postconditions_Proc (Def_Ent)) + then + Fin_Controller_Stmts := New_List; + Fin_Controller_Decls := New_List; + + -- Build the 'Old finalizer + + Build_Finalizer_Helper + (N => N, + Clean_Stmts => Empty_List, + Mark_Id => Mark_Id, + Top_Decls => Top_Decls, + Defer_Abort => Defer_Abort, + Fin_Id => Fin_Old_Id, + Finalize_Old_Only => True); + + -- Create local declarations for _finalization_controller needed for + -- saving exceptions. + -- + -- Generate: + -- + -- Saved_Exception : Exception_Occurrence; + -- Raised_Post_Exception : Boolean := False; + -- Raised_Finalization_Exception : Boolean := False; + + Saved_Exception_Id := Make_Temporary (Loc, 'S'); + Raised_Post_Exception_Id := Make_Temporary (Loc, 'P'); + Raised_Finalization_Exception_Id := Make_Temporary (Loc, 'F'); + + Append_List_To (Fin_Controller_Decls, New_List ( + Make_Object_Declaration (Loc, + Defining_Identifier => Saved_Exception_Id, + Object_Definition => + New_Occurrence_Of (RTE (RE_Exception_Occurrence), Loc)), + Make_Object_Declaration (Loc, + Defining_Identifier => Raised_Post_Exception_Id, + Object_Definition => New_Occurrence_Of (Standard_Boolean, Loc), + Expression => New_Occurrence_Of (Standard_False, Loc)), + Make_Object_Declaration (Loc, + Defining_Identifier => Raised_Finalization_Exception_Id, + Object_Definition => New_Occurrence_Of (Standard_Boolean, Loc), + Expression => New_Occurrence_Of (Standard_False, Loc)))); + + -- Call _finalizer and save any exceptions which occur + + -- Generate: + -- + -- begin + -- _finalizer; + -- exception + -- when others => + -- Raised_Finalization_Exception := True; + -- Save_Occurrence + -- (Saved_Exception, Get_Current_Excep.all); + -- end; + + if Present (Fin_Id) then + Append_To (Fin_Controller_Stmts, + Make_Block_Statement (Loc, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => New_List ( + Make_Procedure_Call_Statement (Loc, + Name => New_Occurrence_Of (Fin_Id, Loc))), + Exception_Handlers => New_List ( + Make_Exception_Handler (Loc, + Exception_Choices => New_List ( + Make_Others_Choice (Loc)), + Statements => New_List ( + Make_Assignment_Statement (Loc, + Name => + New_Occurrence_Of + (Raised_Finalization_Exception_Id, Loc), + Expression => + New_Occurrence_Of (Standard_True, Loc)), + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of + (RTE (RE_Save_Occurrence), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of + (Saved_Exception_Id, Loc), + Make_Explicit_Dereference (Loc, + Prefix => + Make_Function_Call (Loc, + Name => + Make_Explicit_Dereference (Loc, + Prefix => + New_Occurrence_Of + (RTE (RE_Get_Current_Excep), + Loc)))))))))))); + end if; + + -- Create the call to postconditions based on the kind of the current + -- subprogram, and the type of the Result_Obj_For_Postcond. + + -- Generate: + -- + -- _postconditions (Result_Obj_For_Postcond[.all]); + -- + -- or + -- + -- _postconditions; + + if Ekind (Def_Ent) = E_Procedure then + Postconditions_Call := + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of + (Postconditions_Proc (Def_Ent), Loc)); + else + Postconditions_Call := + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of + (Postconditions_Proc (Def_Ent), Loc), + Parameter_Associations => New_List ( + (if Is_Elementary_Type (Etype (Def_Ent)) then + New_Occurrence_Of + (Get_Result_Object_For_Postcond + (Def_Ent), Loc) + else + Make_Explicit_Dereference (Loc, + New_Occurrence_Of + (Get_Result_Object_For_Postcond + (Def_Ent), Loc))))); + end if; + + -- Call _postconditions when no general finalization exceptions have + -- occured taking care to enable the postconditions and save any + -- exception occurrences. + + -- Generate: + -- + -- if not Raised_Finalization_Exception then + -- begin + -- Postcond_Enabled := True; + -- _postconditions [(Result_Obj_For_Postcond[.all])]; + -- exception + -- when others => + -- Raised_Post_Exception := True; + -- Save_Occurrence + -- (Saved_Exception, Get_Current_Excep.all); + -- end; + -- end if; + + Append_To (Fin_Controller_Stmts, + Make_If_Statement (Loc, + Condition => + Make_Op_Not (Loc, + Right_Opnd => + New_Occurrence_Of + (Raised_Finalization_Exception_Id, Loc)), + Then_Statements => New_List ( + Make_Block_Statement (Loc, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => New_List ( + Make_Assignment_Statement (Loc, + Name => + New_Occurrence_Of + (Get_Postcond_Enabled (Def_Ent), Loc), + Expression => + New_Occurrence_Of + (Standard_True, Loc)), + Postconditions_Call), + Exception_Handlers => New_List ( + Make_Exception_Handler (Loc, + Exception_Choices => New_List ( + Make_Others_Choice (Loc)), + Statements => New_List ( + Make_Assignment_Statement (Loc, + Name => + New_Occurrence_Of + (Raised_Post_Exception_Id, Loc), + Expression => + New_Occurrence_Of (Standard_True, Loc)), + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of + (RTE (RE_Save_Occurrence), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of + (Saved_Exception_Id, Loc), + Make_Explicit_Dereference (Loc, + Prefix => + Make_Function_Call (Loc, + Name => + Make_Explicit_Dereference (Loc, + Prefix => + New_Occurrence_Of + (RTE (RE_Get_Current_Excep), + Loc)))))))))))))); + + -- Call _finalizer_old and reraise any exception that occurred during + -- initial finalization within the exception handler. Otherwise, + -- propagate the current exception. + + -- Generate: + -- + -- begin + -- _finalizer_old; + -- exception + -- when others => + -- if Raised_Finalization_Exception then + -- Reraise_Occurrence (Saved_Exception); + -- end if; + -- raise; + -- end; + + if Present (Fin_Old_Id) then + Append_To (Fin_Controller_Stmts, + Make_Block_Statement (Loc, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => New_List ( + Make_Procedure_Call_Statement (Loc, + Name => New_Occurrence_Of (Fin_Old_Id, Loc))), + Exception_Handlers => New_List ( + Make_Exception_Handler (Loc, + Exception_Choices => New_List ( + Make_Others_Choice (Loc)), + Statements => New_List ( + Make_If_Statement (Loc, + Condition => + New_Occurrence_Of + (Raised_Finalization_Exception_Id, Loc), + Then_Statements => New_List ( + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of + (RTE (RE_Reraise_Occurrence), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of + (Saved_Exception_Id, Loc))))), + Make_Raise_Statement (Loc))))))); + end if; + + -- Once finalization is complete reraise any pending exceptions + + -- Generate: + -- + -- if Raised_Post_Exception + -- or else Raised_Finalization_Exception + -- then + -- Reraise_Occurrence (Saved_Exception); + -- end if; + + Append_To (Fin_Controller_Stmts, + Make_If_Statement (Loc, + Condition => + Make_Or_Else (Loc, + Left_Opnd => + New_Occurrence_Of + (Raised_Post_Exception_Id, Loc), + Right_Opnd => + New_Occurrence_Of + (Raised_Finalization_Exception_Id, Loc)), + Then_Statements => New_List ( + Make_Procedure_Call_Statement (Loc, + Name => + New_Occurrence_Of (RTE (RE_Reraise_Occurrence), Loc), + Parameter_Associations => New_List ( + New_Occurrence_Of + (Saved_Exception_Id, Loc)))))); + + -- Make the finalization controller subprogram body and declaration. + + -- Generate: + -- procedure _finalization_controller; + -- + -- procedure _finalization_controller is + -- begin + -- [Fin_Controller_Stmts]; + -- end; + + Fin_Controller_Id := + Make_Defining_Identifier (Loc, + Chars => New_External_Name (Name_uFinalization_Controller)); + + Fin_Controller_Spec := + Make_Subprogram_Declaration (Loc, + Specification => + Make_Procedure_Specification (Loc, + Defining_Unit_Name => Fin_Controller_Id)); + + Fin_Controller_Body := + Make_Subprogram_Body (Loc, + Specification => + Make_Procedure_Specification (Loc, + Defining_Unit_Name => + Make_Defining_Identifier (Loc, Chars (Fin_Controller_Id))), + Declarations => Fin_Controller_Decls, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => Fin_Controller_Stmts)); + + -- Disable _postconditions calls which get generated before return + -- statements to delay their evaluation until after finalization. + + -- This is done by way of the local Postcond_Enabled object which is + -- initially assigned to True - we then create an assignment within + -- the subprogram's declaration to make it False and assign it back + -- to True before _postconditions is called within + -- _finalization_controller. + + -- Generate: + -- + -- Postcond_Enable := False; + + Append_To (Top_Decls, + Make_Assignment_Statement (Loc, + Name => + New_Occurrence_Of + (Get_Postcond_Enabled (Def_Ent), Loc), + Expression => + New_Occurrence_Of + (Standard_False, Loc))); + + -- Add the subprogram to the list of declarations an analyze it + + Append_To (Top_Decls, Fin_Controller_Spec); + Analyze (Fin_Controller_Spec); + Insert_After (Fin_Controller_Spec, Fin_Controller_Body); + Analyze (Fin_Controller_Body, Suppress => All_Checks); + + -- Return the finalization controller as the result Fin_Id + + Fin_Id := Fin_Controller_Id; + end if; + end Build_Finalizer; + + --------------------- -- Build_Late_Proc -- --------------------- @@ -4132,20 +4664,23 @@ package body Exp_Ch7 is procedure Reset_Scopes_To_Block_Elab_Proc (L : List_Id) is Id : Entity_Id; Stat : Node_Id; + Node : Node_Id; begin Stat := First (L); while Present (Stat) loop case Nkind (Stat) is when N_Block_Statement => - Id := Entity (Identifier (Stat)); + if Present (Identifier (Stat)) then + Id := Entity (Identifier (Stat)); - -- The Scope of this block needs to be reset to the new - -- procedure if the block contains nested subprograms. + -- The Scope of this block needs to be reset to the new + -- procedure if the block contains nested subprograms. - if Present (Id) and then Contains_Subprogram (Id) then - Set_Block_Elab_Proc; - Set_Scope (Id, Block_Elab_Proc); + if Present (Id) and then Contains_Subprogram (Id) then + Set_Block_Elab_Proc; + Set_Scope (Id, Block_Elab_Proc); + end if; end if; when N_Loop_Statement => @@ -4168,34 +4703,20 @@ package body Exp_Ch7 is when N_If_Statement => Reset_Scopes_To_Block_Elab_Proc (Then_Statements (Stat)); - Reset_Scopes_To_Block_Elab_Proc (Else_Statements (Stat)); - declare - Elif : Node_Id; - - begin - Elif := First (Elsif_Parts (Stat)); - while Present (Elif) loop - Reset_Scopes_To_Block_Elab_Proc - (Then_Statements (Elif)); - - Next (Elif); - end loop; - end; + Node := First (Elsif_Parts (Stat)); + while Present (Node) loop + Reset_Scopes_To_Block_Elab_Proc (Then_Statements (Node)); + Next (Node); + end loop; when N_Case_Statement => - declare - Alt : Node_Id; - - begin - Alt := First (Alternatives (Stat)); - while Present (Alt) loop - Reset_Scopes_To_Block_Elab_Proc (Statements (Alt)); - - Next (Alt); - end loop; - end; + Node := First (Alternatives (Stat)); + while Present (Node) loop + Reset_Scopes_To_Block_Elab_Proc (Statements (Node)); + Next (Node); + end loop; -- Reset the Scope of a subprogram occurring at the top level @@ -4817,6 +5338,12 @@ package body Exp_Ch7 is Nkind (N) = N_Block_Statement and then Present (Cleanup_Actions (N)); + Has_Postcondition : constant Boolean := + Nkind (N) = N_Subprogram_Body + and then Present + (Postconditions_Proc + (Unique_Defining_Entity (N))); + Actions_Required : constant Boolean := Requires_Cleanup_Actions (N, True) or else Is_Asynchronous_Call @@ -5031,6 +5558,34 @@ package body Exp_Ch7 is end; end if; + -- Move the _postconditions subprogram declaration and its associated + -- objects into the declarations section so that it is callable + -- within _postconditions. + + if Has_Postcondition then + declare + Decl : Node_Id; + Prev_Decl : Node_Id; + + begin + Decl := + Prev (Subprogram_Body + (Postconditions_Proc (Current_Subprogram))); + while Present (Decl) loop + Prev_Decl := Prev (Decl); + + Remove (Decl); + Prepend_To (New_Decls, Decl); + + exit when Nkind (Decl) = N_Subprogram_Declaration + and then Chars (Corresponding_Body (Decl)) + = Name_uPostconditions; + + Decl := Prev_Decl; + end loop; + end; + end if; + -- Ensure the presence of a declaration list in order to successfully -- append all original statements to it. @@ -5977,7 +6532,7 @@ package body Exp_Ch7 is begin -- Nothing to do if the scope does not manage the secondary stack or - -- does not contain meaninful actions for insertion. + -- does not contain meaningful actions for insertion. if not Manage_SS and then No (Act_Before) @@ -6201,22 +6756,6 @@ package body Exp_Ch7 is end if; end Make_Adjust_Call; - ---------------------- - -- Make_Detach_Call -- - ---------------------- - - function Make_Detach_Call (Obj_Ref : Node_Id) return Node_Id is - Loc : constant Source_Ptr := Sloc (Obj_Ref); - - begin - return - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of (RTE (RE_Detach), Loc), - Parameter_Associations => New_List ( - Unchecked_Convert_To (RTE (RE_Root_Controlled_Ptr), Obj_Ref))); - end Make_Detach_Call; - --------------- -- Make_Call -- --------------- @@ -6848,22 +7387,49 @@ package body Exp_Ch7 is Init_Call := Build_Initialization_Call; - -- Only create finalization block if there is a non-trivial - -- call to initialization. - - if Present (Init_Call) - and then Nkind (Init_Call) /= N_Null_Statement + -- Only create finalization block if there is a nontrivial call + -- to initialization or a Default_Initial_Condition check to be + -- performed. + + if (Present (Init_Call) + and then Nkind (Init_Call) /= N_Null_Statement) + or else + (Has_DIC (Comp_Typ) + and then not GNATprove_Mode + and then Present (DIC_Procedure (Comp_Typ)) + and then not Has_Null_Body (DIC_Procedure (Comp_Typ))) then - Init_Loop := - Make_Block_Statement (Loc, - Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, - Statements => New_List (Init_Call), - Exception_Handlers => New_List ( - Make_Exception_Handler (Loc, - Exception_Choices => New_List ( - Make_Others_Choice (Loc)), - Statements => New_List (Final_Block))))); + declare + Init_Stmts : constant List_Id := New_List; + + begin + if Present (Init_Call) then + Append_To (Init_Stmts, Init_Call); + end if; + + if Has_DIC (Comp_Typ) + and then Present (DIC_Procedure (Comp_Typ)) + then + Append_To + (Init_Stmts, + Build_DIC_Call (Loc, + Make_Indexed_Component (Loc, + Prefix => Make_Identifier (Loc, Name_V), + Expressions => New_References_To (Index_List, Loc)), + Comp_Typ)); + end if; + + Init_Loop := + Make_Block_Statement (Loc, + Handled_Statement_Sequence => + Make_Handled_Sequence_Of_Statements (Loc, + Statements => Init_Stmts, + Exception_Handlers => New_List ( + Make_Exception_Handler (Loc, + Exception_Choices => New_List ( + Make_Others_Choice (Loc)), + Statements => New_List (Final_Block))))); + end; Append_To (Statements (Handled_Statement_Sequence (Init_Loop)), Make_Assignment_Statement (Loc, @@ -8455,6 +9021,24 @@ package body Exp_Ch7 is elsif Is_Tagged_Type (Utyp) then Fin_Id := Find_Optional_Prim_Op (Utyp, TSS_Deep_Finalize); + -- Protected types: these also require finalization even though they + -- are not marked controlled explicitly. + + elsif Is_Protected_Type (Typ) then + -- Protected objects do not need to be finalized on restricted + -- runtimes. + + if Restricted_Profile then + return Empty; + + -- ??? Only handle the simple case for now. Will not support a record + -- or array containing protected objects. + + elsif Is_Simple_Protected_Type (Typ) then + Fin_Id := RTE (RE_Finalize_Protection); + else + raise Program_Error; + end if; else raise Program_Error; end if; @@ -8895,8 +9479,11 @@ package body Exp_Ch7 is -- The underlying type may not be present due to a missing full view. -- In this case freezing did not take place and there is no suitable -- [Deep_]Initialize primitive to call. + -- If Typ is protected then no additional processing is needed either. - if No (Utyp) then + if No (Utyp) + or else Is_Protected_Type (Typ) + then return Empty; end if; @@ -8918,7 +9505,7 @@ package body Exp_Ch7 is and then Present (Alias (Proc)) and then Is_Trivial_Subprogram (Alias (Proc))) then - return Make_Null_Statement (Loc); + return Empty; end if; -- The object reference may need another conversion depending on the diff --git a/gcc/ada/exp_ch7.ads b/gcc/ada/exp_ch7.ads index 235b75a..5f75ab6 100644 --- a/gcc/ada/exp_ch7.ads +++ b/gcc/ada/exp_ch7.ads @@ -175,13 +175,6 @@ package Exp_Ch7 is -- only the components (if any) are adjusted. Return Empty if Adjust or -- Deep_Adjust is not available, possibly due to previous errors. - function Make_Detach_Call (Obj_Ref : Node_Id) return Node_Id; - -- Create a call to unhook an object from an arbitrary list. Obj_Ref is the - -- object. Generate the following: - -- - -- Ada.Finalization.Heap_Management.Detach - -- (System.Finalization_Root.Root_Controlled_Ptr (Obj_Ref)); - function Make_Final_Call (Obj_Ref : Node_Id; Typ : Entity_Id; diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 525eee9..b055b27 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -7161,8 +7161,7 @@ package body Exp_Ch9 is if Ada_Version >= Ada_2005 and then (No (Original_Node (Ecall)) - or else Nkind (Original_Node (Ecall)) not in - N_Delay_Relative_Statement | N_Delay_Until_Statement) + or else Nkind (Original_Node (Ecall)) not in N_Delay_Statement) then Extract_Dispatching_Call (Ecall, Call_Ent, Obj, Actuals, Formals); diff --git a/gcc/ada/exp_dbug.adb b/gcc/ada/exp_dbug.adb index dc6cd26..bb0003d 100644 --- a/gcc/ada/exp_dbug.adb +++ b/gcc/ada/exp_dbug.adb @@ -648,7 +648,7 @@ package body Exp_Dbug is -- Fixed-point case: generate GNAT encodings when asked to if Is_Fixed_Point_Type (E) - and then GNAT_Encodings /= DWARF_GNAT_Encodings_Minimal + and then GNAT_Encodings = DWARF_GNAT_Encodings_All then Get_External_Name (E, True, "XF_"); Add_Real_To_Buffer (Delta_Value (E)); diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb index 1a41d79..14f25db 100644 --- a/gcc/ada/exp_disp.adb +++ b/gcc/ada/exp_disp.adb @@ -7241,7 +7241,7 @@ package body Exp_Disp is -- is used by Build_Get_Prim_Op_Address to expand dispatching calls -- through the primary dispatch table. - if UI_To_Int (DT_Entry_Count (First_Tag_Component (Typ))) = 0 then + if DT_Entry_Count (First_Tag_Component (Typ)) = 0 then Analyze_List (Result); -- Generate: diff --git a/gcc/ada/exp_fixd.adb b/gcc/ada/exp_fixd.adb index 3bb7207..4c658bb 100644 --- a/gcc/ada/exp_fixd.adb +++ b/gcc/ada/exp_fixd.adb @@ -37,7 +37,6 @@ with Sem_Eval; use Sem_Eval; with Sem_Res; use Sem_Res; with Sem_Util; use Sem_Util; with Sinfo; use Sinfo; -with Snames; use Snames; with Stand; use Stand; with Tbuild; use Tbuild; with Ttypes; use Ttypes; @@ -417,13 +416,9 @@ package body Exp_Fixd is -- The result is rounded if the target of the operation is decimal -- and Rounded_Result is set, or if the target of the operation - -- is an integer type. + -- is an integer type, as determined by Rounded_Result_Set. - if Is_Integer_Type (Etype (N)) - or else Rounded_Result_Set (N) - then - Set_Rounded_Result (Rnode); - end if; + Set_Rounded_Result (Rnode, Rounded_Result_Set (N)); -- One more check. We did the divide operation using the longer of -- the two sizes, which is reasonable. However, in the case where the @@ -1792,11 +1787,9 @@ package body Exp_Fixd is procedure Expand_Convert_Float_To_Fixed (N : Node_Id) is Expr : constant Node_Id := Expression (N); - Orig_N : constant Node_Id := Original_Node (N); Result_Type : constant Entity_Id := Etype (N); Rng_Check : constant Boolean := Do_Range_Check (N); Small : constant Ureal := Small_Value (Result_Type); - Truncate : Boolean; begin -- Optimize small = 1, where we can avoid the multiply completely @@ -1811,15 +1804,6 @@ package body Exp_Fixd is -- round. else - if Is_Decimal_Fixed_Point_Type (Result_Type) then - Truncate := - Nkind (Orig_N) /= N_Attribute_Reference - or else Get_Attribute_Id - (Attribute_Name (Orig_N)) /= Attribute_Round; - else - Truncate := False; - end if; - Set_Result (N => N, Expr => @@ -1828,7 +1812,8 @@ package body Exp_Fixd is L => Fpt_Value (Expr), R => Real_Literal (N, Ureal_1 / Small)), Rchk => Rng_Check, - Trunc => Truncate); + Trunc => Is_Decimal_Fixed_Point_Type (Result_Type) + and not Rounded_Result (N)); end if; end Expand_Convert_Float_To_Fixed; @@ -2107,13 +2092,6 @@ package body Exp_Fixd is Right : constant Node_Id := Right_Opnd (N); begin - -- Suppress expansion of a fixed-by-fixed division if the - -- operation is supported directly by the target. - - if Target_Has_Fixed_Ops (Etype (Left), Etype (Right), Etype (N)) then - return; - end if; - if Etype (Left) = Universal_Real then Do_Divide_Universal_Fixed (N); @@ -2277,13 +2255,6 @@ package body Exp_Fixd is -- Start of processing for Expand_Multiply_Fixed_By_Fixed_Giving_Fixed begin - -- Suppress expansion of a fixed-by-fixed multiplication if the - -- operation is supported directly by the target. - - if Target_Has_Fixed_Ops (Etype (Left), Etype (Right), Etype (N)) then - return; - end if; - if Etype (Left) = Universal_Real then if Nkind (Left) = N_Real_Literal then Do_Multiply_Fixed_Universal (N, Left => Right, Right => Left); diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb index b79d30a..0cb483b 100644 --- a/gcc/ada/exp_imgv.adb +++ b/gcc/ada/exp_imgv.adb @@ -880,7 +880,7 @@ package body Exp_Imgv is -- xx = [Long_Long_[Long_]]Unsigned -- For floating-point types - -- xx = Real + -- xx = [Long_[Long_]]Float -- For decimal fixed-point types, typ'Value (X) expands into @@ -1008,10 +1008,10 @@ package body Exp_Imgv is then Vid := RE_Value_Fixed128; else - Vid := RE_Value_Real; + Vid := RE_Value_Long_Float; end if; - if Vid /= RE_Value_Real then + if Vid /= RE_Value_Long_Float then Append_To (Args, Make_Integer_Literal (Loc, -Norm_Num (Small_Value (Rtyp)))); @@ -1031,7 +1031,27 @@ package body Exp_Imgv is end; elsif Is_Floating_Point_Type (Rtyp) then - Vid := RE_Value_Real; + -- Short_Float and Float are the same type for GNAT + + if Rtyp = Standard_Short_Float or else Rtyp = Standard_Float then + Vid := RE_Value_Float; + + -- If Long_Float and Long_Long_Float are the same type, then use the + -- implementation of the former, which is faster and more accurate. + + elsif Rtyp = Standard_Long_Float + or else (Rtyp = Standard_Long_Long_Float + and then + Standard_Long_Long_Float_Size = Standard_Long_Float_Size) + then + Vid := RE_Value_Long_Float; + + elsif Rtyp = Standard_Long_Long_Float then + Vid := RE_Value_Long_Long_Float; + + else + raise Program_Error; + end if; -- Only other possibility is user-defined enumeration type diff --git a/gcc/ada/exp_intr.adb b/gcc/ada/exp_intr.adb index 7fc00c7..3be039b 100644 --- a/gcc/ada/exp_intr.adb +++ b/gcc/ada/exp_intr.adb @@ -29,7 +29,6 @@ with Einfo; use Einfo; with Elists; use Elists; with Expander; use Expander; with Exp_Atag; use Exp_Atag; -with Exp_Ch4; use Exp_Ch4; with Exp_Ch7; use Exp_Ch7; with Exp_Ch11; use Exp_Ch11; with Exp_Code; use Exp_Code; @@ -857,7 +856,7 @@ package body Exp_Intr is --------------------------- procedure Expand_Unc_Conversion (N : Node_Id; E : Entity_Id) is - Func : constant Entity_Id := Entity (Name (N)); + Func : constant Entity_Id := Entity (Name (N)); Conv : Node_Id; Ftyp : Entity_Id; Ttyp : Entity_Id; @@ -908,12 +907,7 @@ package body Exp_Intr is end if; Rewrite (N, Unchecked_Convert_To (Ttyp, Conv)); - Set_Etype (N, Ttyp); - Set_Analyzed (N); - - if Nkind (N) = N_Unchecked_Type_Conversion then - Expand_N_Unchecked_Type_Conversion (N); - end if; + Analyze_And_Resolve (N, Ttyp); end Expand_Unc_Conversion; ----------------------------- diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb index 07a05a5..c90409b 100644 --- a/gcc/ada/exp_pakd.adb +++ b/gcc/ada/exp_pakd.adb @@ -1256,8 +1256,15 @@ package body Exp_Pakd is -- array type on Obj to get lost. So we save the type of Obj, and -- make sure it is reset properly. - New_Lhs := Duplicate_Subexpr (Obj, Name_Req => True); - New_Rhs := Duplicate_Subexpr_No_Checks (Obj); + declare + T : constant Entity_Id := Etype (Obj); + begin + New_Lhs := Duplicate_Subexpr (Obj, Name_Req => True); + New_Rhs := Duplicate_Subexpr_No_Checks (Obj); + Set_Etype (Obj, T); + Set_Etype (New_Lhs, T); + Set_Etype (New_Rhs, T); + end; -- First we deal with the "and" diff --git a/gcc/ada/exp_prag.adb b/gcc/ada/exp_prag.adb index 9a227c6..d616fb6 100644 --- a/gcc/ada/exp_prag.adb +++ b/gcc/ada/exp_prag.adb @@ -1581,6 +1581,12 @@ package body Exp_Prag is Expression => Pref)); end if; + -- Mark the temporary as coming from a 'Old reference + + if Present (Temp) then + Set_Stores_Attribute_Old_Prefix (Temp); + end if; + -- Ensure that the prefix is valid if Validity_Checks_On and then Validity_Check_Operands then diff --git a/gcc/ada/exp_tss.adb b/gcc/ada/exp_tss.adb index 40943fb..c5f167a 100644 --- a/gcc/ada/exp_tss.adb +++ b/gcc/ada/exp_tss.adb @@ -522,46 +522,4 @@ package body Exp_Tss is return Empty; end TSS; - function TSS (Typ : Entity_Id; Nam : Name_Id) return Entity_Id is - FN : constant Node_Id := Freeze_Node (Typ); - Elmt : Elmt_Id; - Subp : Entity_Id; - - begin - if No (FN) then - return Empty; - - elsif No (TSS_Elist (FN)) then - return Empty; - - else - Elmt := First_Elmt (TSS_Elist (FN)); - while Present (Elmt) loop - if Chars (Node (Elmt)) = Nam then - Subp := Node (Elmt); - - -- For stream subprograms, the TSS entity may be a renaming- - -- as-body of an already generated entity. Use that one rather - -- the one introduced by the renaming, which is an artifact of - -- current stream handling. - - if Nkind (Parent (Parent (Subp))) = - N_Subprogram_Renaming_Declaration - and then - Present (Corresponding_Spec (Parent (Parent (Subp)))) - then - return Corresponding_Spec (Parent (Parent (Subp))); - else - return Subp; - end if; - - else - Next_Elmt (Elmt); - end if; - end loop; - end if; - - return Empty; - end TSS; - end Exp_Tss; diff --git a/gcc/ada/exp_tss.ads b/gcc/ada/exp_tss.ads index 59234ff..ca35f5a 100644 --- a/gcc/ada/exp_tss.ads +++ b/gcc/ada/exp_tss.ads @@ -170,7 +170,6 @@ package Exp_Tss is -- be explicitly frozen, so the N_Freeze_Entity node always exists). function TSS (Typ : Entity_Id; Nam : TSS_Name_Type) return Entity_Id; - function TSS (Typ : Entity_Id; Nam : Name_Id) return Entity_Id; -- Finds the TSS with the given name associated with the given type. -- If no such TSS exists, then Empty is returned. diff --git a/gcc/ada/exp_unst.adb b/gcc/ada/exp_unst.adb index e0f2bd1..ee2cf81 100644 --- a/gcc/ada/exp_unst.adb +++ b/gcc/ada/exp_unst.adb @@ -251,13 +251,8 @@ package body Exp_Unst is ----------------------- function Needs_Fat_Pointer (E : Entity_Id) return Boolean is - Typ : Entity_Id := Etype (E); - + Typ : constant Entity_Id := Get_Fullest_View (Etype (E)); begin - if Is_Private_Type (Typ) and then Present (Full_View (Typ)) then - Typ := Full_View (Typ); - end if; - return Is_Array_Type (Typ) and then not Is_Constrained (Typ); end Needs_Fat_Pointer; @@ -898,6 +893,8 @@ package body Exp_Unst is DT : Boolean := False; Formal : Node_Id; Subp : Entity_Id; + F_Type : Entity_Id; + A_Type : Entity_Id; begin if Nkind (Name (N)) = N_Explicit_Dereference then @@ -908,12 +905,16 @@ package body Exp_Unst is Actual := First_Actual (N); Formal := First_Formal_With_Extras (Subp); + while Present (Actual) loop - if Is_Array_Type (Etype (Formal)) - and then not Is_Constrained (Etype (Formal)) - and then Is_Constrained (Etype (Actual)) + F_Type := Get_Fullest_View (Etype (Formal)); + A_Type := Get_Fullest_View (Etype (Actual)); + + if Is_Array_Type (F_Type) + and then not Is_Constrained (F_Type) + and then Is_Constrained (A_Type) then - Check_Static_Type (Etype (Actual), Empty, DT); + Check_Static_Type (A_Type, Empty, DT); end if; Next_Actual (Actual); diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 9e08e9c..cf4059a 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -60,10 +60,8 @@ with Sem_Util; use Sem_Util; with Snames; use Snames; with Stand; use Stand; with Stringt; use Stringt; -with Targparm; use Targparm; with Tbuild; use Tbuild; with Ttypes; use Ttypes; -with Urealp; use Urealp; with Validsw; use Validsw; with GNAT.HTable; @@ -3994,9 +3992,11 @@ package body Exp_Util is Out_Present => True, Parameter_Type => New_Occurrence_Of (Etype (Subp), Loc))); - -- The new procedure declaration is inserted immediately after the - -- function declaration. The processing in Build_Procedure_Body_Form - -- relies on this order. + -- The new procedure declaration is inserted before the function + -- declaration. The processing in Build_Procedure_Body_Form relies on + -- this order. Note that we insert before because in the case of a + -- function body with no separate spec, we do not want to insert the + -- new spec after the body which will later get rewritten. Proc_Decl := Make_Subprogram_Declaration (Loc, @@ -4006,7 +4006,7 @@ package body Exp_Util is Make_Defining_Identifier (Loc, Chars (Subp)), Parameter_Specifications => Proc_Formals)); - Insert_After_And_Analyze (Unit_Declaration_Node (Subp), Proc_Decl); + Insert_Before_And_Analyze (Unit_Declaration_Node (Subp), Proc_Decl); -- Entity of procedure must remain invisible so that it does not -- overload subsequent references to the original function. @@ -6477,9 +6477,7 @@ package body Exp_Util is Loc : constant Source_Ptr := Sloc (Var); Ent : constant Entity_Id := Entity (Var); - procedure Process_Current_Value_Condition - (N : Node_Id; - S : Boolean); + procedure Process_Current_Value_Condition (N : Node_Id; S : Boolean); -- N is an expression which holds either True (S = True) or False (S = -- False) in the condition. This procedure digs out the expression and -- if it refers to Ent, sets Op and Val appropriately. @@ -6540,6 +6538,7 @@ package body Exp_Util is -- Recursively process AND and AND THEN branches Process_Current_Value_Condition (Left_Opnd (Cond), True); + pragma Assert (Op'Valid); if Op /= N_Empty then return; @@ -7899,26 +7898,6 @@ package body Exp_Util is end if; end Integer_Type_For; - ---------------------------- - -- Is_All_Null_Statements -- - ---------------------------- - - function Is_All_Null_Statements (L : List_Id) return Boolean is - Stm : Node_Id; - - begin - Stm := First (L); - while Present (Stm) loop - if Nkind (Stm) /= N_Null_Statement then - return False; - end if; - - Next (Stm); - end loop; - - return True; - end Is_All_Null_Statements; - -------------------------------------------------- -- Is_Displacement_Of_Object_Or_Function_Result -- -------------------------------------------------- @@ -9391,25 +9370,6 @@ package body Exp_Util is end if; end Kill_Dead_Code; - ------------------------ - -- Known_Non_Negative -- - ------------------------ - - function Known_Non_Negative (Opnd : Node_Id) return Boolean is - begin - if Is_OK_Static_Expression (Opnd) and then Expr_Value (Opnd) >= 0 then - return True; - - else - declare - Lo : constant Node_Id := Type_Low_Bound (Etype (Opnd)); - begin - return - Is_OK_Static_Expression (Lo) and then Expr_Value (Lo) >= 0; - end; - end if; - end Known_Non_Negative; - ----------------------------- -- Make_CW_Equivalent_Type -- ----------------------------- @@ -10978,20 +10938,6 @@ package body Exp_Util is return Res; end New_Class_Wide_Subtype; - -------------------------------- - -- Non_Limited_Designated_Type -- - --------------------------------- - - function Non_Limited_Designated_Type (T : Entity_Id) return Entity_Id is - Desig : constant Entity_Id := Designated_Type (T); - begin - if Has_Non_Limited_View (Desig) then - return Non_Limited_View (Desig); - else - return Desig; - end if; - end Non_Limited_Designated_Type; - ----------------------------------- -- OK_To_Do_Constant_Replacement -- ----------------------------------- @@ -11798,8 +11744,8 @@ package body Exp_Util is -- If this is a packed array component or a selected component with a -- nonstandard representation, we cannot generate a reference because -- the component may be unaligned, so we must use a renaming and this - -- renaming must be handled by the front end, as the back end may balk - -- at the nonstandard representation (see Exp_Ch2.Expand_Renaming). + -- renaming is handled by the front end, as the back end may balk at + -- the nonstandard representation (see Evaluation_Required in Exp_Ch8). elsif Nkind (Exp) in N_Indexed_Component | N_Selected_Component and then Has_Non_Standard_Rep (Etype (Prefix (Exp))) @@ -11813,8 +11759,7 @@ package body Exp_Util is Subtype_Mark => New_Occurrence_Of (Exp_Type, Loc), Name => Relocate_Node (Exp))); - -- For an expression that denotes a name, we can use a renaming scheme - -- that is handled by the back end, instead of the front end as above. + -- For an expression that denotes a name, we can use a renaming scheme. -- This is needed for correctness in the case of a volatile object of -- a nonvolatile type because the Make_Reference call of the "default" -- approach would generate an illegal access value (an access value @@ -11837,8 +11782,6 @@ package body Exp_Util is Subtype_Mark => New_Occurrence_Of (Exp_Type, Loc), Name => Relocate_Node (Exp))); - Set_Is_Renaming_Of_Object (Def_Id, False); - -- Avoid generating a variable-sized temporary, by generating the -- reference just for the function call. The transformation could be -- refined to apply only when the array component is constrained by a @@ -12249,8 +12192,7 @@ package body Exp_Util is -- and view swaps, the parent type is taken from the formal -- parameter of the subprogram being called. - if Nkind (Context) in - N_Function_Call | N_Procedure_Call_Statement + if Nkind (Context) in N_Subprogram_Call and then No (Type_Map.Get (Entity (Name (Context)))) then New_Ref := @@ -13846,88 +13788,6 @@ package body Exp_Util is end if; end Small_Integer_Type_For; - -------------------------- - -- Target_Has_Fixed_Ops -- - -------------------------- - - Integer_Sized_Small : Ureal; - -- Set to 2.0 ** -(Integer'Size - 1) the first time that this function is - -- called (we don't want to compute it more than once). - - Long_Integer_Sized_Small : Ureal; - -- Set to 2.0 ** -(Long_Integer'Size - 1) the first time that this function - -- is called (we don't want to compute it more than once) - - First_Time_For_THFO : Boolean := True; - -- Set to False after first call (if Fractional_Fixed_Ops_On_Target) - - function Target_Has_Fixed_Ops - (Left_Typ : Entity_Id; - Right_Typ : Entity_Id; - Result_Typ : Entity_Id) return Boolean - is - function Is_Fractional_Type (Typ : Entity_Id) return Boolean; - -- Return True if the given type is a fixed-point type with a small - -- value equal to 2 ** (-(T'Object_Size - 1)) and whose values have - -- an absolute value less than 1.0. This is currently limited to - -- fixed-point types that map to Integer or Long_Integer. - - ------------------------ - -- Is_Fractional_Type -- - ------------------------ - - function Is_Fractional_Type (Typ : Entity_Id) return Boolean is - begin - if Esize (Typ) = Standard_Integer_Size then - return Small_Value (Typ) = Integer_Sized_Small; - - elsif Esize (Typ) = Standard_Long_Integer_Size then - return Small_Value (Typ) = Long_Integer_Sized_Small; - - else - return False; - end if; - end Is_Fractional_Type; - - -- Start of processing for Target_Has_Fixed_Ops - - begin - -- Return False if Fractional_Fixed_Ops_On_Target is false - - if not Fractional_Fixed_Ops_On_Target then - return False; - end if; - - -- Here the target has Fractional_Fixed_Ops, if first time, compute - -- standard constants used by Is_Fractional_Type. - - if First_Time_For_THFO then - First_Time_For_THFO := False; - - Integer_Sized_Small := - UR_From_Components - (Num => Uint_1, - Den => UI_From_Int (Standard_Integer_Size - 1), - Rbase => 2); - - Long_Integer_Sized_Small := - UR_From_Components - (Num => Uint_1, - Den => UI_From_Int (Standard_Long_Integer_Size - 1), - Rbase => 2); - end if; - - -- Return True if target supports fixed-by-fixed multiply/divide for - -- fractional fixed-point types (see Is_Fractional_Type) and the operand - -- and result types are equivalent fractional types. - - return Is_Fractional_Type (Base_Type (Left_Typ)) - and then Is_Fractional_Type (Base_Type (Right_Typ)) - and then Is_Fractional_Type (Base_Type (Result_Typ)) - and then Esize (Left_Typ) = Esize (Right_Typ) - and then Esize (Left_Typ) = Esize (Result_Typ); - end Target_Has_Fixed_Ops; - ------------------- -- Type_Map_Hash -- ------------------- diff --git a/gcc/ada/exp_util.ads b/gcc/ada/exp_util.ads index 202ac3c..96d3894 100644 --- a/gcc/ada/exp_util.ads +++ b/gcc/ada/exp_util.ads @@ -756,11 +756,6 @@ package Exp_Util is -- Return a suitable standard integer type containing at least S bits and -- of the signedness given by Uns. - function Is_All_Null_Statements (L : List_Id) return Boolean; - -- Return True if all the items of the list are N_Null_Statement nodes. - -- False otherwise. True for an empty list. It is an error to call this - -- routine with No_List as the argument. - function Is_Displacement_Of_Object_Or_Function_Result (Obj_Id : Entity_Id) return Boolean; -- Determine whether Obj_Id is a source entity that has been initialized by @@ -870,11 +865,6 @@ package Exp_Util is -- list. If Warn is True, a warning will be output at the start of N -- indicating the deletion of the code. - function Known_Non_Negative (Opnd : Node_Id) return Boolean; - -- Given a node for a subexpression, determines if it represents a value - -- that cannot possibly be negative, and if so returns True. A value of - -- False means that it is not known if the value is positive or negative. - function Make_Invariant_Call (Expr : Node_Id) return Node_Id; -- Generate a call to the Invariant_Procedure associated with the type of -- expression Expr. Expr is passed as an actual parameter in the call. @@ -955,11 +945,6 @@ package Exp_Util is -- consist of constants, when the object has a nontrivial initialization -- or is controlled. - function Non_Limited_Designated_Type (T : Entity_Id) return Entity_Id; - -- An anonymous access type may designate a limited view. Check whether - -- non-limited view is available during expansion, to examine components - -- or other characteristics of the full type. - function OK_To_Do_Constant_Replacement (E : Entity_Id) return Boolean; -- This function is used when testing whether or not to replace a reference -- to entity E by a known constant value. Such replacement must be done @@ -1178,15 +1163,6 @@ package Exp_Util is -- Return the smallest standard integer type containing at least S bits and -- of the signedness given by Uns. - function Target_Has_Fixed_Ops - (Left_Typ : Entity_Id; - Right_Typ : Entity_Id; - Result_Typ : Entity_Id) return Boolean; - -- Returns True if and only if the target machine has direct support - -- for fixed-by-fixed multiplications and divisions for the given - -- operand and result types. This is called in package Exp_Fixd to - -- determine whether to expand such operations. - function Type_May_Have_Bit_Aligned_Components (Typ : Entity_Id) return Boolean; -- Determines if Typ is a composite type that has within it (looking down diff --git a/gcc/ada/expect.c b/gcc/ada/expect.c index 718886d..30c5b8e 100644 --- a/gcc/ada/expect.c +++ b/gcc/ada/expect.c @@ -39,6 +39,7 @@ #include "system.h" #endif +#include "adaint.h" #include <sys/types.h> #ifdef __MINGW32__ @@ -78,7 +79,6 @@ #include <process.h> #include <signal.h> #include <io.h> -#include "adaint.h" #include "mingw32.h" int @@ -360,7 +360,11 @@ __gnat_pipe (int *fd) int __gnat_expect_fork (void) { - return fork (); + int pid = fork(); + if (pid == 0) { + __gnat_in_child_after_fork = 1; + } + return pid; } void diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 098b117..8dc8a22 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -5642,7 +5642,7 @@ package body Freeze is Has_Rep_Pragma (E, Name_Atomic_Components) then Error_Msg_N - ("stand alone atomic constant must be " & + ("standalone atomic constant must be " & "imported (RM C.6(13))", E); elsif Has_Rep_Pragma (E, Name_Volatile) @@ -5650,7 +5650,7 @@ package body Freeze is Has_Rep_Pragma (E, Name_Volatile_Components) then Error_Msg_N - ("stand alone volatile constant must be " & + ("standalone volatile constant must be " & "imported (RM C.6(13))", E); end if; end if; @@ -9225,10 +9225,12 @@ package body Freeze is Check_Overriding_Indicator (E, Empty, Is_Primitive (E)); end if; + Retype := Get_Fullest_View (Etype (E)); + if Transform_Function_Array and then Nkind (Parent (E)) = N_Function_Specification - and then Is_Array_Type (Etype (E)) - and then Is_Constrained (Etype (E)) + and then Is_Array_Type (Retype) + and then Is_Constrained (Retype) and then not Is_Unchecked_Conversion_Instance (E) and then not Rewritten_For_C (E) then diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 4ab26d3..ae7a52f 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -8479,15 +8479,16 @@ add_decl_expr (tree gnu_decl, Node_Id gnat_node) MARK_VISITED (DECL_SIZE_UNIT (gnu_decl)); MARK_VISITED (DECL_INITIAL (gnu_decl)); } - /* In any case, we have to deal with our own TYPE_ADA_SIZE field. */ - else if (TREE_CODE (gnu_decl) == TYPE_DECL - && RECORD_OR_UNION_TYPE_P (type) - && !TYPE_FAT_POINTER_P (type)) - MARK_VISITED (TYPE_ADA_SIZE (type)); } else add_stmt_with_node (gnu_stmt, gnat_node); + /* Mark our TYPE_ADA_SIZE field now since it will not be gimplified. */ + if (TREE_CODE (gnu_decl) == TYPE_DECL + && RECORD_OR_UNION_TYPE_P (type) + && !TYPE_FAT_POINTER_P (type)) + MARK_VISITED (TYPE_ADA_SIZE (type)); + /* If this is a variable and an initializer is attached to it, it must be valid for the context. Similar to init_const in create_var_decl. */ if (TREE_CODE (gnu_decl) == VAR_DECL @@ -10611,7 +10612,7 @@ make_alias_for_thunk (tree target) return alias; } -/* Create the covariant part of the {GNAT,GNU}_THUNK. */ +/* Create the local covariant part of {GNAT,GNU}_THUNK. */ static tree make_covariant_thunk (Entity_Id gnat_thunk, tree gnu_thunk) @@ -10622,6 +10623,11 @@ make_covariant_thunk (Entity_Id gnat_thunk, tree gnu_thunk) gnu_name, TREE_TYPE (gnu_thunk)); DECL_ARGUMENTS (gnu_cv_thunk) = copy_list (DECL_ARGUMENTS (gnu_thunk)); + for (tree param_decl = DECL_ARGUMENTS (gnu_cv_thunk); + param_decl; + param_decl = DECL_CHAIN (param_decl)) + DECL_CONTEXT (param_decl) = gnu_cv_thunk; + DECL_RESULT (gnu_cv_thunk) = copy_node (DECL_RESULT (gnu_thunk)); DECL_CONTEXT (DECL_RESULT (gnu_cv_thunk)) = gnu_cv_thunk; @@ -10629,7 +10635,6 @@ make_covariant_thunk (Entity_Id gnat_thunk, tree gnu_thunk) DECL_CONTEXT (gnu_cv_thunk) = DECL_CONTEXT (gnu_thunk); TREE_READONLY (gnu_cv_thunk) = TREE_READONLY (gnu_thunk); TREE_THIS_VOLATILE (gnu_cv_thunk) = TREE_THIS_VOLATILE (gnu_thunk); - TREE_PUBLIC (gnu_cv_thunk) = TREE_PUBLIC (gnu_thunk); DECL_ARTIFICIAL (gnu_cv_thunk) = 1; return gnu_cv_thunk; @@ -10759,6 +10764,12 @@ maybe_make_gnu_thunk (Entity_Id gnat_thunk, tree gnu_thunk) cgraph_node *target_node = cgraph_node::get_create (gnu_target); + /* We may also need to create an alias for the target in order to make + the call local, depending on the linkage of the target. */ + tree gnu_alias = use_alias_for_thunk_p (gnu_target) + ? make_alias_for_thunk (gnu_target) + : gnu_target; + /* If the return type of the target is a controlling type, then we need both an usual this thunk and a covariant thunk in this order: @@ -10771,17 +10782,11 @@ maybe_make_gnu_thunk (Entity_Id gnat_thunk, tree gnu_thunk) tree gnu_cv_thunk = make_covariant_thunk (gnat_thunk, gnu_thunk); target_node->create_thunk (gnu_cv_thunk, gnu_target, false, - fixed_offset, 0, 0, - NULL_TREE, gnu_target); + NULL_TREE, gnu_alias); - gnu_target = gnu_cv_thunk; + gnu_alias = gnu_target = gnu_cv_thunk; } - /* We may also need to create an alias for the target in order to make - the call local, depending on the linkage of the target. */ - tree gnu_alias = use_alias_for_thunk_p (gnu_target) - ? make_alias_for_thunk (gnu_target) - : gnu_target; - target_node->create_thunk (gnu_thunk, gnu_target, true, fixed_offset, virtual_value, indirect_offset, virtual_offset, gnu_alias); diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 494f60e..c503bfb 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -1571,7 +1571,7 @@ maybe_pad_type (tree type, tree size, unsigned int align, { tree packable_type = make_packable_type (type, true, align); if (TYPE_MODE (packable_type) != BLKmode - && align >= TYPE_ALIGN (packable_type)) + && compare_tree_int (TYPE_SIZE (packable_type), align) <= 0) type = packable_type; } @@ -3521,6 +3521,12 @@ create_subprog_decl (tree name, tree asm_name, tree type, tree param_decl_list, void finish_subprog_decl (tree decl, tree asm_name, tree type) { + /* DECL_ARGUMENTS is set by the caller, but not its context. */ + for (tree param_decl = DECL_ARGUMENTS (decl); + param_decl; + param_decl = DECL_CHAIN (param_decl)) + DECL_CONTEXT (param_decl) = decl; + tree result_decl = build_decl (DECL_SOURCE_LOCATION (decl), RESULT_DECL, NULL_TREE, TREE_TYPE (type)); @@ -3566,8 +3572,6 @@ finish_subprog_decl (tree decl, tree asm_name, tree type) void begin_subprog_body (tree subprog_decl) { - tree param_decl; - announce_function (subprog_decl); /* This function is being defined. */ @@ -3583,10 +3587,6 @@ begin_subprog_body (tree subprog_decl) /* Enter a new binding level and show that all the parameters belong to this function. */ gnat_pushlevel (); - - for (param_decl = DECL_ARGUMENTS (subprog_decl); param_decl; - param_decl = DECL_CHAIN (param_decl)) - DECL_CONTEXT (param_decl) = subprog_decl; } /* Finish translating the current subprogram and set its BODY. */ diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb index 65da307..0318194 100644 --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -1020,15 +1020,6 @@ procedure Gnat1drv is -- by the backend where possible). Sem_Ch13.Validate_Address_Clauses; - - -- Validate independence pragmas (again using values annotated by the - -- back end for component layout where possible) but only for non-GCC - -- back ends, as this is done a priori for GCC back ends. - -- ??? We use to test for AAMP_On_Target which is now gone, consider - -- - -- if AAMP_On_Target then - -- Sem_Ch13.Validate_Independence; - -- end if; end Post_Compilation_Validation_Checks; ----------------------------------- diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 401d625..417ee34 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -21,11 +21,11 @@ @copying @quotation -GNAT Reference Manual , Nov 20, 2020 +GNAT Reference Manual , Dec 11, 2020 AdaCore -Copyright @copyright{} 2008-2020, Free Software Foundation +Copyright @copyright{} 2008-2021, Free Software Foundation @end quotation @end copying @@ -8159,8 +8159,8 @@ package Math_Functions is function Sqrt (Arg : Float) return Float; pragma Test_Case (Name => "Test 1", Mode => Nominal, - Requires => Arg < 10000, - Ensures => Sqrt'Result < 10); + Requires => Arg < 10000.0, + Ensures => Sqrt'Result < 10.0); ... end Math_Functions; @end example diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 14e9271..360177b 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -21,11 +21,11 @@ @copying @quotation -GNAT User's Guide for Native Platforms , Nov 20, 2020 +GNAT User's Guide for Native Platforms , Dec 11, 2020 AdaCore -Copyright @copyright{} 2008-2020, Free Software Foundation +Copyright @copyright{} 2008-2021, Free Software Foundation @end quotation @end copying @@ -381,7 +381,7 @@ Performance Considerations * Optimization Levels:: * Debugging Optimized Code:: * Inlining of Subprograms:: -* Floating_Point_Operations:: +* Floating Point Operations:: * Vectorization of loops:: * Other Optimization Switches:: * Optimization and Strict Aliasing:: @@ -11507,7 +11507,7 @@ not included in this check. @emph{Suppress warnings on redefinition of names in standard.} -This switch activates warnings for declarations that declare a name that +This switch disables warnings for declarations that declare a name that is defined in package Standard. @end table @@ -19652,7 +19652,7 @@ some guidelines on debugging optimized code. * Optimization Levels:: * Debugging Optimized Code:: * Inlining of Subprograms:: -* Floating_Point_Operations:: +* Floating Point Operations:: * Vectorization of loops:: * Other Optimization Switches:: * Optimization and Strict Aliasing:: @@ -20001,7 +20001,7 @@ Note that if you use @code{-g} you can then use the @code{strip} program on the resulting executable, which removes both debugging information and global symbols. -@node Inlining of Subprograms,Floating_Point_Operations,Debugging Optimized Code,Performance Considerations +@node Inlining of Subprograms,Floating Point Operations,Debugging Optimized Code,Performance Considerations @anchor{gnat_ugn/gnat_and_program_execution id32}@anchor{185}@anchor{gnat_ugn/gnat_and_program_execution inlining-of-subprograms}@anchor{100} @subsubsection Inlining of Subprograms @@ -20140,9 +20140,9 @@ automatically assume that @code{-O3} is better than @code{-O2}, and indeed you should use @code{-O3} only if tests show that it actually improves performance for your program. -@node Floating_Point_Operations,Vectorization of loops,Inlining of Subprograms,Performance Considerations +@node Floating Point Operations,Vectorization of loops,Inlining of Subprograms,Performance Considerations @anchor{gnat_ugn/gnat_and_program_execution floating-point-operations}@anchor{186}@anchor{gnat_ugn/gnat_and_program_execution id33}@anchor{187} -@subsubsection Floating_Point_Operations +@subsubsection Floating Point Operations @geindex Floating-Point Operations @@ -20188,7 +20188,7 @@ Note that the ABI has the same form for both floating-point models, so it is permissible to mix units compiled with and without these switches. -@node Vectorization of loops,Other Optimization Switches,Floating_Point_Operations,Performance Considerations +@node Vectorization of loops,Other Optimization Switches,Floating Point Operations,Performance Considerations @anchor{gnat_ugn/gnat_and_program_execution id34}@anchor{188}@anchor{gnat_ugn/gnat_and_program_execution vectorization-of-loops}@anchor{189} @subsubsection Vectorization of loops diff --git a/gcc/ada/gnatvsn.ads b/gcc/ada/gnatvsn.ads index ddd5b9f..bbfa9f5 100644 --- a/gcc/ada/gnatvsn.ads +++ b/gcc/ada/gnatvsn.ads @@ -39,7 +39,7 @@ package Gnatvsn is -- Note: Makefile.in uses the library version string to construct the -- soname value. - Current_Year : constant String := "2020"; + Current_Year : constant String := "2021"; -- Used in printing copyright messages Verbose_Library_Version : constant String := "GNAT Lib v" & Library_Version; diff --git a/gcc/ada/impunit.adb b/gcc/ada/impunit.adb index 2cde430..e7262cd 100644 --- a/gcc/ada/impunit.adb +++ b/gcc/ada/impunit.adb @@ -999,7 +999,7 @@ package body Impunit is for J in Non_Imp_File_Names_12'Range loop if Name_Buffer (1 .. 8) = Non_Imp_File_Names_12 (J).Fname then - return Non_Imp_File_Names_95 (J).RMdef + return Non_Imp_File_Names_12 (J).RMdef and then Ada_Version >= Ada_2012; end if; end loop; diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb index c24763a..bb4d97c 100644 --- a/gcc/ada/inline.adb +++ b/gcc/ada/inline.adb @@ -1945,10 +1945,11 @@ package body Inline is ------------------- procedure Cannot_Inline - (Msg : String; - N : Node_Id; - Subp : Entity_Id; - Is_Serious : Boolean := False) + (Msg : String; + N : Node_Id; + Subp : Entity_Id; + Is_Serious : Boolean := False; + Suppress_Info : Boolean := False) is begin -- In GNATprove mode, inlining is the technical means by which the @@ -1971,7 +1972,7 @@ package body Inline is New_Msg (1 .. Len2) := "info: no contextual analysis of"; New_Msg (Len2 + 1 .. Msg'Length + Len2 - Len1) := Msg (Msg'First + Len1 .. Msg'Last); - Cannot_Inline (New_Msg, N, Subp, Is_Serious); + Cannot_Inline (New_Msg, N, Subp, Is_Serious, Suppress_Info); return; end; end if; @@ -1992,14 +1993,14 @@ package body Inline is then null; - -- In GNATprove mode, issue a warning when -gnatd_f is set, and - -- indicate that the subprogram is not always inlined by setting - -- flag Is_Inlined_Always to False. + -- In GNATprove mode, issue an info message when -gnatd_f is set and + -- Suppress_Info is False, and indicate that the subprogram is not + -- always inlined by setting flag Is_Inlined_Always to False. elsif GNATprove_Mode then Set_Is_Inlined_Always (Subp, False); - if Debug_Flag_Underscore_F then + if Debug_Flag_Underscore_F and not Suppress_Info then Error_Msg_NE (Msg, N, Subp); end if; @@ -2022,14 +2023,14 @@ package body Inline is Error_Msg_NE (Msg (Msg'First .. Msg'Last - 1), N, Subp); - -- In GNATprove mode, issue a warning when -gnatd_f is set, and - -- indicate that the subprogram is not always inlined by setting - -- flag Is_Inlined_Always to False. + -- In GNATprove mode, issue an info message when -gnatd_f is set and + -- Suppress_Info is False, and indicate that the subprogram is not + -- always inlined by setting flag Is_Inlined_Always to False. elsif GNATprove_Mode then Set_Is_Inlined_Always (Subp, False); - if Debug_Flag_Underscore_F then + if Debug_Flag_Underscore_F and not Suppress_Info then Error_Msg_NE (Msg, N, Subp); end if; diff --git a/gcc/ada/inline.ads b/gcc/ada/inline.ads index 51eab9c..6790f15 100644 --- a/gcc/ada/inline.ads +++ b/gcc/ada/inline.ads @@ -154,15 +154,17 @@ package Inline is -- its treatment of the subprogram. procedure Cannot_Inline - (Msg : String; - N : Node_Id; - Subp : Entity_Id; - Is_Serious : Boolean := False); + (Msg : String; + N : Node_Id; + Subp : Entity_Id; + Is_Serious : Boolean := False; + Suppress_Info : Boolean := False); -- This procedure is called if the node N, an instance of a call to -- subprogram Subp, cannot be inlined. Msg is the message to be issued, -- which ends with ? (it does not end with ?p?, this routine takes care of - -- the need to change ? to ?p?). The behavior of this routine depends on - -- the value of Back_End_Inlining: + -- the need to change ? to ?p?). Suppress_Info is set to True to prevent + -- issuing an info message in GNATprove mode. The behavior of this routine + -- depends on the value of Back_End_Inlining: -- -- * If Back_End_Inlining is not set (ie. legacy frontend inlining model) -- then if Subp has a pragma Always_Inlined, then an error message is diff --git a/gcc/ada/lib-load.adb b/gcc/ada/lib-load.adb index 75226d3..f8d632a 100644 --- a/gcc/ada/lib-load.adb +++ b/gcc/ada/lib-load.adb @@ -646,7 +646,7 @@ package body Lib.Load is else Error_Msg_File_1 := Fname; Error_Msg_Unit_1 := Uname_Actual; - Error_Msg ("File{ does not contain unit$", Load_Msg_Sloc); + Error_Msg ("file{ does not contain unit$", Load_Msg_Sloc); end if; Write_Dependency_Chain; diff --git a/gcc/ada/lib-writ.adb b/gcc/ada/lib-writ.adb index f5b9e30..16449e8 100644 --- a/gcc/ada/lib-writ.adb +++ b/gcc/ada/lib-writ.adb @@ -1724,7 +1724,7 @@ package body Lib.Writ is -- scope - Write_Info_Name (Scope (IS_Id)); + Write_Info_Name (IS_Scope (IS_Id)); Write_Info_Char (' '); -- line diff --git a/gcc/ada/libgnarl/s-tporft.adb b/gcc/ada/libgnarl/s-tporft.adb index 9d99eac..634eae6 100644 --- a/gcc/ada/libgnarl/s-tporft.adb +++ b/gcc/ada/libgnarl/s-tporft.adb @@ -53,6 +53,7 @@ begin Local_ATCB.Common.LL.Thread := Thread; Local_ATCB.Common.Current_Priority := System.Priority'First; + Local_ATCB.Common.Global_Task_Lock_Nesting := 0; Specific.Set (Local_ATCB'Unchecked_Access); -- It is now safe to use an allocator diff --git a/gcc/ada/libgnat/a-cbdlli.adb b/gcc/ada/libgnat/a-cbdlli.adb index a0c356d..948b706 100644 --- a/gcc/ada/libgnat/a-cbdlli.adb +++ b/gcc/ada/libgnat/a-cbdlli.adb @@ -199,23 +199,19 @@ is procedure Append (Container : in out List; New_Item : Element_Type; - Count : Count_Type := 1) + Count : Count_Type) is begin Insert (Container, No_Element, New_Item, Count); end Append; - --------------- - -- Append_One -- - --------------- - - procedure Append_One + procedure Append (Container : in out List; New_Item : Element_Type) is begin Insert (Container, No_Element, New_Item, 1); - end Append_One; + end Append; ------------ -- Assign -- diff --git a/gcc/ada/libgnat/a-cbdlli.ads b/gcc/ada/libgnat/a-cbdlli.ads index 183c01e..4574aa6 100644 --- a/gcc/ada/libgnat/a-cbdlli.ads +++ b/gcc/ada/libgnat/a-cbdlli.ads @@ -57,7 +57,7 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Append_One); + Add_Unnamed => Append); pragma Preelaborable_Initialization (List); type Cursor is private; @@ -151,9 +151,9 @@ is procedure Append (Container : in out List; New_Item : Element_Type; - Count : Count_Type := 1); + Count : Count_Type); - procedure Append_One + procedure Append (Container : in out List; New_Item : Element_Type); diff --git a/gcc/ada/libgnat/a-cbsyqu.ads b/gcc/ada/libgnat/a-cbsyqu.ads index 225db21..4037d84 100644 --- a/gcc/ada/libgnat/a-cbsyqu.ads +++ b/gcc/ada/libgnat/a-cbsyqu.ads @@ -71,6 +71,14 @@ is -- Need proper heap data structure here ??? + -- We suppress warnings here, which might otherwise be triggered + -- by the box initialization of the Elements array below. This + -- initialization is needed to preserve constraints, such as + -- discriminant values, that the actual for Element_Type might + -- carry. + + pragma Warnings (Off); + type Element_Array is array (Count_Type range <>) of Queue_Interfaces.Element_Type; @@ -78,7 +86,7 @@ is First, Last : Count_Type := 0; Length : Count_Type := 0; Max_Length : Count_Type := 0; - Elements : Element_Array (1 .. Capacity); + Elements : Element_Array (1 .. Capacity) := (others => <>); end record; end Implementation; diff --git a/gcc/ada/libgnat/a-cdlili.adb b/gcc/ada/libgnat/a-cdlili.adb index f07190e..08c29f2 100644 --- a/gcc/ada/libgnat/a-cdlili.adb +++ b/gcc/ada/libgnat/a-cdlili.adb @@ -158,23 +158,19 @@ is procedure Append (Container : in out List; New_Item : Element_Type; - Count : Count_Type := 1) + Count : Count_Type) is begin Insert (Container, No_Element, New_Item, Count); end Append; - --------------- - -- Append_One -- - --------------- - - procedure Append_One + procedure Append (Container : in out List; New_Item : Element_Type) is begin Insert (Container, No_Element, New_Item, 1); - end Append_One; + end Append; ------------ -- Assign -- diff --git a/gcc/ada/libgnat/a-cdlili.ads b/gcc/ada/libgnat/a-cdlili.ads index 35c4352..53de78b 100644 --- a/gcc/ada/libgnat/a-cdlili.ads +++ b/gcc/ada/libgnat/a-cdlili.ads @@ -58,7 +58,7 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Append_One); + Add_Unnamed => Append); pragma Preelaborable_Initialization (List); @@ -154,9 +154,9 @@ is procedure Append (Container : in out List; New_Item : Element_Type; - Count : Count_Type := 1); + Count : Count_Type); - procedure Append_One + procedure Append (Container : in out List; New_Item : Element_Type); diff --git a/gcc/ada/libgnat/a-cidlli.adb b/gcc/ada/libgnat/a-cidlli.adb index a62338f..79df5a9 100644 --- a/gcc/ada/libgnat/a-cidlli.adb +++ b/gcc/ada/libgnat/a-cidlli.adb @@ -179,23 +179,19 @@ is procedure Append (Container : in out List; New_Item : Element_Type; - Count : Count_Type := 1) + Count : Count_Type) is begin Insert (Container, No_Element, New_Item, Count); end Append; - --------------- - -- Append_One -- - --------------- - - procedure Append_One + procedure Append (Container : in out List; New_Item : Element_Type) is begin Insert (Container, No_Element, New_Item, 1); - end Append_One; + end Append; ------------ -- Assign -- diff --git a/gcc/ada/libgnat/a-cidlli.ads b/gcc/ada/libgnat/a-cidlli.ads index 5e63cf2..c75e5af 100644 --- a/gcc/ada/libgnat/a-cidlli.ads +++ b/gcc/ada/libgnat/a-cidlli.ads @@ -57,7 +57,7 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Append_One); + Add_Unnamed => Append); pragma Preelaborable_Initialization (List); @@ -147,9 +147,9 @@ is procedure Append (Container : in out List; New_Item : Element_Type; - Count : Count_Type := 1); + Count : Count_Type); - procedure Append_One + procedure Append (Container : in out List; New_Item : Element_Type); diff --git a/gcc/ada/libgnat/a-cobove.adb b/gcc/ada/libgnat/a-cobove.adb index 0408741..8a8b279 100644 --- a/gcc/ada/libgnat/a-cobove.adb +++ b/gcc/ada/libgnat/a-cobove.adb @@ -321,9 +321,13 @@ package body Ada.Containers.Bounded_Vectors is -- Append -- ------------ - procedure Append (Container : in out Vector; New_Item : Vector) is + procedure Append + (Container : in out Vector; + New_Item : Element_Type; + Count : Count_Type) + is begin - if New_Item.Is_Empty then + if Count = 0 then return; end if; @@ -331,16 +335,16 @@ package body Ada.Containers.Bounded_Vectors is raise Constraint_Error with "vector is already at its maximum length"; end if; - Container.Insert (Container.Last + 1, New_Item); + Container.Insert (Container.Last + 1, New_Item, Count); end Append; - procedure Append - (Container : in out Vector; - New_Item : Element_Type; - Count : Count_Type := 1) - is + ------------------- + -- Append_Vector -- + ------------------- + + procedure Append_Vector (Container : in out Vector; New_Item : Vector) is begin - if Count = 0 then + if New_Item.Is_Empty then return; end if; @@ -348,19 +352,19 @@ package body Ada.Containers.Bounded_Vectors is raise Constraint_Error with "vector is already at its maximum length"; end if; - Container.Insert (Container.Last + 1, New_Item, Count); - end Append; + Container.Insert_Vector (Container.Last + 1, New_Item); + end Append_Vector; - ---------------- - -- Append_One -- - ---------------- + ------------ + -- Append -- + ------------ - procedure Append_One (Container : in out Vector; - New_Item : Element_Type) + procedure Append (Container : in out Vector; + New_Item : Element_Type) is begin Insert (Container, Last_Index (Container) + 1, New_Item, 1); - end Append_One; + end Append; -------------- -- Capacity -- @@ -1243,7 +1247,7 @@ package body Ada.Containers.Bounded_Vectors is end if; end Insert; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Extended_Index; New_Item : Vector) @@ -1309,9 +1313,9 @@ package body Ada.Containers.Bounded_Vectors is Container.Elements (B + N - Src'Length .. B + N - 1) := Src; end; - end Insert; + end Insert_Vector; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Cursor; New_Item : Vector) @@ -1343,10 +1347,10 @@ package body Ada.Containers.Bounded_Vectors is Index := Before.Index; end if; - Insert (Container, Index, New_Item); - end Insert; + Insert_Vector (Container, Index, New_Item); + end Insert_Vector; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Cursor; New_Item : Vector; @@ -1387,10 +1391,10 @@ package body Ada.Containers.Bounded_Vectors is Index := Before.Index; end if; - Insert (Container, Index, New_Item); + Insert_Vector (Container, Index, New_Item); Position := Cursor'(Container'Unchecked_Access, Index); - end Insert; + end Insert_Vector; procedure Insert (Container : in out Vector; @@ -2028,23 +2032,24 @@ package body Ada.Containers.Bounded_Vectors is -- Prepend -- ------------- - procedure Prepend (Container : in out Vector; New_Item : Vector) is - begin - Insert (Container, Index_Type'First, New_Item); - end Prepend; - procedure Prepend (Container : in out Vector; New_Item : Element_Type; Count : Count_Type := 1) is begin - Insert (Container, - Index_Type'First, - New_Item, - Count); + Insert (Container, Index_Type'First, New_Item, Count); end Prepend; + -------------------- + -- Prepend_Vector -- + -------------------- + + procedure Prepend_Vector (Container : in out Vector; New_Item : Vector) is + begin + Insert_Vector (Container, Index_Type'First, New_Item); + end Prepend_Vector; + -------------- -- Previous -- -------------- diff --git a/gcc/ada/libgnat/a-cobove.ads b/gcc/ada/libgnat/a-cobove.ads index ab4ce4e..324ca84 100644 --- a/gcc/ada/libgnat/a-cobove.ads +++ b/gcc/ada/libgnat/a-cobove.ads @@ -61,7 +61,7 @@ package Ada.Containers.Bounded_Vectors is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Append_One, + Add_Unnamed => Append, New_Indexed => New_Vector, Assign_Indexed => Replace_Element); @@ -190,24 +190,43 @@ package Ada.Containers.Bounded_Vectors is procedure Move (Target : in out Vector; Source : in out Vector); - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Extended_Index; New_Item : Vector); procedure Insert (Container : in out Vector; + Before : Extended_Index; + New_Item : Vector) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Insert_Vector + (Container : in out Vector; Before : Cursor; New_Item : Vector); procedure Insert (Container : in out Vector; Before : Cursor; + New_Item : Vector) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Insert_Vector + (Container : in out Vector; + Before : Cursor; New_Item : Vector; Position : out Cursor); procedure Insert (Container : in out Vector; + Before : Cursor; + New_Item : Vector; + Position : out Cursor) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Insert + (Container : in out Vector; Before : Extended_Index; New_Item : Element_Type; Count : Count_Type := 1); @@ -236,27 +255,36 @@ package Ada.Containers.Bounded_Vectors is Position : out Cursor; Count : Count_Type := 1); - procedure Prepend + procedure Prepend_Vector (Container : in out Vector; New_Item : Vector); procedure Prepend (Container : in out Vector; + New_Item : Vector) renames Prepend_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Prepend + (Container : in out Vector; New_Item : Element_Type; Count : Count_Type := 1); - procedure Append + procedure Append_Vector (Container : in out Vector; New_Item : Vector); procedure Append (Container : in out Vector; + New_Item : Vector) renames Append_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Append + (Container : in out Vector; New_Item : Element_Type; - Count : Count_Type := 1); + Count : Count_Type); - procedure Append_One (Container : in out Vector; - New_Item : Element_Type); - -- Ada_2020 aggregate operation. + procedure Append (Container : in out Vector; + New_Item : Element_Type); procedure Insert_Space (Container : in out Vector; diff --git a/gcc/ada/libgnat/a-coinve.adb b/gcc/ada/libgnat/a-coinve.adb index 10711ff..051aa71 100644 --- a/gcc/ada/libgnat/a-coinve.adb +++ b/gcc/ada/libgnat/a-coinve.adb @@ -67,8 +67,8 @@ is begin return Result : Vector do Reserve_Capacity (Result, Length (Left) + Length (Right)); - Append (Result, Left); - Append (Result, Right); + Append_Vector (Result, Left); + Append_Vector (Result, Right); end return; end "&"; @@ -76,7 +76,7 @@ is begin return Result : Vector do Reserve_Capacity (Result, Length (Left) + 1); - Append (Result, Left); + Append_Vector (Result, Left); Append (Result, Right); end return; end "&"; @@ -86,7 +86,7 @@ is return Result : Vector do Reserve_Capacity (Result, 1 + Length (Right)); Append (Result, Left); - Append (Result, Right); + Append_Vector (Result, Right); end return; end "&"; @@ -176,25 +176,25 @@ is end; end Adjust; - ------------ - -- Append -- - ------------ + ------------------- + -- Append_Vector -- + ------------------- - procedure Append (Container : in out Vector; New_Item : Vector) is + procedure Append_Vector (Container : in out Vector; New_Item : Vector) is begin if Is_Empty (New_Item) then return; elsif Checks and then Container.Last = Index_Type'Last then raise Constraint_Error with "vector is already at its maximum length"; else - Insert (Container, Container.Last + 1, New_Item); + Insert_Vector (Container, Container.Last + 1, New_Item); end if; - end Append; + end Append_Vector; procedure Append (Container : in out Vector; New_Item : Element_Type; - Count : Count_Type := 1) + Count : Count_Type) is begin -- In the general case, we pass the buck to Insert, but for efficiency, @@ -229,16 +229,16 @@ is end if; end Append; - ---------------- - -- Append_One -- - ---------------- + ------------ + -- Append -- + ------------ - procedure Append_One (Container : in out Vector; + procedure Append (Container : in out Vector; New_Item : Element_Type) is begin Insert (Container, Last_Index (Container) + 1, New_Item, 1); - end Append_One; + end Append; ---------------------- -- Append_Slow_Path -- @@ -269,7 +269,7 @@ is return; else Target.Clear; - Target.Append (Source); + Target.Append_Vector (Source); end if; end Assign; @@ -1619,7 +1619,7 @@ is end; end Insert; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Extended_Index; New_Item : Vector) @@ -1766,9 +1766,9 @@ is Dst_Index := Dst_Index + 1; end loop; end; - end Insert; + end Insert_Vector; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Cursor; New_Item : Vector) @@ -1798,10 +1798,10 @@ is Index := Before.Index; end if; - Insert (Container, Index, New_Item); - end Insert; + Insert_Vector (Container, Index, New_Item); + end Insert_Vector; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Cursor; New_Item : Vector; @@ -1838,10 +1838,10 @@ is Index := Before.Index; end if; - Insert (Container, Index, New_Item); + Insert_Vector (Container, Index, New_Item); Position := (Container'Unrestricted_Access, Index); - end Insert; + end Insert_Vector; procedure Insert (Container : in out Vector; @@ -2559,11 +2559,6 @@ is -- Prepend -- ------------- - procedure Prepend (Container : in out Vector; New_Item : Vector) is - begin - Insert (Container, Index_Type'First, New_Item); - end Prepend; - procedure Prepend (Container : in out Vector; New_Item : Element_Type; @@ -2573,6 +2568,15 @@ is Insert (Container, Index_Type'First, New_Item, Count); end Prepend; + ------------- + -- Prepend_Vector -- + ------------- + + procedure Prepend_Vector (Container : in out Vector; New_Item : Vector) is + begin + Insert_Vector (Container, Index_Type'First, New_Item); + end Prepend_Vector; + -------------- -- Previous -- -------------- diff --git a/gcc/ada/libgnat/a-coinve.ads b/gcc/ada/libgnat/a-coinve.ads index 593b63e..c9364c7 100644 --- a/gcc/ada/libgnat/a-coinve.ads +++ b/gcc/ada/libgnat/a-coinve.ads @@ -64,7 +64,7 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty_Vector, - Add_Unnamed => Append_One, + Add_Unnamed => Append, New_Indexed => New_Vector, Assign_Indexed => Replace_Element); @@ -195,24 +195,43 @@ is procedure Move (Target : in out Vector; Source : in out Vector); - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Extended_Index; New_Item : Vector); procedure Insert (Container : in out Vector; + Before : Extended_Index; + New_Item : Vector) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Insert_Vector + (Container : in out Vector; Before : Cursor; New_Item : Vector); procedure Insert (Container : in out Vector; Before : Cursor; + New_Item : Vector) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Insert_Vector + (Container : in out Vector; + Before : Cursor; New_Item : Vector; Position : out Cursor); procedure Insert (Container : in out Vector; + Before : Cursor; + New_Item : Vector; + Position : out Cursor) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Insert + (Container : in out Vector; Before : Extended_Index; New_Item : Element_Type; Count : Count_Type := 1); @@ -230,26 +249,36 @@ is Position : out Cursor; Count : Count_Type := 1); - procedure Prepend + procedure Prepend_Vector (Container : in out Vector; New_Item : Vector); procedure Prepend (Container : in out Vector; + New_Item : Vector) renames Prepend_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Prepend + (Container : in out Vector; New_Item : Element_Type; Count : Count_Type := 1); - procedure Append + procedure Append_Vector (Container : in out Vector; New_Item : Vector); procedure Append (Container : in out Vector; + New_Item : Vector) renames Append_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Append + (Container : in out Vector; New_Item : Element_Type; - Count : Count_Type := 1); + Count : Count_Type); - procedure Append_One (Container : in out Vector; - New_Item : Element_Type); + procedure Append (Container : in out Vector; + New_Item : Element_Type); procedure Insert_Space (Container : in out Vector; diff --git a/gcc/ada/libgnat/a-convec.adb b/gcc/ada/libgnat/a-convec.adb index a43be97..fec72cc 100644 --- a/gcc/ada/libgnat/a-convec.adb +++ b/gcc/ada/libgnat/a-convec.adb @@ -64,8 +64,8 @@ is begin return Result : Vector do Reserve_Capacity (Result, Length (Left) + Length (Right)); - Append (Result, Left); - Append (Result, Right); + Append_Vector (Result, Left); + Append_Vector (Result, Right); end return; end "&"; @@ -73,7 +73,7 @@ is begin return Result : Vector do Reserve_Capacity (Result, Length (Left) + 1); - Append (Result, Left); + Append_Vector (Result, Left); Append (Result, Right); end return; end "&"; @@ -83,7 +83,7 @@ is return Result : Vector do Reserve_Capacity (Result, 1 + Length (Right)); Append (Result, Left); - Append (Result, Right); + Append_Vector (Result, Right); end return; end "&"; @@ -167,21 +167,10 @@ is -- Append -- ------------ - procedure Append (Container : in out Vector; New_Item : Vector) is - begin - if Is_Empty (New_Item) then - return; - elsif Checks and then Container.Last = Index_Type'Last then - raise Constraint_Error with "vector is already at its maximum length"; - else - Insert (Container, Container.Last + 1, New_Item); - end if; - end Append; - procedure Append (Container : in out Vector; New_Item : Element_Type; - Count : Count_Type := 1) + Count : Count_Type) is begin -- In the general case, we pass the buck to Insert, but for efficiency, @@ -210,16 +199,31 @@ is end if; end Append; - ---------------- - -- Append_One -- - ---------------- + ------------------- + -- Append_Vector -- + ------------------- + + procedure Append_Vector (Container : in out Vector; New_Item : Vector) is + begin + if Is_Empty (New_Item) then + return; + elsif Checks and then Container.Last = Index_Type'Last then + raise Constraint_Error with "vector is already at its maximum length"; + else + Insert_Vector (Container, Container.Last + 1, New_Item); + end if; + end Append_Vector; + + ------------ + -- Append -- + ------------ - procedure Append_One (Container : in out Vector; - New_Item : Element_Type) + procedure Append (Container : in out Vector; + New_Item : Element_Type) is begin Insert (Container, Last_Index (Container) + 1, New_Item, 1); - end Append_One; + end Append; ---------------------- -- Append_Slow_Path -- @@ -250,7 +254,7 @@ is return; else Target.Clear; - Target.Append (Source); + Target.Append_Vector (Source); end if; end Assign; @@ -1310,7 +1314,7 @@ is end; end Insert; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Extended_Index; New_Item : Vector) @@ -1429,9 +1433,9 @@ is Container.Elements.EA (K .. J) := Src; end; - end Insert; + end Insert_Vector; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Cursor; New_Item : Vector) @@ -1461,10 +1465,10 @@ is Index := Before.Index; end if; - Insert (Container, Index, New_Item); - end Insert; + Insert_Vector (Container, Index, New_Item); + end Insert_Vector; - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Cursor; New_Item : Vector; @@ -1501,10 +1505,10 @@ is Index := Before.Index; end if; - Insert (Container, Index, New_Item); + Insert_Vector (Container, Index, New_Item); Position := (Container'Unrestricted_Access, Index); - end Insert; + end Insert_Vector; procedure Insert (Container : in out Vector; @@ -2266,11 +2270,6 @@ is -- Prepend -- ------------- - procedure Prepend (Container : in out Vector; New_Item : Vector) is - begin - Insert (Container, Index_Type'First, New_Item); - end Prepend; - procedure Prepend (Container : in out Vector; New_Item : Element_Type; @@ -2280,6 +2279,15 @@ is Insert (Container, Index_Type'First, New_Item, Count); end Prepend; + -------------------- + -- Prepend_Vector -- + -------------------- + + procedure Prepend_Vector (Container : in out Vector; New_Item : Vector) is + begin + Insert_Vector (Container, Index_Type'First, New_Item); + end Prepend_Vector; + -------------- -- Previous -- -------------- diff --git a/gcc/ada/libgnat/a-convec.ads b/gcc/ada/libgnat/a-convec.ads index f969e6f..1d257a0 100644 --- a/gcc/ada/libgnat/a-convec.ads +++ b/gcc/ada/libgnat/a-convec.ads @@ -95,7 +95,7 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Append_One, + Add_Unnamed => Append, New_Indexed => New_Vector, Assign_Indexed => Replace_Element); @@ -334,59 +334,80 @@ is with Pre => First = Index_Type'First; -- Ada_2020 aggregate operation. - procedure Insert + procedure Insert_Vector (Container : in out Vector; Before : Extended_Index; New_Item : Vector); -- If Before is not in the range First_Index (Container) .. Last_Index -- (Container) + 1, then Constraint_Error is propagated. If - -- Length(New_Item) is 0, then Insert does nothing. Otherwise, it computes - -- the new length NL as the sum of the current length and Length + -- Length(New_Item) is 0, then Insert_Vector does nothing. Otherwise, it + -- computes the new length NL as the sum of the current length and Length -- (New_Item); if the value of Last appropriate for length NL would be -- greater than Index_Type'Last then Constraint_Error is propagated. -- -- If the current vector capacity is less than NL, Reserve_Capacity - -- (Container, NL) is called to increase the vector capacity. Then Insert - -- slides the elements in the range Before .. Last_Index (Container) up by - -- Length(New_Item) positions, and then copies the elements of New_Item to - -- the positions starting at Before. Any exception raised during the - -- copying is propagated. + -- (Container, NL) is called to increase the vector capacity. Then + -- Insert_Vector slides the elements in the range Before .. Last_Index + -- (Container) up by Length(New_Item) positions, and then copies the + -- elements of New_Item to the positions starting at Before. Any exception + -- raised during the copying is propagated. procedure Insert (Container : in out Vector; + Before : Extended_Index; + New_Item : Vector) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Insert_Vector + (Container : in out Vector; Before : Cursor; New_Item : Vector); -- If Before is not No_Element, and does not designate an element in -- Container, then Program_Error is propagated. Otherwise, if - -- Length(New_Item) is 0, then Insert does nothing. If Before is - -- No_Element, then the call is equivalent to Insert (Container, Last_Index - -- (Container) + 1, New_Item); otherwise the call is equivalent to Insert - -- (Container, To_Index (Before), New_Item); + -- Length(New_Item) is 0, then Insert_Vector does nothing. If Before is + -- No_Element, then the call is equivalent to Insert_Vector (Container, + -- Last_Index (Container) + 1, New_Item); otherwise the call is equivalent + -- to Insert_Vector (Container, To_Index (Before), New_Item); procedure Insert (Container : in out Vector; Before : Cursor; + New_Item : Vector) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Insert_Vector + (Container : in out Vector; + Before : Cursor; New_Item : Vector; Position : out Cursor); -- If Before is not No_Element, and does not designate an element in -- Container, then Program_Error is propagated. If Before equals -- No_Element, then let T be Last_Index (Container) + 1; otherwise, let T - -- be To_Index (Before). Insert (Container, T, New_Item) is called, and - -- then Position is set to To_Cursor (Container, T). + -- be To_Index (Before). Insert_Vector (Container, T, New_Item) is called, + -- and then Position is set to To_Cursor (Container, T). + + procedure Insert + (Container : in out Vector; + Before : Cursor; + New_Item : Vector; + Position : out Cursor) renames Insert_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. procedure Insert (Container : in out Vector; Before : Extended_Index; New_Item : Element_Type; Count : Count_Type := 1); - -- Equivalent to Insert (Container, Before, To_Vector (New_Item, Count)); + -- Equivalent to: + -- Insert_Vector (Container, Before, To_Vector (New_Item, Count)); procedure Insert (Container : in out Vector; Before : Cursor; New_Item : Element_Type; Count : Count_Type := 1); - -- Equivalent to Insert (Container, Before, To_Vector (New_Item, Count)); + -- Equivalent to: + -- Insert_Vector (Container, Before, To_Vector (New_Item, Count)); procedure Insert (Container : in out Vector; @@ -395,7 +416,7 @@ is Position : out Cursor; Count : Count_Type := 1); -- Equivalent to - -- Insert (Container, Before, To_Vector (New_Item, Count), Position); + -- Insert_Vector (Container, Before, To_Vector (New_Item, Count), Position) procedure Insert (Container : in out Vector; @@ -425,33 +446,42 @@ is -- be To_Index (Before). Insert (Container, T, Count) is called, and then -- Position is set to To_Cursor (Container, T). - procedure Prepend + procedure Prepend_Vector (Container : in out Vector; New_Item : Vector); -- Equivalent to Insert (Container, First_Index (Container), New_Item). procedure Prepend (Container : in out Vector; + New_Item : Vector) renames Prepend_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Prepend + (Container : in out Vector; New_Item : Element_Type; Count : Count_Type := 1); -- Equivalent to Insert (Container, First_Index (Container), New_Item, -- Count). - procedure Append + procedure Append_Vector (Container : in out Vector; New_Item : Vector); -- Equivalent to Insert (Container, Last_Index (Container) + 1, New_Item). procedure Append (Container : in out Vector; + New_Item : Vector) renames Append_Vector; + -- Retained for now for compatibility; AI12-0400 will remove this. + + procedure Append + (Container : in out Vector; New_Item : Element_Type; - Count : Count_Type := 1); + Count : Count_Type); -- Equivalent to Insert (Container, Last_Index (Container) + 1, New_Item, -- Count). - procedure Append_One (Container : in out Vector; - New_Item : Element_Type); - -- Ada_2020 aggregate operation. + procedure Append (Container : in out Vector; + New_Item : Element_Type); procedure Insert_Space (Container : in out Vector; diff --git a/gcc/ada/libgnat/a-strfix.ads b/gcc/ada/libgnat/a-strfix.ads index 7d6e121..4214157 100644 --- a/gcc/ada/libgnat/a-strfix.ads +++ b/gcc/ada/libgnat/a-strfix.ads @@ -108,10 +108,57 @@ package Ada.Strings.Fixed with SPARK_Mode is Going : Direction := Forward; Mapping : Maps.Character_Mapping_Function) return Natural with - Pre => + Pre => Pattern'Length /= 0 and then (if Source'Length /= 0 then From in Source'Range), - Global => null; + + Post => Index'Result in 0 | Source'Range, + Contract_Cases => + + -- If no slice in the considered range of Source matches Pattern, + -- then 0 is returned. + + ((for all J in Source'Range => + (if (if Going = Forward + then J in From .. Source'Last - Pattern'Length + 1 + else J <= From - Pattern'Length + 1) + then Translate (Source (J .. J - 1 + Pattern'Length), Mapping) + /= Pattern)) + => + Index'Result = 0, + + -- Otherwise, a valid index is returned + + others + => + + -- The result is in the considered range of Source + + (if Going = Forward + then Index'Result in From .. Source'Last - Pattern'Length + 1 + else Index'Result in Source'First .. From - Pattern'Length + 1) + + -- The slice beginning at the returned index matches Pattern + + and then + Translate (Source (Index'Result + .. Index'Result - 1 + Pattern'Length), + Mapping) + = Pattern + + -- The result is the smallest or largest index which satisfies the + -- matching, respectively when Going = Forward and + -- Going = Backwards. + + and then + (for all J in Source'Range => + (if (if Going = Forward + then J in From .. Index'Result - 1 + else J - 1 in Index'Result .. From - Pattern'Length) + then Translate (Source (J .. J - 1 + Pattern'Length), + Mapping) + /= Pattern))), + Global => null; pragma Ada_05 (Index); function Index @@ -121,10 +168,57 @@ package Ada.Strings.Fixed with SPARK_Mode is Going : Direction := Forward; Mapping : Maps.Character_Mapping := Maps.Identity) return Natural with - Pre => + Pre => Pattern'Length /= 0 and then (if Source'Length /= 0 then From in Source'Range), - Global => null; + + Post => Index'Result in 0 | Source'Range, + Contract_Cases => + + -- If no slice in the considered range of Source matches Pattern, + -- then 0 is returned. + + ((for all J in Source'Range => + (if (if Going = Forward + then J in From .. Source'Last - Pattern'Length + 1 + else J <= From - Pattern'Length + 1) + then Translate (Source (J .. J - 1 + Pattern'Length), Mapping) + /= Pattern)) + => + Index'Result = 0, + + -- Otherwise, a valid index is returned + + others + => + + -- The result is in the considered range of Source + + (if Going = Forward + then Index'Result in From .. Source'Last - Pattern'Length + 1 + else Index'Result in Source'First .. From - Pattern'Length + 1) + + -- The slice beginning at the returned index matches Pattern + + and then + Translate (Source (Index'Result + .. Index'Result - 1 + Pattern'Length), + Mapping) + = Pattern + + -- The result is the smallest or largest index which satisfies the + -- matching, respectively when Going = Forward and + -- Going = Backwards. + + and then + (for all J in Source'Range => + (if (if Going = Forward + then J in From .. Index'Result - 1 + else J - 1 in Index'Result .. From - Pattern'Length) + then Translate (Source (J .. J - 1 + Pattern'Length), + Mapping) + /= Pattern))), + Global => null; pragma Ada_05 (Index); -- Each Index function searches, starting from From, for a slice of @@ -146,8 +240,53 @@ package Ada.Strings.Fixed with SPARK_Mode is Going : Direction := Forward; Mapping : Maps.Character_Mapping := Maps.Identity) return Natural with - Pre => Pattern'Length > 0, - Global => null; + Pre => Pattern'Length > 0, + + Post => Index'Result in 0 | Source'Range, + Contract_Cases => + + -- If Source is empty, or if no slice of Source matches Pattern, then + -- 0 is returned. + + (Source'Length = 0 + or else + (for all J in Source'First .. Source'Last - Pattern'Length + 1 => + Translate (Source (J .. J - 1 + Pattern'Length), Mapping) + /= Pattern) + => + Index'Result = 0, + + -- Otherwise, a valid index is returned + + others + => + + -- The result is in the considered range of Source + + Index'Result in Source'First .. Source'Last - Pattern'Length + 1 + + -- The slice beginning at the returned index matches Pattern + + and then + Translate (Source (Index'Result + .. Index'Result - 1 + Pattern'Length), + Mapping) + = Pattern + + -- The result is the smallest or largest index which satisfies the + -- matching, respectively when Going = Forward and + -- Going = Backwards. + + and then + (for all J in Source'Range => + (if (if Going = Forward + then J <= Index'Result - 1 + else J - 1 in Index'Result + .. Source'Last - Pattern'Length) + then Translate (Source (J .. J - 1 + Pattern'Length), + Mapping) + /= Pattern))), + Global => null; function Index (Source : String; @@ -155,8 +294,53 @@ package Ada.Strings.Fixed with SPARK_Mode is Going : Direction := Forward; Mapping : Maps.Character_Mapping_Function) return Natural with - Pre => Pattern'Length /= 0, - Global => null; + Pre => Pattern'Length > 0, + + Post => Index'Result in 0 | Source'Range, + Contract_Cases => + + -- If Source is empty, or if no slice of Source matches Pattern, then + -- 0 is returned. + + (Source'Length = 0 + or else + (for all J in Source'First .. Source'Last - Pattern'Length + 1 => + Translate (Source (J .. J - 1 + Pattern'Length), Mapping) + /= Pattern) + => + Index'Result = 0, + + -- Otherwise, a valid index is returned + + others + => + + -- The result is in the considered range of Source + + Index'Result in Source'First .. Source'Last - Pattern'Length + 1 + + -- The slice beginning at the returned index matches Pattern + + and then + Translate (Source (Index'Result + .. Index'Result - 1 + Pattern'Length), + Mapping) + = Pattern + + -- The result is the smallest or largest index which satisfies the + -- matching, respectively when Going = Forward and + -- Going = Backwards. + + and then + (for all J in Source'Range => + (if (if Going = Forward + then J <= Index'Result - 1 + else J - 1 in Index'Result + .. Source'Last - Pattern'Length) + then Translate (Source (J .. J - 1 + Pattern'Length), + Mapping) + /= Pattern))), + Global => null; -- If Going = Forward, returns: -- @@ -172,7 +356,44 @@ package Ada.Strings.Fixed with SPARK_Mode is Test : Membership := Inside; Going : Direction := Forward) return Natural with - Global => null; + Post => Index'Result in 0 | Source'Range, + Contract_Cases => + + -- If no character of Source satisfies the property Test on Set, then + -- 0 is returned. + + ((for all C of Source => + (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set)) + => + Index'Result = 0, + + -- Otherwise, a index in the range of Source is returned + + others + => + + -- The result is in the range of Source + + Index'Result in Source'Range + + -- The character at the returned index satisfies the property + -- Test on Set + + and then + (Test = Inside) + = Ada.Strings.Maps.Is_In (Source (Index'Result), Set) + + -- The result is the smallest or largest index which satisfies the + -- property, respectively when Going = Forward and + -- Going = Backwards. + + and then + (for all J in Source'Range => + (if J /= Index'Result + and then (J < Index'Result) = (Going = Forward) + then (Test = Inside) + /= Ada.Strings.Maps.Is_In (Source (J), Set)))), + Global => null; function Index (Source : String; @@ -181,8 +402,53 @@ package Ada.Strings.Fixed with SPARK_Mode is Test : Membership := Inside; Going : Direction := Forward) return Natural with - Pre => (if Source'Length /= 0 then From in Source'Range), - Global => null; + Pre => (if Source'Length /= 0 then From in Source'Range), + + Post => Index'Result in 0 | Source'Range, + Contract_Cases => + + -- If no character in the considered slice of Source satisfies the + -- property Test on Set, then 0 is returned. + + ((for all I in Source'Range => + (if I = From + or else (I > From) = (Going = Forward) + then (Test = Inside) /= Ada.Strings.Maps.Is_In (Source (I), Set))) + => + Index'Result = 0, + + -- Otherwise, an index in the range of Source is returned + + others + => + + -- The result is in the considered range of Source + + Index'Result in Source'Range + and then (Index'Result = From + or else (Index'Result > From) = (Going = Forward)) + + -- The character at the returned index satisfies the property + -- Test on Set. + + and then + (Test = Inside) + = Ada.Strings.Maps.Is_In (Source (Index'Result), Set) + + -- The result is the smallest or largest index which satisfies the + -- property, respectively when Going = Forward and + -- Going = Backwards. + + and then + (for all J in Source'Range => + (if J /= Index'Result + and then (J < Index'Result) = (Going = Forward) + and then (J = From + or else (J > From) = (Going = Forward)) + then + (Test = Inside) + /= Ada.Strings.Maps.Is_In (Source (J), Set)))), + Global => null; pragma Ada_05 (Index); -- Index searches for the first or last occurrence of any of a set of -- characters (when Test=Inside), or any of the complement of a set of @@ -198,8 +464,49 @@ package Ada.Strings.Fixed with SPARK_Mode is From : Positive; Going : Direction := Forward) return Natural with - Pre => (if Source'Length /= 0 then From in Source'Range), - Global => null; + Pre => (if Source'Length /= 0 then From in Source'Range), + + Post => Index_Non_Blank'Result in 0 | Source'Range, + Contract_Cases => + + -- If all characters in the considered slice of Source are Space + -- characters, then 0 is returned. + + ((for all J in Source'Range => + (if J = From or else (J > From) = (Going = Forward) + then Source (J) = ' ')) + => + Index_Non_Blank'Result = 0, + + -- Otherwise, a valid index is returned + + others + => + + -- The result is in the considered range of Source + + Index_Non_Blank'Result in Source'Range + and then (Index_Non_Blank'Result = From + or else (Index_Non_Blank'Result > From) + = (Going = Forward)) + + -- The character at the returned index is not a Space character + + and then Source (Index_Non_Blank'Result) /= ' ' + + -- The result is the smallest or largest index which is not a + -- Space character, respectively when Going = Forward and + -- Going = Backwards. + + and then + (for all J in Source'Range => + (if J /= Index_Non_Blank'Result + and then (J < Index_Non_Blank'Result) + = (Going = Forward) + and then (J = From or else (J > From) + = (Going = Forward)) + then Source (J) = ' '))), + Global => null; pragma Ada_05 (Index_Non_Blank); -- Returns Index (Source, Maps.To_Set(Space), From, Outside, Going) @@ -207,7 +514,37 @@ package Ada.Strings.Fixed with SPARK_Mode is (Source : String; Going : Direction := Forward) return Natural with - Global => null; + Post => Index_Non_Blank'Result in 0 | Source'Range, + Contract_Cases => + + -- If all characters of Source are Space characters, then 0 is + -- returned. + + ((for all C of Source => C = ' ') => Index_Non_Blank'Result = 0, + + -- Otherwise, a valid index is returned + + others => + + -- The result is in the range of Source + + Index_Non_Blank'Result in Source'Range + + -- The character at the returned index is not a Space character + + and then Source (Index_Non_Blank'Result) /= ' ' + + -- The result is the smallest or largest index which is not a + -- Space character, respectively when Going = Forward and + -- Going = Backwards. + + and then + (for all J in Source'Range => + (if J /= Index_Non_Blank'Result + and then (J < Index_Non_Blank'Result) + = (Going = Forward) + then Source (J) = ' '))), + Global => null; -- Returns Index (Source, Maps.To_Set(Space), Outside, Going) function Count @@ -246,8 +583,53 @@ package Ada.Strings.Fixed with SPARK_Mode is First : out Positive; Last : out Natural) with - Pre => (if Source'Length /= 0 then From in Source'Range), - Global => null; + Pre => (if Source'Length /= 0 then From in Source'Range), + Contract_Cases => + + -- If Source is the empty string, or if no character of the considered + -- slice of Source satisfies the property Test on Set, then First is + -- set to From and Last is set to 0. + + (Source'Length = 0 + or else + (for all C of Source (From .. Source'Last) => + (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set)) + => + First = From and then Last = 0, + + -- Otherwise, First and Last are set to valid indexes + + others + => + + -- First and Last are in the considered range of Source + + First in From .. Source'Last + and then Last in First .. Source'Last + + -- No character between From and First satisfies the property Test + -- on Set. + + and then + (for all C of Source (From .. First - 1) => + (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set)) + + -- All characters between First and Last satisfy the property Test + -- on Set. + + and then + (for all C of Source (First .. Last) => + (Test = Inside) = Ada.Strings.Maps.Is_In (C, Set)) + + -- If Last is not Source'Last, then the character at position + -- Last + 1 does not satify the property Test on Set. + + and then + (if Last < Source'Last + then + (Test = Inside) + /= Ada.Strings.Maps.Is_In (Source (Last + 1), Set))), + Global => null; pragma Ada_2012 (Find_Token); -- If Source is not the null string and From is not in Source'Range, then -- Index_Error is raised. Otherwise, First is set to the index of the first @@ -264,6 +646,50 @@ package Ada.Strings.Fixed with SPARK_Mode is First : out Positive; Last : out Natural) with + Contract_Cases => + + -- If Source is the empty string, or if no character of Source + -- satisfies the property Test on Set, then First is set to From and + -- Last is set to 0. + + (Source'Length = 0 + or else + (for all C of Source => + (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set)) + => + First = Source'First and then Last = 0, + + -- Otherwise, First and Last are set to valid indexes + + others + => + + -- First and Last are in the considered range of Source + + First in Source'Range + and then Last in First .. Source'Last + + -- No character before First satisfies the property Test on Set + + and then + (for all C of Source (Source'First .. First - 1) => + (Test = Inside) /= Ada.Strings.Maps.Is_In (C, Set)) + + -- All characters between First and Last satisfy the property Test + -- on Set. + + and then + (for all C of Source (First .. Last) => + (Test = Inside) = Ada.Strings.Maps.Is_In (C, Set)) + + -- If Last is not Source'Last, then the character at position + -- Last + 1 does not satify the property Test on Set. + + and then + (if Last < Source'Last + then + (Test = Inside) + /= Ada.Strings.Maps.Is_In (Source (Last + 1), Set))), Global => null; -- Equivalent to Find_Token (Source, Set, Source'First, Test, First, Last) @@ -275,14 +701,46 @@ package Ada.Strings.Fixed with SPARK_Mode is (Source : String; Mapping : Maps.Character_Mapping_Function) return String with - Post => Translate'Result'Length = Source'Length, + Post => + + -- Lower bound of the returned string is 1 + + Translate'Result'First = 1 + + -- The returned string has the same length as Source + + and then Translate'Result'Last = Source'Length + + -- Each character in the returned string is the translation of the + -- character at the same position in Source through Mapping. + + and then + (for all J in Source'Range => + Translate'Result (J - Source'First + 1) + = Mapping (Source (J))), Global => null; function Translate (Source : String; Mapping : Maps.Character_Mapping) return String with - Post => Translate'Result'Length = Source'Length, + Post => + + -- Lower bound of the returned string is 1 + + Translate'Result'First = 1 + + -- The returned string has the same length as Source + + and then Translate'Result'Last = Source'Length + + -- Each character in the returned string is the translation of the + -- character at the same position in Source through Mapping. + + and then + (for all J in Source'Range => + Translate'Result (J - Source'First + 1) + = Ada.Strings.Maps.Value (Mapping, Source (J))), Global => null; -- Returns the string S whose length is Source'Length and such that S (I) @@ -293,12 +751,25 @@ package Ada.Strings.Fixed with SPARK_Mode is (Source : in out String; Mapping : Maps.Character_Mapping_Function) with + Post => + + -- Each character in Source after the call is the translation of + -- the character at the same position before the call, through Mapping. + + (for all J in Source'Range => Source (J) = Mapping (Source'Old (J))), Global => null; procedure Translate (Source : in out String; Mapping : Maps.Character_Mapping) with + Post => + + -- Each character in Source after the call is the translation of + -- the character at the same position before the call, through Mapping. + + (for all J in Source'Range => + Source (J) = Ada.Strings.Maps.Value (Mapping, Source'Old (J))), Global => null; -- Equivalent to Source := Translate(Source, Mapping) @@ -344,17 +815,80 @@ package Ada.Strings.Fixed with SPARK_Mode is and then High >= Source'First - 1 and then (if High >= Low then Natural'Max (0, Low - Source'First) - <= Natural'Last - By'Length - - Natural'Max (Source'Last - High, 0) + <= Natural'Last + - By'Length + - Natural'Max (Source'Last - High, 0) else Source'Length <= Natural'Last - By'Length), + + -- Lower bound of the returned string is 1 + + Post => Replace_Slice'Result'First = 1, Contract_Cases => + + -- If High >= Low, then the returned string comprises + -- Source (Source'First .. Low - 1) & By + -- & Source(High + 1 .. Source'Last). + (High >= Low => + + -- Length of the returned string + Replace_Slice'Result'Length - = Natural'Max (0, Low - Source'First) - + By'Length - + Natural'Max (Source'Last - High, 0), + = Natural'Max (0, Low - Source'First) + + By'Length + + Natural'Max (Source'Last - High, 0) + + -- Elements starting at Low are replaced by elements of By + + and then + Replace_Slice'Result (1 .. Natural'Max (0, Low - Source'First)) + = Source (Source'First .. Low - 1) + and then + Replace_Slice'Result + (Natural'Max (0, Low - Source'First) + 1 + .. Natural'Max (0, Low - Source'First) + By'Length) + = By + + -- When there are remaining characters after the replaced slice, + -- they are appended to the result. + + and then + (if High < Source'Last + then + Replace_Slice'Result + (Natural'Max (0, Low - Source'First) + By'Length + 1 + .. Replace_Slice'Result'Last) + = Source (High + 1 .. Source'Last)), + + -- If High < Low, then the returned string is + -- Insert (Source, Before => Low, New_Item => By). + others => - Replace_Slice'Result'Length = Source'Length + By'Length), + + -- Length of the returned string + + Replace_Slice'Result'Length = Source'Length + By'Length + + -- Elements of By are inserted after the element at Low + + and then + Replace_Slice'Result (1 .. Low - Source'First) + = Source (Source'First .. Low - 1) + and then + Replace_Slice'Result + (Low - Source'First + 1 .. Low - Source'First + By'Length) + = By + + -- When there are remaining characters after Low in Source, they + -- are appended to the result. + + and then + (if Low < Source'Last + then + Replace_Slice'Result + (Low - Source'First + By'Length + 1 + .. Replace_Slice'Result'Last) + = Source (Low .. Source'Last))), Global => null; -- Equivalent to: -- @@ -369,7 +903,38 @@ package Ada.Strings.Fixed with SPARK_Mode is Pre => Before - 1 in Source'First - 1 .. Source'Last and then Source'Length <= Natural'Last - New_Item'Length, - Post => Insert'Result'Length = Source'Length + New_Item'Length, + + Post => + + -- Lower bound of the returned string is 1 + + Insert'Result'First = 1 + + -- Length of the returned string + + and then Insert'Result'Length = Source'Length + New_Item'Length + + -- Elements of New_Item are inserted after element at Before + + and then + Insert'Result (1 .. Before - Source'First) + = Source (Source'First .. Before - 1) + and then + Insert'Result + (Before - Source'First + 1 + .. Before - Source'First + New_Item'Length) + = New_Item + + -- When there are remaining characters after Before in Source, they + -- are appended to the returned string. + + and then + (if Before - 1 < Source'Last + then + Insert'Result + (Before - Source'First + New_Item'Length + 1 + .. Insert'Result'Last) + = Source (Before .. Source'Last)), Global => null; -- Propagates Index_Error if Before is not in -- Source'First .. Source'Last+1; otherwise, returns @@ -397,12 +962,44 @@ package Ada.Strings.Fixed with SPARK_Mode is Pre => Position - 1 in Source'First - 1 .. Source'Last and then - (if Position - Source'First >= Source'Length - New_Item'Length - then Position - Source'First <= Natural'Last - New_Item'Length), + (if Position - Source'First >= Source'Length - New_Item'Length + then Position - Source'First <= Natural'Last - New_Item'Length), + Post => - Overwrite'Result'Length - = Integer'Max (Source'Length, - Position - Source'First + New_Item'Length), + + -- Lower bound of the returned string is 1 + + Overwrite'Result'First = 1 + + -- Length of the returned string + + and then + Overwrite'Result'Length + = Integer'Max (Source'Length, + Position - Source'First + New_Item'Length) + + -- Elements after Position are replaced by elements of New_Item + + and then + Overwrite'Result (1 .. Position - Source'First) + = Source (Source'First .. Position - 1) + and then + Overwrite'Result + (Position - Source'First + 1 + .. Position - Source'First + New_Item'Length) + = New_Item + + -- If the end of Source is reached before the characters in New_Item + -- are exhausted, the remaining characters from New_Item are appended + -- to the string. + + and then + (if Position <= Source'Last - New_Item'Length + then + Overwrite'Result + (Position - Source'First + New_Item'Length + 1 + .. Overwrite'Result'Last) + = Source (Position + New_Item'Length .. Source'Last)), Global => null; -- Propagates Index_Error if Position is not in -- Source'First .. Source'Last + 1; otherwise, returns the string obtained @@ -429,15 +1026,47 @@ package Ada.Strings.Fixed with SPARK_Mode is From : Positive; Through : Natural) return String with - Pre => (if From <= Through - then (From in Source'Range - and then Through <= Source'Last)), - Post => - Delete'Result'Length - = Source'Length - (if From <= Through - then Through - From + 1 - else 0), - Global => null; + Pre => (if From <= Through + then (From in Source'Range + and then Through <= Source'Last)), + + -- Lower bound of the returned string is 1 + + Post => + Delete'Result'First = 1, + + Contract_Cases => + + -- If From <= Through, the characters between From and Through are + -- removed. + + (From <= Through => + + -- Length of the returned string + + Delete'Result'Length = Source'Length - (Through - From + 1) + + -- Elements before From are preserved + + and then + Delete'Result (1 .. From - Source'First) + = Source (Source'First .. From - 1) + + -- If there are remaining characters after Through, they are + -- appended to the returned string. + + and then + (if Through < Source'Last + then Delete'Result + (From - Source'First + 1 .. Delete'Result'Last) + = Source (Through + 1 .. Source'Last)), + + -- Otherwise, the returned string is Source with lower bound 1 + + others => + Delete'Result'Length = Source'Length + and then Delete'Result = Source), + Global => null; -- If From <= Through, the returned string is -- Replace_Slice(Source, From, Through, ""); otherwise, it is Source with -- lower bound 1. @@ -469,7 +1098,47 @@ package Ada.Strings.Fixed with SPARK_Mode is (Source : String; Side : Trim_End) return String with - Post => Trim'Result'Length <= Source'Length, + Post => + + -- Lower bound of the returned string is 1 + + Trim'Result'First = 1 + + -- If all characters in Source are Space, the returned string is + -- empty. + + and then + (if (for all J in Source'Range => Source (J) = ' ') + then Trim'Result = "" + + -- Otherwise, the returned string is a slice of Source + + else + (for some Low in Source'Range => + (for some High in Source'Range => + + -- Trim returns the slice of Source between Low and High + + Trim'Result = Source (Low .. High) + + -- Values of Low and High and the characters at their + -- position depend on Side. + + and then + (if Side = Left then High = Source'Last + else Source (High) /= ' ') + and then + (if Side = Right then Low = Source'First + else Source (Low) /= ' ') + + -- All characters outside range Low .. High are + -- Space characters. + + and then + (for all J in Source'Range => + (if J < Low then Source (J) = ' ') + and then + (if J > High then Source (J) = ' '))))), Global => null; -- Returns the string obtained by removing from Source all leading Space -- characters (if Side = Left), all trailing Space characters (if @@ -495,7 +1164,50 @@ package Ada.Strings.Fixed with SPARK_Mode is Left : Maps.Character_Set; Right : Maps.Character_Set) return String with - Post => Trim'Result'Length <= Source'Length, + Post => + + -- Lower bound of the returned string is 1 + + Trim'Result'First = 1 + + -- If all characters are contained in one of the sets Left and Right, + -- then the returned string is empty. + + and then + (if (for all K in Source'Range => + Ada.Strings.Maps.Is_In (Source (K), Left)) + or + (for all K in Source'Range => + Ada.Strings.Maps.Is_In (Source (K), Right)) + then Trim'Result = "" + + -- Otherwise, the returned string is a slice of Source + + else + (for some Low in Source'Range => + (for some High in Source'Range => + + -- Trim returns the slice of Source between Low and High + + Trim'Result = Source (Low .. High) + + -- Characters at the bounds of the returned string are + -- not contained in Left or Right. + + and then not Ada.Strings.Maps.Is_In (Source (Low), Left) + and then not Ada.Strings.Maps.Is_In (Source (High), Right) + + -- All characters before Low are contained in Left. + -- All characters after High are contained in Right. + + and then + (for all K in Source'Range => + (if K < Low + then + Ada.Strings.Maps.Is_In (Source (K), Left)) + and then + (if K > High then + Ada.Strings.Maps.Is_In (Source (K), Right)))))), Global => null; -- Returns the string obtained by removing from Source all leading -- characters in Left and all trailing characters in Right. @@ -521,8 +1233,33 @@ package Ada.Strings.Fixed with SPARK_Mode is Count : Natural; Pad : Character := Space) return String with - Post => Head'Result'Length = Count, - Global => null; + Post => + + -- Lower bound of the returned string is 1 + + Head'Result'First = 1 + + -- Length of the returned string is Count. + + and then Head'Result'Length = Count, + + Contract_Cases => + + -- If Count <= Source'Length, then the first Count characters of + -- Source are returned. + + (Count <= Source'Length => + Head'Result = Source (Source'First .. Source'First - 1 + Count), + + -- Otherwise, the returned string is Source concatenated with + -- Count - Source'Length Pad characters. + + others => + Head'Result (1 .. Source'Length) = Source + and then + Head'Result (Source'Length + 1 .. Count) + = (1 .. Count - Source'Length => Pad)), + Global => null; -- Returns a string of length Count. If Count <= Source'Length, the string -- comprises the first Count characters of Source. Otherwise, its contents -- are Source concatenated with Count - Source'Length Pad characters. @@ -547,7 +1284,44 @@ package Ada.Strings.Fixed with SPARK_Mode is Count : Natural; Pad : Character := Space) return String with - Post => Tail'Result'Length = Count, + Post => + + -- Lower bound of the returned string is 1 + + Tail'Result'First = 1 + + -- Length of the returned string is Count + + and then Tail'Result'Length = Count, + Contract_Cases => + + -- If Count is zero, then the returned string is empty + + (Count = 0 => + Tail'Result = "", + + -- Otherwise, if Count <= Source'Length, then the last Count + -- characters of Source are returned. + + (Count in 1 .. Source'Length) => + Tail'Result = Source (Source'Last - Count + 1 .. Source'Last), + + -- Otherwise, the returned string is Count - Source'Length Pad + -- characters concatenated with Source. + + others => + + -- If Source is empty, then the returned string is Count Pad + -- characters. + + (if Source'Length = 0 + then Tail'Result = (1 .. Count => Pad) + else + Tail'Result (1 .. Count - Source'Length) + = (1 .. Count - Source'Length => Pad) + and then + Tail'Result (Count - Source'Length + 1 .. Tail'Result'Last) + = Source)), Global => null; -- Returns a string of length Count. If Count <= Source'Length, the string -- comprises the last Count characters of Source. Otherwise, its contents @@ -576,7 +1350,19 @@ package Ada.Strings.Fixed with SPARK_Mode is (Left : Natural; Right : Character) return String with - Post => "*"'Result'Length = Left, + Post => + + -- Lower bound of the returned string is 1 + + "*"'Result'First = 1 + + -- Length of the returned string + + and then "*"'Result'Length = Left + + -- All characters of the returned string are Right + + and then (for all C of "*"'Result => C = Right), Global => null; function "*" @@ -584,7 +1370,23 @@ package Ada.Strings.Fixed with SPARK_Mode is Right : String) return String with Pre => (if Right'Length /= 0 then Left <= Natural'Last / Right'Length), - Post => "*"'Result'Length = Left * Right'Length, + + Post => + + -- Lower bound of the returned string is 1 + + "*"'Result'First = 1 + + -- Length of the returned string + + and then "*"'Result'Length = Left * Right'Length + + -- Content of the string is Right concatenated with itself Left times + + and then + (for all J in 0 .. Left - 1 => + "*"'Result (J * Right'Length + 1 .. (J + 1) * Right'Length) + = Right), Global => null; -- These functions replicate a character or string a specified number of diff --git a/gcc/ada/libgnat/a-tags.adb b/gcc/ada/libgnat/a-tags.adb index 798780a..7138f76 100644 --- a/gcc/ada/libgnat/a-tags.adb +++ b/gcc/ada/libgnat/a-tags.adb @@ -30,7 +30,6 @@ ------------------------------------------------------------------------------ with Ada.Exceptions; -with Ada.Unchecked_Conversion; with System.HTable; with System.Storage_Elements; use System.Storage_Elements; @@ -96,12 +95,6 @@ package body Ada.Tags is function To_Tag is new Unchecked_Conversion (Integer_Address, Tag); - function To_Addr_Ptr is - new Ada.Unchecked_Conversion (System.Address, Addr_Ptr); - - function To_Address is - new Ada.Unchecked_Conversion (Tag, System.Address); - function To_Dispatch_Table_Ptr is new Ada.Unchecked_Conversion (Tag, Dispatch_Table_Ptr); @@ -114,9 +107,6 @@ package body Ada.Tags is function To_Tag_Ptr is new Ada.Unchecked_Conversion (System.Address, Tag_Ptr); - function To_Type_Specific_Data_Ptr is - new Ada.Unchecked_Conversion (System.Address, Type_Specific_Data_Ptr); - ------------------------------- -- Inline_Always Subprograms -- ------------------------------- @@ -125,40 +115,6 @@ package body Ada.Tags is -- avoid defeating the frontend inlining mechanism and thus ensure the -- generation of their correct debug info. - ------------------- - -- CW_Membership -- - ------------------- - - -- Canonical implementation of Classwide Membership corresponding to: - - -- Obj in Typ'Class - - -- Each dispatch table contains a reference to a table of ancestors (stored - -- in the first part of the Tags_Table) and a count of the level of - -- inheritance "Idepth". - - -- Obj is in Typ'Class if Typ'Tag is in the table of ancestors that are - -- contained in the dispatch table referenced by Obj'Tag . Knowing the - -- level of inheritance of both types, this can be computed in constant - -- time by the formula: - - -- TSD (Obj'tag).Tags_Table (TSD (Obj'tag).Idepth - TSD (Typ'tag).Idepth) - -- = Typ'tag - - function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean is - Obj_TSD_Ptr : constant Addr_Ptr := - To_Addr_Ptr (To_Address (Obj_Tag) - DT_Typeinfo_Ptr_Size); - Typ_TSD_Ptr : constant Addr_Ptr := - To_Addr_Ptr (To_Address (Typ_Tag) - DT_Typeinfo_Ptr_Size); - Obj_TSD : constant Type_Specific_Data_Ptr := - To_Type_Specific_Data_Ptr (Obj_TSD_Ptr.all); - Typ_TSD : constant Type_Specific_Data_Ptr := - To_Type_Specific_Data_Ptr (Typ_TSD_Ptr.all); - Pos : constant Integer := Obj_TSD.Idepth - Typ_TSD.Idepth; - begin - return Pos >= 0 and then Obj_TSD.Tags_Table (Pos) = Typ_Tag; - end CW_Membership; - ---------------------- -- Get_External_Tag -- ---------------------- diff --git a/gcc/ada/libgnat/a-tags.ads b/gcc/ada/libgnat/a-tags.ads index fb386c3..203f7ca 100644 --- a/gcc/ada/libgnat/a-tags.ads +++ b/gcc/ada/libgnat/a-tags.ads @@ -65,6 +65,7 @@ -- length depends on the number of interfaces covered by a tagged type. with System.Storage_Elements; +with Ada.Unchecked_Conversion; package Ada.Tags is pragma Preelaborate; @@ -501,10 +502,6 @@ private -- dispatch table, return the tagged kind of a type in the context of -- concurrency and limitedness. - function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean; - -- Given the tag of an object and the tag associated to a type, return - -- true if Obj is in Typ'Class. - function IW_Membership (This : System.Address; T : Tag) return Boolean; -- Ada 2005 (AI-251): General routine that checks if a given object -- implements a tagged type. Its common usage is to check if Obj is in @@ -623,4 +620,49 @@ private -- This type is used by the frontend to generate the code that handles -- dispatch table slots of types declared at the local level. + ------------------- + -- CW_Membership -- + ------------------- + + function To_Address is + new Ada.Unchecked_Conversion (Tag, System.Address); + + function To_Addr_Ptr is + new Ada.Unchecked_Conversion (System.Address, Addr_Ptr); + + function To_Type_Specific_Data_Ptr is + new Ada.Unchecked_Conversion (System.Address, Type_Specific_Data_Ptr); + + -- Canonical implementation of Classwide Membership corresponding to: + + -- Obj in Typ'Class + + -- Each dispatch table contains a reference to a table of ancestors (stored + -- in the first part of the Tags_Table) and a count of the level of + -- inheritance "Idepth". + + -- Obj is in Typ'Class if Typ'Tag is in the table of ancestors that are + -- contained in the dispatch table referenced by Obj'Tag . Knowing the + -- level of inheritance of both types, this can be computed in constant + -- time by the formula: + + -- TSD (Obj'tag).Tags_Table (TSD (Obj'tag).Idepth - TSD (Typ'tag).Idepth) + -- = Typ'tag + + function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean is + (declare + Obj_TSD_Ptr : constant Addr_Ptr := + To_Addr_Ptr (To_Address (Obj_Tag) - DT_Typeinfo_Ptr_Size); + Typ_TSD_Ptr : constant Addr_Ptr := + To_Addr_Ptr (To_Address (Typ_Tag) - DT_Typeinfo_Ptr_Size); + Obj_TSD : constant Type_Specific_Data_Ptr := + To_Type_Specific_Data_Ptr (Obj_TSD_Ptr.all); + Typ_TSD : constant Type_Specific_Data_Ptr := + To_Type_Specific_Data_Ptr (Typ_TSD_Ptr.all); + Pos : constant Integer := Obj_TSD.Idepth - Typ_TSD.Idepth; + begin + Pos >= 0 and then Obj_TSD.Tags_Table (Pos) = Typ_Tag); + -- Given the tag of an object and the tag associated to a type, return + -- true if Obj is in Typ'Class. + end Ada.Tags; diff --git a/gcc/ada/libgnat/a-ticoau.adb b/gcc/ada/libgnat/a-ticoau.adb index e4f56dd..cf94305 100644 --- a/gcc/ada/libgnat/a-ticoau.adb +++ b/gcc/ada/libgnat/a-ticoau.adb @@ -30,22 +30,19 @@ ------------------------------------------------------------------------------ with Ada.Text_IO.Generic_Aux; use Ada.Text_IO.Generic_Aux; -with Ada.Text_IO.Float_Aux; with System.Img_Real; use System.Img_Real; package body Ada.Text_IO.Complex_Aux is - package Aux renames Ada.Text_IO.Float_Aux; - --------- -- Get -- --------- procedure Get (File : File_Type; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Width : Field) is Buf : String (1 .. Field'Last); @@ -95,8 +92,8 @@ package body Ada.Text_IO.Complex_Aux is procedure Gets (From : String; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Last : out Positive) is Paren : Boolean; @@ -139,8 +136,8 @@ package body Ada.Text_IO.Complex_Aux is procedure Put (File : File_Type; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Fore : Field; Aft : Field; Exp : Field) @@ -159,8 +156,8 @@ package body Ada.Text_IO.Complex_Aux is procedure Puts (To : out String; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Aft : Field; Exp : Field) is @@ -174,9 +171,9 @@ package body Ada.Text_IO.Complex_Aux is -- Both parts are initially converted with a Fore of 0 Rptr := 0; - Set_Image_Real (ItemR, R_String, Rptr, 0, Aft, Exp); + Set_Image_Real (Long_Long_Float (ItemR), R_String, Rptr, 0, Aft, Exp); Iptr := 0; - Set_Image_Real (ItemI, I_String, Iptr, 0, Aft, Exp); + Set_Image_Real (Long_Long_Float (ItemI), I_String, Iptr, 0, Aft, Exp); -- Check room for both parts plus parens plus comma (RM G.1.3(34)) diff --git a/gcc/ada/libgnat/a-ticoau.ads b/gcc/ada/libgnat/a-ticoau.ads index 739dce8..22555cf 100644 --- a/gcc/ada/libgnat/a-ticoau.ads +++ b/gcc/ada/libgnat/a-ticoau.ads @@ -30,39 +30,46 @@ ------------------------------------------------------------------------------ -- This package contains the routines for Ada.Text_IO.Complex_IO that are --- shared among separate instantiations of this package. The routines in --- this package are identical semantically to those in Complex_IO itself, --- except that the generic parameter Complex has been replaced by separate --- real and imaginary values of type Long_Long_Float, and default parameters --- have been removed because they are supplied explicitly by the calls from --- within the generic template. +-- shared among separate instantiations of this package. The routines in this +-- package are identical semantically to those in Complex_IO, except that the +-- generic parameter Complex has been replaced by separate real and imaginary +-- parameters, and default parameters have been removed because they are +-- supplied explicitly by the calls from within the generic template. + +with Ada.Text_IO.Float_Aux; + +private generic + + type Num is digits <>; + + with package Aux is new Ada.Text_IO.Float_Aux (Num, <>); package Ada.Text_IO.Complex_Aux is procedure Get (File : File_Type; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Width : Field); procedure Put (File : File_Type; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Fore : Field; Aft : Field; Exp : Field); procedure Gets (From : String; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Last : out Positive); procedure Puts (To : out String; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Aft : Field; Exp : Field); diff --git a/gcc/ada/libgnat/a-ticoio.adb b/gcc/ada/libgnat/a-ticoio.adb index fa52b60..e35a745 100644 --- a/gcc/ada/libgnat/a-ticoio.adb +++ b/gcc/ada/libgnat/a-ticoio.adb @@ -29,18 +29,42 @@ -- -- ------------------------------------------------------------------------------ -with Ada.Text_IO; - with Ada.Text_IO.Complex_Aux; +with Ada.Text_IO.Float_Aux; +with System.Val_Flt; use System.Val_Flt; +with System.Val_LFlt; use System.Val_LFlt; +with System.Val_LLF; use System.Val_LLF; package body Ada.Text_IO.Complex_IO is use Complex_Types; - package Aux renames Ada.Text_IO.Complex_Aux; + package Scalar_Float is new + Ada.Text_IO.Float_Aux (Float, Scan_Float); + + package Scalar_Long_Float is new + Ada.Text_IO.Float_Aux (Long_Float, Scan_Long_Float); + + package Scalar_Long_Long_Float is new + Ada.Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + + package Aux_Float is new + Ada.Text_IO.Complex_Aux (Float, Scalar_Float); + + package Aux_Long_Float is new + Ada.Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float); - subtype LLF is Long_Long_Float; - -- Type used for calls to routines in Aux + package Aux_Long_Long_Float is new + Ada.Text_IO.Complex_Aux (Long_Long_Float, Scalar_Long_Long_Float); + + -- Throughout this generic body, we distinguish between the case where type + -- Float is OK, where type Long_Float is OK and where type Long_Long_Float + -- is needed. These boolean constants are used to test for this, such that + -- only code for the relevant case is included in the instance. + + OK_Float : constant Boolean := Real'Base'Digits <= Float'Digits; + + OK_Long_Float : constant Boolean := Real'Base'Digits <= Long_Float'Digits; --------- -- Get -- @@ -48,14 +72,24 @@ package body Ada.Text_IO.Complex_IO is procedure Get (File : File_Type; - Item : out Complex_Types.Complex; + Item : out Complex; Width : Field := 0) is Real_Item : Real'Base; Imag_Item : Real'Base; begin - Aux.Get (File, LLF (Real_Item), LLF (Imag_Item), Width); + if OK_Float then + Aux_Float.Get (File, Float (Real_Item), Float (Imag_Item), Width); + elsif OK_Long_Float then + Aux_Long_Float.Get + (File, Long_Float (Real_Item), Long_Float (Imag_Item), Width); + else + Aux_Long_Long_Float.Get + (File, Long_Long_Float (Real_Item), Long_Long_Float (Imag_Item), + Width); + end if; + Item := (Real_Item, Imag_Item); exception @@ -67,7 +101,7 @@ package body Ada.Text_IO.Complex_IO is --------- procedure Get - (Item : out Complex_Types.Complex; + (Item : out Complex; Width : Field := 0) is begin @@ -80,14 +114,24 @@ package body Ada.Text_IO.Complex_IO is procedure Get (From : String; - Item : out Complex_Types.Complex; + Item : out Complex; Last : out Positive) is Real_Item : Real'Base; Imag_Item : Real'Base; begin - Aux.Gets (From, LLF (Real_Item), LLF (Imag_Item), Last); + if OK_Float then + Aux_Float.Gets (From, Float (Real_Item), Float (Imag_Item), Last); + elsif OK_Long_Float then + Aux_Long_Float.Gets + (From, Long_Float (Real_Item), Long_Float (Imag_Item), Last); + else + Aux_Long_Long_Float.Gets + (From, Long_Long_Float (Real_Item), Long_Long_Float (Imag_Item), + Last); + end if; + Item := (Real_Item, Imag_Item); exception @@ -100,13 +144,24 @@ package body Ada.Text_IO.Complex_IO is procedure Put (File : File_Type; - Item : Complex_Types.Complex; + Item : Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is begin - Aux.Put (File, LLF (Re (Item)), LLF (Im (Item)), Fore, Aft, Exp); + if OK_Float then + Aux_Float.Put + (File, Float (Re (Item)), Float (Im (Item)), Fore, Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Put + (File, Long_Float (Re (Item)), Long_Float (Im (Item)), Fore, Aft, + Exp); + else + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Re (Item)), Long_Long_Float (Im (Item)), + Fore, Aft, Exp); + end if; end Put; --------- @@ -114,7 +169,7 @@ package body Ada.Text_IO.Complex_IO is --------- procedure Put - (Item : Complex_Types.Complex; + (Item : Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp) @@ -129,12 +184,21 @@ package body Ada.Text_IO.Complex_IO is procedure Put (To : out String; - Item : Complex_Types.Complex; + Item : Complex; Aft : Field := Default_Aft; Exp : Field := Default_Exp) is begin - Aux.Puts (To, LLF (Re (Item)), LLF (Im (Item)), Aft, Exp); + if OK_Float then + Aux_Float.Puts (To, Float (Re (Item)), Float (Im (Item)), Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Puts + (To, Long_Float (Re (Item)), Long_Float (Im (Item)), Aft, Exp); + else + Aux_Long_Long_Float.Puts + (To, Long_Long_Float (Re (Item)), Long_Long_Float (Im (Item)), + Aft, Exp); + end if; end Put; end Ada.Text_IO.Complex_IO; diff --git a/gcc/ada/libgnat/a-tideau.adb b/gcc/ada/libgnat/a-tideau.adb index 5878234..ac751c1 100644 --- a/gcc/ada/libgnat/a-tideau.adb +++ b/gcc/ada/libgnat/a-tideau.adb @@ -30,7 +30,6 @@ ------------------------------------------------------------------------------ with Ada.Text_IO.Generic_Aux; use Ada.Text_IO.Generic_Aux; -with Ada.Text_IO.Float_Aux; use Ada.Text_IO.Float_Aux; package body Ada.Text_IO.Decimal_Aux is diff --git a/gcc/ada/libgnat/a-tifiau.adb b/gcc/ada/libgnat/a-tifiau.adb index 9259552..c6f4430 100644 --- a/gcc/ada/libgnat/a-tifiau.adb +++ b/gcc/ada/libgnat/a-tifiau.adb @@ -30,7 +30,6 @@ ------------------------------------------------------------------------------ with Ada.Text_IO.Generic_Aux; use Ada.Text_IO.Generic_Aux; -with Ada.Text_IO.Float_Aux; use Ada.Text_IO.Float_Aux; package body Ada.Text_IO.Fixed_Aux is diff --git a/gcc/ada/libgnat/a-tifiio.adb b/gcc/ada/libgnat/a-tifiio.adb index 93862be..412740e 100644 --- a/gcc/ada/libgnat/a-tifiio.adb +++ b/gcc/ada/libgnat/a-tifiio.adb @@ -29,8 +29,9 @@ -- -- ------------------------------------------------------------------------------ --- Fixed point I/O --- --------------- +-- ------------------- +-- - Fixed point I/O - +-- ------------------- -- The following text documents implementation details of the fixed point -- input/output routines in the GNAT runtime. The first part describes the @@ -40,7 +41,7 @@ -- Subsequently these are reduced to implementation constraints and the impact -- of these constraints on a few possible approaches to input/output is given. -- Based on this analysis, a specific implementation is selected for use in --- the GNAT runtime. Finally, the chosen algorithm is analyzed numerically in +-- the GNAT runtime. Finally the chosen algorithms are analyzed numerically in -- order to provide user-level documentation on limits for range and precision -- of fixed point types as well as accuracy of input/output conversions. @@ -68,7 +69,7 @@ -- Operations -- ---------- --- 'Image and 'Wide_Image (see RM 3.5(34)) +-- [Wide_[Wide_]]Image attribute (see RM 3.5(27.1/2)) -- These attributes return a decimal real literal best approximating -- the value (rounded away from zero if halfway between) with a @@ -88,7 +89,7 @@ -- attributes, although it would be nice to be able to output more -- than S'Aft digits after the decimal point for values of subtype S. --- 'Value and 'Wide_Value attribute (RM 3.5(40-55)) +-- [Wide_[Wide_]]Value attribute (RM 3.5(39.1/2)) -- Since the input can be given in any base in the range 2..16, -- accurate conversion to a fixed point number may require @@ -121,7 +122,7 @@ -- be less than 2.0**(-53). -- In GNAT, Fine_Delta is 2.0**(-63), and Duration for example is a 64-bit --- type. This means that a floating-point type with 63 bits of mantissa needs +-- type. This means that a floating-point type with 64 bits of mantissa needs -- to be used, which is only generally available on the x86 architecture. It -- would still be possible to use multi-precision floating point to perform -- calculations using longer mantissas, but this is a much harder approach. @@ -137,9 +138,21 @@ -- Fixed-precision integer arithmetic has the advantage of simplicity and -- speed. For the most common fixed point types this would be a perfect --- solution. The downside however may be a too limited set of acceptable +-- solution. The downside however may be a restricted set of acceptable -- fixed point types. +-- Implementation Choices +-- ---------------------- + +-- The current implementation in the GNAT runtime uses fixed-precision integer +-- arithmetic for fixed point types whose Small is the ratio of two integers +-- whose magnitude is bounded relatively to the size of the mantissa, with a +-- two-tiered approach for 32-bit and 64-bit fixed point types. For the other +-- fixed point types, the implementation uses floating-point arithmetic. + +-- The exact requirements of the algorithms are analyzed and documented along +-- with the implementation in their respective units. + with Interfaces; with Ada.Text_IO.Fixed_Aux; with Ada.Text_IO.Float_Aux; @@ -147,8 +160,9 @@ with System.Img_Fixed_32; use System.Img_Fixed_32; with System.Img_Fixed_64; use System.Img_Fixed_64; with System.Val_Fixed_32; use System.Val_Fixed_32; with System.Val_Fixed_64; use System.Val_Fixed_64; +with System.Val_LLF; use System.Val_LLF; -package body Ada.Text_IO.Fixed_IO is +package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is -- Note: we still use the floating-point I/O routines for types whose small -- is not the ratio of two sufficiently small integers. This will result in @@ -164,6 +178,9 @@ package body Ada.Text_IO.Fixed_IO is package Aux64 is new Ada.Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64); + package Aux_Long_Long_Float is new + Ada.Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + -- Throughout this generic body, we distinguish between the case where type -- Int32 is OK and where type Int64 is OK. These boolean constants are used -- to test for this, such that only code for the relevant case is included @@ -171,7 +188,7 @@ package body Ada.Text_IO.Fixed_IO is -- static (although it is not a static expressions in the RM sense). OK_Get_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -182,7 +199,7 @@ package body Ada.Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -196,7 +213,7 @@ package body Ada.Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -207,7 +224,7 @@ package body Ada.Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -266,7 +283,7 @@ package body Ada.Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Get (File, Long_Long_Float (Item), Width); + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); end if; exception @@ -278,7 +295,7 @@ package body Ada.Text_IO.Fixed_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -300,7 +317,7 @@ package body Ada.Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Gets (From, Long_Long_Float (Item), Last); + Aux_Long_Long_Float.Gets (From, Long_Long_Float (Item), Last); end if; exception @@ -328,7 +345,8 @@ package body Ada.Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); end if; end Put; @@ -358,7 +376,7 @@ package body Ada.Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Puts (To, Long_Long_Float (Item), Aft, Exp); + Aux_Long_Long_Float.Puts (To, Long_Long_Float (Item), Aft, Exp); end if; end Put; diff --git a/gcc/ada/libgnat/a-tifiio.ads b/gcc/ada/libgnat/a-tifiio.ads index 1acf67a..8a3886d 100644 --- a/gcc/ada/libgnat/a-tifiio.ads +++ b/gcc/ada/libgnat/a-tifiio.ads @@ -23,7 +23,7 @@ private generic type Num is delta <>; -package Ada.Text_IO.Fixed_IO is +package Ada.Text_IO.Fixed_IO with SPARK_Mode => On is Default_Fore : Field := Num'Fore; Default_Aft : Field := Num'Aft; diff --git a/gcc/ada/libgnat/a-tifiio__128.adb b/gcc/ada/libgnat/a-tifiio__128.adb index f2dffcf..f50e4c9 100644 --- a/gcc/ada/libgnat/a-tifiio__128.adb +++ b/gcc/ada/libgnat/a-tifiio__128.adb @@ -29,8 +29,9 @@ -- -- ------------------------------------------------------------------------------ --- Fixed point I/O --- --------------- +-- ------------------- +-- - Fixed point I/O - +-- ------------------- -- The following text documents implementation details of the fixed point -- input/output routines in the GNAT runtime. The first part describes the @@ -40,7 +41,7 @@ -- Subsequently these are reduced to implementation constraints and the impact -- of these constraints on a few possible approaches to input/output is given. -- Based on this analysis, a specific implementation is selected for use in --- the GNAT runtime. Finally, the chosen algorithm is analyzed numerically in +-- the GNAT runtime. Finally the chosen algorithms are analyzed numerically in -- order to provide user-level documentation on limits for range and precision -- of fixed point types as well as accuracy of input/output conversions. @@ -68,7 +69,7 @@ -- Operations -- ---------- --- 'Image and 'Wide_Image (see RM 3.5(34)) +-- [Wide_[Wide_]]Image attribute (see RM 3.5(27.1/2)) -- These attributes return a decimal real literal best approximating -- the value (rounded away from zero if halfway between) with a @@ -88,7 +89,7 @@ -- attributes, although it would be nice to be able to output more -- than S'Aft digits after the decimal point for values of subtype S. --- 'Value and 'Wide_Value attribute (RM 3.5(40-55)) +-- [Wide_[Wide_]]Value attribute (RM 3.5(39.1/2)) -- Since the input can be given in any base in the range 2..16, -- accurate conversion to a fixed point number may require @@ -120,9 +121,9 @@ -- available has 53 bits of mantissa. This means that Fine_Delta cannot -- be less than 2.0**(-53). --- In GNAT, Fine_Delta is 2.0**(-63), and Duration for example is a 64-bit --- type. This means that a floating-point type with 63 bits of mantissa needs --- to be used, which is only generally available on the x86 architecture. It +-- In GNAT, Fine_Delta is 2.0**(-127), and Duration for example is a 64-bit +-- type. This means that a floating-point type with 128 bits of mantissa needs +-- to be used, which currently does not exist in any common architecture. It -- would still be possible to use multi-precision floating point to perform -- calculations using longer mantissas, but this is a much harder approach. @@ -137,9 +138,21 @@ -- Fixed-precision integer arithmetic has the advantage of simplicity and -- speed. For the most common fixed point types this would be a perfect --- solution. The downside however may be a too limited set of acceptable +-- solution. The downside however may be a restricted set of acceptable -- fixed point types. +-- Implementation Choices +-- ---------------------- + +-- The current implementation in the GNAT runtime uses fixed-precision integer +-- arithmetic for fixed point types whose Small is the ratio of two integers +-- whose magnitude is bounded relatively to the size of the mantissa, with a +-- three-tiered approach for 32-bit, 64-bit and 128-bit fixed point types. For +-- other fixed point types, the implementation uses floating-point arithmetic. + +-- The exact requirements of the algorithms are analyzed and documented along +-- with the implementation in their respective units. + with Interfaces; with Ada.Text_IO.Fixed_Aux; with Ada.Text_IO.Float_Aux; @@ -149,8 +162,9 @@ with System.Img_Fixed_128; use System.Img_Fixed_128; with System.Val_Fixed_32; use System.Val_Fixed_32; with System.Val_Fixed_64; use System.Val_Fixed_64; with System.Val_Fixed_128; use System.Val_Fixed_128; +with System.Val_LLF; use System.Val_LLF; -package body Ada.Text_IO.Fixed_IO is +package body Ada.Text_IO.Fixed_IO with SPARK_Mode => Off is -- Note: we still use the floating-point I/O routines for types whose small -- is not the ratio of two sufficiently small integers. This will result in @@ -170,6 +184,9 @@ package body Ada.Text_IO.Fixed_IO is package Aux128 is new Ada.Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128); + package Aux_Long_Long_Float is new + Ada.Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + -- Throughout this generic body, we distinguish between the case where type -- Int32 is OK, where type Int64 is OK and where type Int128 is OK. These -- boolean constants are used to test for this, such that only code for the @@ -178,7 +195,7 @@ package body Ada.Text_IO.Fixed_IO is -- in the RM sense). OK_Get_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -189,7 +206,7 @@ package body Ada.Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -203,7 +220,7 @@ package body Ada.Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -214,7 +231,7 @@ package body Ada.Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -228,7 +245,7 @@ package body Ada.Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_128 : constant Boolean := - Num'Object_Size <= 128 + Num'Base'Object_Size <= 128 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127) or else @@ -239,7 +256,7 @@ package body Ada.Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_128 : constant Boolean := - Num'Object_Size <= 128 + Num'Base'Object_Size <= 128 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127) or else @@ -306,7 +323,7 @@ package body Ada.Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Get (File, Long_Long_Float (Item), Width); + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); end if; exception @@ -318,7 +335,7 @@ package body Ada.Text_IO.Fixed_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -345,7 +362,7 @@ package body Ada.Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Gets (From, Long_Long_Float (Item), Last); + Aux_Long_Long_Float.Gets (From, Long_Long_Float (Item), Last); end if; exception @@ -377,7 +394,8 @@ package body Ada.Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); end if; end Put; @@ -411,7 +429,7 @@ package body Ada.Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Puts (To, Long_Long_Float (Item), Aft, Exp); + Aux_Long_Long_Float.Puts (To, Long_Long_Float (Item), Aft, Exp); end if; end Put; diff --git a/gcc/ada/libgnat/a-tiflau.adb b/gcc/ada/libgnat/a-tiflau.adb index ddb52a5..4955a99 100644 --- a/gcc/ada/libgnat/a-tiflau.adb +++ b/gcc/ada/libgnat/a-tiflau.adb @@ -32,7 +32,6 @@ with Ada.Text_IO.Generic_Aux; use Ada.Text_IO.Generic_Aux; with System.Img_Real; use System.Img_Real; -with System.Val_Real; use System.Val_Real; package body Ada.Text_IO.Float_Aux is @@ -42,7 +41,7 @@ package body Ada.Text_IO.Float_Aux is procedure Get (File : File_Type; - Item : out Long_Long_Float; + Item : out Num; Width : Field) is Buf : String (1 .. Field'Last); @@ -58,7 +57,7 @@ package body Ada.Text_IO.Float_Aux is Ptr := 1; end if; - Item := Scan_Real (Buf, Ptr'Access, Stop); + Item := Scan (Buf, Ptr'Access, Stop); Check_End_Of_Field (Buf, Stop, Ptr, Width); end Get; @@ -68,127 +67,27 @@ package body Ada.Text_IO.Float_Aux is procedure Gets (From : String; - Item : out Long_Long_Float; + Item : out Num; Last : out Positive) is Pos : aliased Integer; begin String_Skip (From, Pos); - Item := Scan_Real (From, Pos'Access, From'Last); + Item := Scan (From, Pos'Access, From'Last); Last := Pos - 1; exception when Constraint_Error => raise Data_Error; end Gets; - --------------- - -- Load_Real -- - --------------- - - procedure Load_Real - (File : File_Type; - Buf : out String; - Ptr : in out Natural) - is - Loaded : Boolean; - - begin - -- Skip initial blanks, and load possible sign - - Load_Skip (File); - Load (File, Buf, Ptr, '+', '-'); - - -- Case of .nnnn - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Digits (File, Buf, Ptr, Loaded); - - -- Hopeless junk if no digits loaded - - if not Loaded then - return; - end if; - - -- Otherwise must have digits to start - - else - Load_Digits (File, Buf, Ptr, Loaded); - - -- Hopeless junk if no digits loaded - - if not Loaded then - return; - end if; - - -- Based cases. We recognize either the standard '#' or the - -- allowed alternative replacement ':' (see RM J.2(3)). - - Load (File, Buf, Ptr, '#', ':', Loaded); - - if Loaded then - - -- Case of nnn#.xxx# - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Extended_Digits (File, Buf, Ptr); - Load (File, Buf, Ptr, '#', ':'); - - -- Case of nnn#xxx.[xxx]# or nnn#xxx# - - else - Load_Extended_Digits (File, Buf, Ptr); - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Extended_Digits (File, Buf, Ptr); - end if; - - -- As usual, it seems strange to allow mixed base characters, - -- but that is what ACVC tests expect, see CE3804M, case (3). - - Load (File, Buf, Ptr, '#', ':'); - end if; - - -- Case of nnn.[nnn] or nnn - - else - -- Prevent the potential processing of '.' in cases where the - -- initial digits have a trailing underscore. - - if Buf (Ptr) = '_' then - return; - end if; - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Digits (File, Buf, Ptr); - end if; - end if; - end if; - - -- Deal with exponent - - Load (File, Buf, Ptr, 'E', 'e', Loaded); - - if Loaded then - Load (File, Buf, Ptr, '+', '-'); - Load_Digits (File, Buf, Ptr); - end if; - end Load_Real; - --------- -- Put -- --------- procedure Put (File : File_Type; - Item : Long_Long_Float; + Item : Num; Fore : Field; Aft : Field; Exp : Field) @@ -197,7 +96,7 @@ package body Ada.Text_IO.Float_Aux is Ptr : Natural := 0; begin - Set_Image_Real (Item, Buf, Ptr, Fore, Aft, Exp); + Set_Image_Real (Long_Long_Float (Item), Buf, Ptr, Fore, Aft, Exp); Put_Item (File, Buf (1 .. Ptr)); end Put; @@ -207,7 +106,7 @@ package body Ada.Text_IO.Float_Aux is procedure Puts (To : out String; - Item : Long_Long_Float; + Item : Num; Aft : Field; Exp : Field) is @@ -215,7 +114,8 @@ package body Ada.Text_IO.Float_Aux is Ptr : Natural := 0; begin - Set_Image_Real (Item, Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp); + Set_Image_Real + (Long_Long_Float (Item), Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp); if Ptr > To'Length then raise Layout_Error; diff --git a/gcc/ada/libgnat/a-tiflau.ads b/gcc/ada/libgnat/a-tiflau.ads index 68ac9eb..2dfe76d 100644 --- a/gcc/ada/libgnat/a-tiflau.ads +++ b/gcc/ada/libgnat/a-tiflau.ads @@ -31,41 +31,42 @@ -- This package contains the routines for Ada.Text_IO.Float_IO that are -- shared among separate instantiations of this package. The routines in --- this package are identical semantically to those in Float_IO itself, --- except that generic parameter Num has been replaced by Long_Long_Float, --- and the default parameters have been removed because they are supplied +-- this package are identical semantically to those in Float_IO, except +-- that the default parameters have been removed because they are supplied -- explicitly by the calls from within the generic template. This package --- is also used by Ada.Text_IO.Fixed_IO, and Ada.Text_IO.Decimal_IO. +-- is also used by Ada.Text_IO.Fixed_IO and Ada.Text_IO.Decimal_IO. -private package Ada.Text_IO.Float_Aux is +private generic - procedure Load_Real - (File : File_Type; - Buf : out String; - Ptr : in out Natural); - -- This is an auxiliary routine that is used to load a possibly signed - -- real literal value from the input file into Buf, starting at Ptr + 1. + type Num is digits <>; + + with function Scan + (Str : String; + Ptr : not null access Integer; + Max : Integer) return Num; + +package Ada.Text_IO.Float_Aux is procedure Get (File : File_Type; - Item : out Long_Long_Float; + Item : out Num; Width : Field); procedure Put (File : File_Type; - Item : Long_Long_Float; + Item : Num; Fore : Field; Aft : Field; Exp : Field); procedure Gets (From : String; - Item : out Long_Long_Float; + Item : out Num; Last : out Positive); procedure Puts (To : out String; - Item : Long_Long_Float; + Item : Num; Aft : Field; Exp : Field); diff --git a/gcc/ada/libgnat/a-tiflio.adb b/gcc/ada/libgnat/a-tiflio.adb index 0daa044..db1cea2 100644 --- a/gcc/ada/libgnat/a-tiflio.adb +++ b/gcc/ada/libgnat/a-tiflio.adb @@ -30,10 +30,29 @@ ------------------------------------------------------------------------------ with Ada.Text_IO.Float_Aux; +with System.Val_Flt; use System.Val_Flt; +with System.Val_LFlt; use System.Val_LFlt; +with System.Val_LLF; use System.Val_LLF; -package body Ada.Text_IO.Float_IO is +package body Ada.Text_IO.Float_IO with SPARK_Mode => Off is - package Aux renames Ada.Text_IO.Float_Aux; + package Aux_Float is new + Ada.Text_IO.Float_Aux (Float, Scan_Float); + + package Aux_Long_Float is new + Ada.Text_IO.Float_Aux (Long_Float, Scan_Long_Float); + + package Aux_Long_Long_Float is new + Ada.Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + + -- Throughout this generic body, we distinguish between the case where type + -- Float is OK, where type Long_Float is OK and where type Long_Long_Float + -- is needed. These boolean constants are used to test for this, such that + -- only code for the relevant case is included in the instance. + + OK_Float : constant Boolean := Num'Base'Digits <= Float'Digits; + + OK_Long_Float : constant Boolean := Num'Base'Digits <= Long_Float'Digits; --------- -- Get -- @@ -47,7 +66,13 @@ package body Ada.Text_IO.Float_IO is pragma Unsuppress (Range_Check); begin - Aux.Get (File, Long_Long_Float (Item), Width); + if OK_Float then + Aux_Float.Get (File, Float (Item), Width); + elsif OK_Long_Float then + Aux_Long_Float.Get (File, Long_Float (Item), Width); + else + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); + end if; -- In the case where the type is unconstrained (e.g. Standard'Float), -- the above conversion may result in an infinite value, which is @@ -66,22 +91,8 @@ package body Ada.Text_IO.Float_IO is (Item : out Num; Width : Field := 0) is - pragma Unsuppress (Range_Check); - begin - Aux.Get (Current_In, Long_Long_Float (Item), Width); - - -- In the case where the type is unconstrained (e.g. Standard'Float), - -- the above conversion may result in an infinite value, which is - -- normally fine for a conversion, but in this case, we want to treat - -- that as a data error. - - if not Item'Valid then - raise Data_Error; - end if; - - exception - when Constraint_Error => raise Data_Error; + Get (Current_In, Item, Width); end Get; procedure Get @@ -92,7 +103,13 @@ package body Ada.Text_IO.Float_IO is pragma Unsuppress (Range_Check); begin - Aux.Gets (From, Long_Long_Float (Item), Last); + if OK_Float then + Aux_Float.Gets (From, Float (Item), Last); + elsif OK_Long_Float then + Aux_Long_Float.Gets (From, Long_Float (Item), Last); + else + Aux_Long_Long_Float.Gets (From, Long_Long_Float (Item), Last); + end if; -- In the case where the type is unconstrained (e.g. Standard'Float), -- the above conversion may result in an infinite value, which is @@ -119,7 +136,14 @@ package body Ada.Text_IO.Float_IO is Exp : Field := Default_Exp) is begin - Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + if OK_Float then + Aux_Float.Put (File, Float (Item), Fore, Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp); + else + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); + end if; end Put; procedure Put @@ -129,7 +153,7 @@ package body Ada.Text_IO.Float_IO is Exp : Field := Default_Exp) is begin - Aux.Put (Current_Out, Long_Long_Float (Item), Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put @@ -139,7 +163,13 @@ package body Ada.Text_IO.Float_IO is Exp : Field := Default_Exp) is begin - Aux.Puts (To, Long_Long_Float (Item), Aft, Exp); + if OK_Float then + Aux_Float.Puts (To, Float (Item), Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Puts (To, Long_Float (Item), Aft, Exp); + else + Aux_Long_Long_Float.Puts (To, Long_Long_Float (Item), Aft, Exp); + end if; end Put; end Ada.Text_IO.Float_IO; diff --git a/gcc/ada/libgnat/a-tiflio.ads b/gcc/ada/libgnat/a-tiflio.ads index bd4c64f64..d61b9e7 100644 --- a/gcc/ada/libgnat/a-tiflio.ads +++ b/gcc/ada/libgnat/a-tiflio.ads @@ -43,7 +43,7 @@ private generic type Num is digits <>; -package Ada.Text_IO.Float_IO is +package Ada.Text_IO.Float_IO with SPARK_Mode => On is Default_Fore : Field := 2; Default_Aft : Field := Num'Digits - 1; diff --git a/gcc/ada/libgnat/a-tigeau.adb b/gcc/ada/libgnat/a-tigeau.adb index f1ba60a..5e13dae 100644 --- a/gcc/ada/libgnat/a-tigeau.adb +++ b/gcc/ada/libgnat/a-tigeau.adb @@ -377,6 +377,106 @@ package body Ada.Text_IO.Generic_Aux is end Load_Integer; --------------- + -- Load_Real -- + --------------- + + procedure Load_Real + (File : File_Type; + Buf : out String; + Ptr : in out Natural) + is + Loaded : Boolean; + + begin + -- Skip initial blanks, and load possible sign + + Load_Skip (File); + Load (File, Buf, Ptr, '+', '-'); + + -- Case of .nnnn + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Digits (File, Buf, Ptr, Loaded); + + -- Hopeless junk if no digits loaded + + if not Loaded then + return; + end if; + + -- Otherwise must have digits to start + + else + Load_Digits (File, Buf, Ptr, Loaded); + + -- Hopeless junk if no digits loaded + + if not Loaded then + return; + end if; + + -- Based cases. We recognize either the standard '#' or the + -- allowed alternative replacement ':' (see RM J.2(3)). + + Load (File, Buf, Ptr, '#', ':', Loaded); + + if Loaded then + + -- Case of nnn#.xxx# + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Extended_Digits (File, Buf, Ptr); + Load (File, Buf, Ptr, '#', ':'); + + -- Case of nnn#xxx.[xxx]# or nnn#xxx# + + else + Load_Extended_Digits (File, Buf, Ptr); + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Extended_Digits (File, Buf, Ptr); + end if; + + -- As usual, it seems strange to allow mixed base characters, + -- but that is what ACVC tests expect, see CE3804M, case (3). + + Load (File, Buf, Ptr, '#', ':'); + end if; + + -- Case of nnn.[nnn] or nnn + + else + -- Prevent the potential processing of '.' in cases where the + -- initial digits have a trailing underscore. + + if Buf (Ptr) = '_' then + return; + end if; + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Digits (File, Buf, Ptr); + end if; + end if; + end if; + + -- Deal with exponent + + Load (File, Buf, Ptr, 'E', 'e', Loaded); + + if Loaded then + Load (File, Buf, Ptr, '+', '-'); + Load_Digits (File, Buf, Ptr); + end if; + end Load_Real; + + --------------- -- Load_Skip -- --------------- diff --git a/gcc/ada/libgnat/a-tigeau.ads b/gcc/ada/libgnat/a-tigeau.ads index 09334b3..d6acd8d 100644 --- a/gcc/ada/libgnat/a-tigeau.ads +++ b/gcc/ada/libgnat/a-tigeau.ads @@ -156,6 +156,12 @@ private package Ada.Text_IO.Generic_Aux is Ptr : in out Natural); -- Loads a possibly signed integer literal value + procedure Load_Real + (File : File_Type; + Buf : out String; + Ptr : in out Natural); + -- Loads a possibly signed real literal value + function Nextc (File : File_Type) return Integer; -- Like Getc, but includes a call to Ungetc, so that the file -- pointer is not moved by the call. diff --git a/gcc/ada/libgnat/a-wtcoau.adb b/gcc/ada/libgnat/a-wtcoau.adb index a60336b..05a6d9d 100644 --- a/gcc/ada/libgnat/a-wtcoau.adb +++ b/gcc/ada/libgnat/a-wtcoau.adb @@ -30,22 +30,19 @@ ------------------------------------------------------------------------------ with Ada.Wide_Text_IO.Generic_Aux; use Ada.Wide_Text_IO.Generic_Aux; -with Ada.Wide_Text_IO.Float_Aux; with System.Img_Real; use System.Img_Real; package body Ada.Wide_Text_IO.Complex_Aux is - package Aux renames Ada.Wide_Text_IO.Float_Aux; - --------- -- Get -- --------- procedure Get (File : File_Type; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Width : Field) is Buf : String (1 .. Field'Last); @@ -95,8 +92,8 @@ package body Ada.Wide_Text_IO.Complex_Aux is procedure Gets (From : String; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Last : out Positive) is Paren : Boolean; @@ -139,8 +136,8 @@ package body Ada.Wide_Text_IO.Complex_Aux is procedure Put (File : File_Type; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Fore : Field; Aft : Field; Exp : Field) @@ -159,8 +156,8 @@ package body Ada.Wide_Text_IO.Complex_Aux is procedure Puts (To : out String; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Aft : Field; Exp : Field) is @@ -174,9 +171,9 @@ package body Ada.Wide_Text_IO.Complex_Aux is -- Both parts are initially converted with a Fore of 0 Rptr := 0; - Set_Image_Real (ItemR, R_String, Rptr, 0, Aft, Exp); + Set_Image_Real (Long_Long_Float (ItemR), R_String, Rptr, 0, Aft, Exp); Iptr := 0; - Set_Image_Real (ItemI, I_String, Iptr, 0, Aft, Exp); + Set_Image_Real (Long_Long_Float (ItemI), I_String, Iptr, 0, Aft, Exp); -- Check room for both parts plus parens plus comma (RM G.1.3(34)) diff --git a/gcc/ada/libgnat/a-wtcoau.ads b/gcc/ada/libgnat/a-wtcoau.ads index 781dd8d..affb969 100644 --- a/gcc/ada/libgnat/a-wtcoau.ads +++ b/gcc/ada/libgnat/a-wtcoau.ads @@ -29,40 +29,47 @@ -- -- ------------------------------------------------------------------------------ --- This package contains the routines for Ada.Wide_Text_IO.Complex_IO that --- are shared among separate instantiations of this package. The routines --- in this package are identical semantically to those in Complex_IO itself, --- except that the generic parameter Complex has been replaced by separate --- real and imaginary values of type Long_Long_Float, and default parameters --- have been removed because they are supplied explicitly by the calls from --- within the generic template. +-- This package contains the routines for Ada.Wide_Text_IO.Complex_IO that are +-- shared among separate instantiations of this package. The routines in this +-- package are identical semantically to those in Complex_IO, except that the +-- generic parameter Complex has been replaced by separate real and imaginary +-- parameters, and default parameters have been removed because they are +-- supplied explicitly by the calls from within the generic template. + +with Ada.Wide_Text_IO.Float_Aux; + +private generic + + type Num is digits <>; + + with package Aux is new Ada.Wide_Text_IO.Float_Aux (Num, <>); package Ada.Wide_Text_IO.Complex_Aux is procedure Get (File : File_Type; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Width : Field); - procedure Gets - (From : String; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; - Last : out Positive); - procedure Put (File : File_Type; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Fore : Field; Aft : Field; Exp : Field); + procedure Gets + (From : String; + ItemR : out Num; + ItemI : out Num; + Last : out Positive); + procedure Puts (To : out String; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Aft : Field; Exp : Field); diff --git a/gcc/ada/libgnat/a-wtcoio.adb b/gcc/ada/libgnat/a-wtcoio.adb index c1c3b94..8e9ff7a 100644 --- a/gcc/ada/libgnat/a-wtcoio.adb +++ b/gcc/ada/libgnat/a-wtcoio.adb @@ -30,24 +30,43 @@ ------------------------------------------------------------------------------ with Ada.Wide_Text_IO.Complex_Aux; +with Ada.Wide_Text_IO.Float_Aux; +with System.Val_Flt; use System.Val_Flt; +with System.Val_LFlt; use System.Val_LFlt; +with System.Val_LLF; use System.Val_LLF; +with System.WCh_Con; use System.WCh_Con; +with System.WCh_WtS; use System.WCh_WtS; -with System.WCh_Con; use System.WCh_Con; -with System.WCh_WtS; use System.WCh_WtS; +package body Ada.Wide_Text_IO.Complex_IO is -with Ada.Unchecked_Conversion; + use Complex_Types; -package body Ada.Wide_Text_IO.Complex_IO is + package Scalar_Float is new + Ada.Wide_Text_IO.Float_Aux (Float, Scan_Float); + + package Scalar_Long_Float is new + Ada.Wide_Text_IO.Float_Aux (Long_Float, Scan_Long_Float); + + package Scalar_Long_Long_Float is new + Ada.Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + + package Aux_Float is new + Ada.Wide_Text_IO.Complex_Aux (Float, Scalar_Float); - package Aux renames Ada.Wide_Text_IO.Complex_Aux; + package Aux_Long_Float is new + Ada.Wide_Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float); - subtype LLF is Long_Long_Float; - -- Type used for calls to routines in Aux + package Aux_Long_Long_Float is new + Ada.Wide_Text_IO.Complex_Aux (Long_Long_Float, Scalar_Long_Long_Float); - function TFT is new - Ada.Unchecked_Conversion (File_Type, Ada.Wide_Text_IO.File_Type); - -- This unchecked conversion is to get around a visibility bug in - -- GNAT version 2.04w. It should be possible to simply use the - -- subtype declared above and do normal checked conversions. + -- Throughout this generic body, we distinguish between the case where type + -- Float is OK, where type Long_Float is OK and where type Long_Long_Float + -- is needed. These boolean constants are used to test for this, such that + -- only code for the relevant case is included in the instance. + + OK_Float : constant Boolean := Real'Base'Digits <= Float'Digits; + + OK_Long_Float : constant Boolean := Real'Base'Digits <= Long_Float'Digits; --------- -- Get -- @@ -62,7 +81,17 @@ package body Ada.Wide_Text_IO.Complex_IO is Imag_Item : Real'Base; begin - Aux.Get (TFT (File), LLF (Real_Item), LLF (Imag_Item), Width); + if OK_Float then + Aux_Float.Get (File, Float (Real_Item), Float (Imag_Item), Width); + elsif OK_Long_Float then + Aux_Long_Float.Get + (File, Long_Float (Real_Item), Long_Float (Imag_Item), Width); + else + Aux_Long_Long_Float.Get + (File, Long_Long_Float (Real_Item), Long_Long_Float (Imag_Item), + Width); + end if; + Item := (Real_Item, Imag_Item); exception @@ -78,7 +107,7 @@ package body Ada.Wide_Text_IO.Complex_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; --------- @@ -100,7 +129,17 @@ package body Ada.Wide_Text_IO.Complex_IO is -- Aux.Gets will raise Data_Error in any case. begin - Aux.Gets (S, LLF (Real_Item), LLF (Imag_Item), Last); + if OK_Float then + Aux_Float.Gets (S, Float (Real_Item), Float (Imag_Item), Last); + elsif OK_Long_Float then + Aux_Long_Float.Gets + (S, Long_Float (Real_Item), Long_Float (Imag_Item), Last); + else + Aux_Long_Long_Float.Gets + (S, Long_Long_Float (Real_Item), Long_Long_Float (Imag_Item), + Last); + end if; + Item := (Real_Item, Imag_Item); exception @@ -119,7 +158,18 @@ package body Ada.Wide_Text_IO.Complex_IO is Exp : Field := Default_Exp) is begin - Aux.Put (TFT (File), LLF (Re (Item)), LLF (Im (Item)), Fore, Aft, Exp); + if OK_Float then + Aux_Float.Put + (File, Float (Re (Item)), Float (Im (Item)), Fore, Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Put + (File, Long_Float (Re (Item)), Long_Float (Im (Item)), Fore, Aft, + Exp); + else + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Re (Item)), Long_Long_Float (Im (Item)), + Fore, Aft, Exp); + end if; end Put; --------- @@ -133,7 +183,7 @@ package body Ada.Wide_Text_IO.Complex_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; --------- @@ -149,7 +199,16 @@ package body Ada.Wide_Text_IO.Complex_IO is S : String (To'First .. To'Last); begin - Aux.Puts (S, LLF (Re (Item)), LLF (Im (Item)), Aft, Exp); + if OK_Float then + Aux_Float.Puts (S, Float (Re (Item)), Float (Im (Item)), Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Puts + (S, Long_Float (Re (Item)), Long_Float (Im (Item)), Aft, Exp); + else + Aux_Long_Long_Float.Puts + (S, Long_Long_Float (Re (Item)), Long_Long_Float (Im (Item)), + Aft, Exp); + end if; for J in S'Range loop To (J) := Wide_Character'Val (Character'Pos (S (J))); diff --git a/gcc/ada/libgnat/a-wtcoio.ads b/gcc/ada/libgnat/a-wtcoio.ads index 31fab2b..f80a5b9 100644 --- a/gcc/ada/libgnat/a-wtcoio.ads +++ b/gcc/ada/libgnat/a-wtcoio.ads @@ -20,42 +20,40 @@ generic package Ada.Wide_Text_IO.Complex_IO is - use Complex_Types; - Default_Fore : Field := 2; - Default_Aft : Field := Real'Digits - 1; + Default_Aft : Field := Complex_Types.Real'Digits - 1; Default_Exp : Field := 3; procedure Get (File : File_Type; - Item : out Complex; + Item : out Complex_Types.Complex; Width : Field := 0); procedure Get - (Item : out Complex; + (Item : out Complex_Types.Complex; Width : Field := 0); procedure Put (File : File_Type; - Item : Complex; + Item : Complex_Types.Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); procedure Put - (Item : Complex; + (Item : Complex_Types.Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); procedure Get (From : Wide_String; - Item : out Complex; + Item : out Complex_Types.Complex; Last : out Positive); procedure Put (To : out Wide_String; - Item : Complex; + Item : Complex_Types.Complex; Aft : Field := Default_Aft; Exp : Field := Default_Exp); diff --git a/gcc/ada/libgnat/a-wtdeau.adb b/gcc/ada/libgnat/a-wtdeau.adb index 268ba4d..57fcc92 100644 --- a/gcc/ada/libgnat/a-wtdeau.adb +++ b/gcc/ada/libgnat/a-wtdeau.adb @@ -30,7 +30,6 @@ ------------------------------------------------------------------------------ with Ada.Wide_Text_IO.Generic_Aux; use Ada.Wide_Text_IO.Generic_Aux; -with Ada.Wide_Text_IO.Float_Aux; use Ada.Wide_Text_IO.Float_Aux; package body Ada.Wide_Text_IO.Decimal_Aux is diff --git a/gcc/ada/libgnat/a-wtdeio.adb b/gcc/ada/libgnat/a-wtdeio.adb index b432cac..c503a20 100644 --- a/gcc/ada/libgnat/a-wtdeio.adb +++ b/gcc/ada/libgnat/a-wtdeio.adb @@ -89,7 +89,7 @@ package body Ada.Wide_Text_IO.Decimal_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -144,7 +144,7 @@ package body Ada.Wide_Text_IO.Decimal_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-wtdeio__128.adb b/gcc/ada/libgnat/a-wtdeio__128.adb index 6e23e08..796c724 100644 --- a/gcc/ada/libgnat/a-wtdeio__128.adb +++ b/gcc/ada/libgnat/a-wtdeio__128.adb @@ -102,7 +102,7 @@ package body Ada.Wide_Text_IO.Decimal_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -162,7 +162,7 @@ package body Ada.Wide_Text_IO.Decimal_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-wtenio.adb b/gcc/ada/libgnat/a-wtenio.adb index ee500f9..f89359c 100644 --- a/gcc/ada/libgnat/a-wtenio.adb +++ b/gcc/ada/libgnat/a-wtenio.adb @@ -51,7 +51,7 @@ package body Ada.Wide_Text_IO.Enumeration_IO is procedure Get (Item : out Enum) is begin - Get (Current_Input, Item); + Get (Current_In, Item); end Get; procedure Get @@ -88,7 +88,7 @@ package body Ada.Wide_Text_IO.Enumeration_IO is Set : Type_Set := Default_Setting) is begin - Put (Current_Output, Item, Width, Set); + Put (Current_Out, Item, Width, Set); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-wtfiau.adb b/gcc/ada/libgnat/a-wtfiau.adb index d4a1534..611b76d 100644 --- a/gcc/ada/libgnat/a-wtfiau.adb +++ b/gcc/ada/libgnat/a-wtfiau.adb @@ -30,7 +30,6 @@ ------------------------------------------------------------------------------ with Ada.Wide_Text_IO.Generic_Aux; use Ada.Wide_Text_IO.Generic_Aux; -with Ada.Wide_Text_IO.Float_Aux; use Ada.Wide_Text_IO.Float_Aux; package body Ada.Wide_Text_IO.Fixed_Aux is diff --git a/gcc/ada/libgnat/a-wtfiio.adb b/gcc/ada/libgnat/a-wtfiio.adb index 142a445..e2537ae 100644 --- a/gcc/ada/libgnat/a-wtfiio.adb +++ b/gcc/ada/libgnat/a-wtfiio.adb @@ -36,6 +36,7 @@ with System.Img_Fixed_32; use System.Img_Fixed_32; with System.Img_Fixed_64; use System.Img_Fixed_64; with System.Val_Fixed_32; use System.Val_Fixed_32; with System.Val_Fixed_64; use System.Val_Fixed_64; +with System.Val_LLF; use System.Val_LLF; with System.WCh_Con; use System.WCh_Con; with System.WCh_WtS; use System.WCh_WtS; @@ -55,6 +56,9 @@ package body Ada.Wide_Text_IO.Fixed_IO is package Aux64 is new Ada.Wide_Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64); + package Aux_Long_Long_Float is new + Ada.Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + -- Throughout this generic body, we distinguish between the case where type -- Int32 is OK and where type Int64 is OK. These boolean constants are used -- to test for this, such that only code for the relevant case is included @@ -62,7 +66,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- static (although it is not a static expressions in the RM sense). OK_Get_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -73,7 +77,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -87,7 +91,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -98,7 +102,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -157,7 +161,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Get (File, Long_Long_Float (Item), Width); + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); end if; exception @@ -169,7 +173,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -197,7 +201,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Gets (S, Long_Long_Float (Item), Last); + Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last); end if; exception @@ -225,7 +229,8 @@ package body Ada.Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); end if; end Put; @@ -236,7 +241,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put @@ -257,7 +262,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp); + Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp); end if; for J in S'Range loop diff --git a/gcc/ada/libgnat/a-wtfiio__128.adb b/gcc/ada/libgnat/a-wtfiio__128.adb index b4f1b1d..a5801be 100644 --- a/gcc/ada/libgnat/a-wtfiio__128.adb +++ b/gcc/ada/libgnat/a-wtfiio__128.adb @@ -38,6 +38,7 @@ with System.Img_Fixed_128; use System.Img_Fixed_128; with System.Val_Fixed_32; use System.Val_Fixed_32; with System.Val_Fixed_64; use System.Val_Fixed_64; with System.Val_Fixed_128; use System.Val_Fixed_128; +with System.Val_LLF; use System.Val_LLF; with System.WCh_Con; use System.WCh_Con; with System.WCh_WtS; use System.WCh_WtS; @@ -61,6 +62,9 @@ package body Ada.Wide_Text_IO.Fixed_IO is package Aux128 is new Ada.Wide_Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128); + package Aux_Long_Long_Float is new + Ada.Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + -- Throughout this generic body, we distinguish between the case where type -- Int32 is OK, where type Int64 is OK and where type Int128 is OK. These -- boolean constants are used to test for this, such that only code for the @@ -69,7 +73,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- in the RM sense). OK_Get_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -80,7 +84,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -94,7 +98,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -105,7 +109,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -119,7 +123,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_128 : constant Boolean := - Num'Object_Size <= 128 + Num'Base'Object_Size <= 128 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127) or else @@ -130,7 +134,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_128 : constant Boolean := - Num'Object_Size <= 128 + Num'Base'Object_Size <= 128 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127) or else @@ -197,7 +201,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Get (File, Long_Long_Float (Item), Width); + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); end if; exception @@ -209,7 +213,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -242,7 +246,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Gets (S, Long_Long_Float (Item), Last); + Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last); end if; exception @@ -274,7 +278,8 @@ package body Ada.Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); end if; end Put; @@ -285,7 +290,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put @@ -310,7 +315,7 @@ package body Ada.Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp); + Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp); end if; for J in S'Range loop diff --git a/gcc/ada/libgnat/a-wtflau.adb b/gcc/ada/libgnat/a-wtflau.adb index fd9ff1a..7db1b78 100644 --- a/gcc/ada/libgnat/a-wtflau.adb +++ b/gcc/ada/libgnat/a-wtflau.adb @@ -31,8 +31,7 @@ with Ada.Wide_Text_IO.Generic_Aux; use Ada.Wide_Text_IO.Generic_Aux; -with System.Img_Real; use System.Img_Real; -with System.Val_Real; use System.Val_Real; +with System.Img_Real; use System.Img_Real; package body Ada.Wide_Text_IO.Float_Aux is @@ -42,12 +41,12 @@ package body Ada.Wide_Text_IO.Float_Aux is procedure Get (File : File_Type; - Item : out Long_Long_Float; + Item : out Num; Width : Field) is Buf : String (1 .. Field'Last); Stop : Integer := 0; - Ptr : aliased Integer := 1; + Ptr : aliased Integer; begin if Width /= 0 then @@ -55,10 +54,10 @@ package body Ada.Wide_Text_IO.Float_Aux is String_Skip (Buf, Ptr); else Load_Real (File, Buf, Stop); + Ptr := 1; end if; - Item := Scan_Real (Buf, Ptr'Access, Stop); - + Item := Scan (Buf, Ptr'Access, Stop); Check_End_Of_Field (Buf, Stop, Ptr, Width); end Get; @@ -68,137 +67,36 @@ package body Ada.Wide_Text_IO.Float_Aux is procedure Gets (From : String; - Item : out Long_Long_Float; + Item : out Num; Last : out Positive) is Pos : aliased Integer; begin String_Skip (From, Pos); - Item := Scan_Real (From, Pos'Access, From'Last); + Item := Scan (From, Pos'Access, From'Last); Last := Pos - 1; exception - when Constraint_Error => - raise Data_Error; + when Constraint_Error => raise Data_Error; end Gets; - --------------- - -- Load_Real -- - --------------- - - procedure Load_Real - (File : File_Type; - Buf : out String; - Ptr : in out Natural) - is - Loaded : Boolean; - - begin - -- Skip initial blanks and load possible sign - - Load_Skip (File); - Load (File, Buf, Ptr, '+', '-'); - - -- Case of .nnnn - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Digits (File, Buf, Ptr, Loaded); - - -- Hopeless junk if no digits loaded - - if not Loaded then - return; - end if; - - -- Otherwise must have digits to start - - else - Load_Digits (File, Buf, Ptr, Loaded); - - -- Hopeless junk if no digits loaded - - if not Loaded then - return; - end if; - - -- Deal with based case. We recognize either the standard '#' or the - -- allowed alternative replacement ':' (see RM J.2(3)). - - Load (File, Buf, Ptr, '#', ':', Loaded); - - if Loaded then - - -- Case of nnn#.xxx# - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Extended_Digits (File, Buf, Ptr); - Load (File, Buf, Ptr, '#', ':'); - - -- Case of nnn#xxx.[xxx]# or nnn#xxx# - - else - Load_Extended_Digits (File, Buf, Ptr); - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Extended_Digits (File, Buf, Ptr); - end if; - - -- As usual, it seems strange to allow mixed base characters, - -- but that is what ACVC tests expect, see CE3804M, case (3). - - Load (File, Buf, Ptr, '#', ':'); - end if; - - -- Case of nnn.[nnn] or nnn - - else - -- Prevent the potential processing of '.' in cases where the - -- initial digits have a trailing underscore. - - if Buf (Ptr) = '_' then - return; - end if; - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Digits (File, Buf, Ptr); - end if; - end if; - end if; - - -- Deal with exponent - - Load (File, Buf, Ptr, 'E', 'e', Loaded); - - if Loaded then - Load (File, Buf, Ptr, '+', '-'); - Load_Digits (File, Buf, Ptr); - end if; - end Load_Real; - --------- -- Put -- --------- procedure Put (File : File_Type; - Item : Long_Long_Float; + Item : Num; Fore : Field; Aft : Field; Exp : Field) is - Buf : String (1 .. Field'Last); + Buf : String (1 .. Max_Real_Image_Length); Ptr : Natural := 0; begin - Set_Image_Real (Item, Buf, Ptr, Fore, Aft, Exp); + Set_Image_Real (Long_Long_Float (Item), Buf, Ptr, Fore, Aft, Exp); Put_Item (File, Buf (1 .. Ptr)); end Put; @@ -208,15 +106,16 @@ package body Ada.Wide_Text_IO.Float_Aux is procedure Puts (To : out String; - Item : Long_Long_Float; + Item : Num; Aft : Field; Exp : Field) is - Buf : String (1 .. Field'Last); + Buf : String (1 .. Max_Real_Image_Length); Ptr : Natural := 0; begin - Set_Image_Real (Item, Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp); + Set_Image_Real + (Long_Long_Float (Item), Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp); if Ptr > To'Length then raise Layout_Error; diff --git a/gcc/ada/libgnat/a-wtflau.ads b/gcc/ada/libgnat/a-wtflau.ads index 3598f77..82ace79 100644 --- a/gcc/ada/libgnat/a-wtflau.ads +++ b/gcc/ada/libgnat/a-wtflau.ads @@ -31,41 +31,42 @@ -- This package contains the routines for Ada.Wide_Text_IO.Float_IO that -- are shared among separate instantiations of this package. The routines --- in this package are identical semantically to those in Float_IO itself, --- except that generic parameter Num has been replaced by Long_Long_Float, --- and the default parameters have been removed because they are supplied +-- in this package are identical semantically to those in Float_IO, except +-- that the default parameters have been removed because they are supplied -- explicitly by the calls from within the generic template. This package --- is also used by Ada.Wide_Text_IO.Fixed_IO, Ada.Wide_Text_IO.Decimal_IO. +-- is also used by Ada.Wide_Text_IO.Fixed_IO and Ada.Wide_Text_IO.Decimal_IO. -private package Ada.Wide_Text_IO.Float_Aux is +private generic - procedure Load_Real - (File : File_Type; - Buf : out String; - Ptr : in out Natural); - -- This is an auxiliary routine that is used to load a possibly signed - -- real literal value from the input file into Buf, starting at Ptr + 1. + type Num is digits <>; + + with function Scan + (Str : String; + Ptr : not null access Integer; + Max : Integer) return Num; + +package Ada.Wide_Text_IO.Float_Aux is procedure Get (File : File_Type; - Item : out Long_Long_Float; + Item : out Num; Width : Field); - procedure Gets - (From : String; - Item : out Long_Long_Float; - Last : out Positive); - procedure Put (File : File_Type; - Item : Long_Long_Float; + Item : Num; Fore : Field; Aft : Field; Exp : Field); + procedure Gets + (From : String; + Item : out Num; + Last : out Positive); + procedure Puts (To : out String; - Item : Long_Long_Float; + Item : Num; Aft : Field; Exp : Field); diff --git a/gcc/ada/libgnat/a-wtflio.adb b/gcc/ada/libgnat/a-wtflio.adb index a7df6d9..3691786 100644 --- a/gcc/ada/libgnat/a-wtflio.adb +++ b/gcc/ada/libgnat/a-wtflio.adb @@ -30,13 +30,31 @@ ------------------------------------------------------------------------------ with Ada.Wide_Text_IO.Float_Aux; - -with System.WCh_Con; use System.WCh_Con; -with System.WCh_WtS; use System.WCh_WtS; +with System.Val_Flt; use System.Val_Flt; +with System.Val_LFlt; use System.Val_LFlt; +with System.Val_LLF; use System.Val_LLF; +with System.WCh_Con; use System.WCh_Con; +with System.WCh_WtS; use System.WCh_WtS; package body Ada.Wide_Text_IO.Float_IO is - package Aux renames Ada.Wide_Text_IO.Float_Aux; + package Aux_Float is new + Ada.Wide_Text_IO.Float_Aux (Float, Scan_Float); + + package Aux_Long_Float is new + Ada.Wide_Text_IO.Float_Aux (Long_Float, Scan_Long_Float); + + package Aux_Long_Long_Float is new + Ada.Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + + -- Throughout this generic body, we distinguish between the case where type + -- Float is OK, where type Long_Float is OK and where type Long_Long_Float + -- is needed. These boolean constants are used to test for this, such that + -- only code for the relevant case is included in the instance. + + OK_Float : constant Boolean := Num'Base'Digits <= Float'Digits; + + OK_Long_Float : constant Boolean := Num'Base'Digits <= Long_Float'Digits; --------- -- Get -- @@ -47,8 +65,25 @@ package body Ada.Wide_Text_IO.Float_IO is Item : out Num; Width : Field := 0) is + pragma Unsuppress (Range_Check); + begin - Aux.Get (File, Long_Long_Float (Item), Width); + if OK_Float then + Aux_Float.Get (File, Float (Item), Width); + elsif OK_Long_Float then + Aux_Long_Float.Get (File, Long_Float (Item), Width); + else + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); + end if; + + -- In the case where the type is unconstrained (e.g. Standard'Float), + -- the above conversion may result in an infinite value, which is + -- normally fine for a conversion, but in this case, we want to treat + -- that as a data error. + + if not Item'Valid then + raise Data_Error; + end if; exception when Constraint_Error => raise Data_Error; @@ -59,7 +94,7 @@ package body Ada.Wide_Text_IO.Float_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -67,6 +102,8 @@ package body Ada.Wide_Text_IO.Float_IO is Item : out Num; Last : out Positive) is + pragma Unsuppress (Range_Check); + S : constant String := Wide_String_To_String (From, WCEM_Upper); -- String on which we do the actual conversion. Note that the method -- used for wide character encoding is irrelevant, since if there is @@ -74,7 +111,22 @@ package body Ada.Wide_Text_IO.Float_IO is -- Aux.Gets will raise Data_Error in any case. begin - Aux.Gets (S, Long_Long_Float (Item), Last); + if OK_Float then + Aux_Float.Gets (S, Float (Item), Last); + elsif OK_Long_Float then + Aux_Long_Float.Gets (S, Long_Float (Item), Last); + else + Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last); + end if; + + -- In the case where the type is unconstrained (e.g. Standard'Float), + -- the above conversion may result in an infinite value, which is + -- normally fine for a conversion, but in this case, we want to treat + -- that as a data error. + + if not Item'Valid then + raise Data_Error; + end if; exception when Constraint_Error => raise Data_Error; @@ -92,7 +144,14 @@ package body Ada.Wide_Text_IO.Float_IO is Exp : Field := Default_Exp) is begin - Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + if OK_Float then + Aux_Float.Put (File, Float (Item), Fore, Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp); + else + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); + end if; end Put; procedure Put @@ -102,7 +161,7 @@ package body Ada.Wide_Text_IO.Float_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put @@ -114,7 +173,13 @@ package body Ada.Wide_Text_IO.Float_IO is S : String (To'First .. To'Last); begin - Aux.Puts (S, Long_Long_Float (Item), Aft, Exp); + if OK_Float then + Aux_Float.Puts (S, Float (Item), Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Puts (S, Long_Float (Item), Aft, Exp); + else + Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp); + end if; for J in S'Range loop To (J) := Wide_Character'Val (Character'Pos (S (J))); diff --git a/gcc/ada/libgnat/a-wtgeau.adb b/gcc/ada/libgnat/a-wtgeau.adb index 9d24070..bc9b459 100644 --- a/gcc/ada/libgnat/a-wtgeau.adb +++ b/gcc/ada/libgnat/a-wtgeau.adb @@ -403,6 +403,106 @@ package body Ada.Wide_Text_IO.Generic_Aux is end Load_Integer; --------------- + -- Load_Real -- + --------------- + + procedure Load_Real + (File : File_Type; + Buf : out String; + Ptr : in out Natural) + is + Loaded : Boolean; + + begin + -- Skip initial blanks and load possible sign + + Load_Skip (File); + Load (File, Buf, Ptr, '+', '-'); + + -- Case of .nnnn + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Digits (File, Buf, Ptr, Loaded); + + -- Hopeless junk if no digits loaded + + if not Loaded then + return; + end if; + + -- Otherwise must have digits to start + + else + Load_Digits (File, Buf, Ptr, Loaded); + + -- Hopeless junk if no digits loaded + + if not Loaded then + return; + end if; + + -- Deal with based case. We recognize either the standard '#' or the + -- allowed alternative replacement ':' (see RM J.2(3)). + + Load (File, Buf, Ptr, '#', ':', Loaded); + + if Loaded then + + -- Case of nnn#.xxx# + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Extended_Digits (File, Buf, Ptr); + Load (File, Buf, Ptr, '#', ':'); + + -- Case of nnn#xxx.[xxx]# or nnn#xxx# + + else + Load_Extended_Digits (File, Buf, Ptr); + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Extended_Digits (File, Buf, Ptr); + end if; + + -- As usual, it seems strange to allow mixed base characters, + -- but that is what ACVC tests expect, see CE3804M, case (3). + + Load (File, Buf, Ptr, '#', ':'); + end if; + + -- Case of nnn.[nnn] or nnn + + else + -- Prevent the potential processing of '.' in cases where the + -- initial digits have a trailing underscore. + + if Buf (Ptr) = '_' then + return; + end if; + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Digits (File, Buf, Ptr); + end if; + end if; + end if; + + -- Deal with exponent + + Load (File, Buf, Ptr, 'E', 'e', Loaded); + + if Loaded then + Load (File, Buf, Ptr, '+', '-'); + Load_Digits (File, Buf, Ptr); + end if; + end Load_Real; + + --------------- -- Load_Skip -- --------------- diff --git a/gcc/ada/libgnat/a-wtgeau.ads b/gcc/ada/libgnat/a-wtgeau.ads index 9577ac2..7c89971 100644 --- a/gcc/ada/libgnat/a-wtgeau.ads +++ b/gcc/ada/libgnat/a-wtgeau.ads @@ -155,6 +155,12 @@ package Ada.Wide_Text_IO.Generic_Aux is Ptr : in out Natural); -- Loads a possibly signed integer literal value + procedure Load_Real + (File : File_Type; + Buf : out String; + Ptr : in out Natural); + -- Loads a possibly signed real literal value + procedure Put_Item (File : File_Type; Str : String); -- This routine is like Wide_Text_IO.Put, except that it checks for -- overflow of bounded lines, as described in (RM A.10.6(8)). It is used diff --git a/gcc/ada/libgnat/a-wtinio.adb b/gcc/ada/libgnat/a-wtinio.adb index dff0b68..b322433 100644 --- a/gcc/ada/libgnat/a-wtinio.adb +++ b/gcc/ada/libgnat/a-wtinio.adb @@ -95,7 +95,7 @@ package body Ada.Wide_Text_IO.Integer_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -149,7 +149,7 @@ package body Ada.Wide_Text_IO.Integer_IO is Base : Number_Base := Default_Base) is begin - Put (Current_Output, Item, Width, Base); + Put (Current_Out, Item, Width, Base); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-wtinio__128.adb b/gcc/ada/libgnat/a-wtinio__128.adb index 8936f49..0eea7b5 100644 --- a/gcc/ada/libgnat/a-wtinio__128.adb +++ b/gcc/ada/libgnat/a-wtinio__128.adb @@ -111,7 +111,7 @@ package body Ada.Wide_Text_IO.Integer_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -169,7 +169,7 @@ package body Ada.Wide_Text_IO.Integer_IO is Base : Number_Base := Default_Base) is begin - Put (Current_Output, Item, Width, Base); + Put (Current_Out, Item, Width, Base); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-wtmoio.adb b/gcc/ada/libgnat/a-wtmoio.adb index 4fe5beb..efab035 100644 --- a/gcc/ada/libgnat/a-wtmoio.adb +++ b/gcc/ada/libgnat/a-wtmoio.adb @@ -94,7 +94,7 @@ package body Ada.Wide_Text_IO.Modular_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -147,7 +147,7 @@ package body Ada.Wide_Text_IO.Modular_IO is Base : Number_Base := Default_Base) is begin - Put (Current_Output, Item, Width, Base); + Put (Current_Out, Item, Width, Base); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-wtmoio__128.adb b/gcc/ada/libgnat/a-wtmoio__128.adb index 0dbf06e..a32eaf2 100644 --- a/gcc/ada/libgnat/a-wtmoio__128.adb +++ b/gcc/ada/libgnat/a-wtmoio__128.adb @@ -110,7 +110,7 @@ package body Ada.Wide_Text_IO.Modular_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -167,7 +167,7 @@ package body Ada.Wide_Text_IO.Modular_IO is Base : Number_Base := Default_Base) is begin - Put (Current_Output, Item, Width, Base); + Put (Current_Out, Item, Width, Base); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-ztcoau.adb b/gcc/ada/libgnat/a-ztcoau.adb index ffe0a90..bb33680 100644 --- a/gcc/ada/libgnat/a-ztcoau.adb +++ b/gcc/ada/libgnat/a-ztcoau.adb @@ -30,22 +30,19 @@ ------------------------------------------------------------------------------ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux; -with Ada.Wide_Wide_Text_IO.Float_Aux; with System.Img_Real; use System.Img_Real; package body Ada.Wide_Wide_Text_IO.Complex_Aux is - package Aux renames Ada.Wide_Wide_Text_IO.Float_Aux; - --------- -- Get -- --------- procedure Get (File : File_Type; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Width : Field) is Buf : String (1 .. Field'Last); @@ -95,8 +92,8 @@ package body Ada.Wide_Wide_Text_IO.Complex_Aux is procedure Gets (From : String; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Last : out Positive) is Paren : Boolean; @@ -139,8 +136,8 @@ package body Ada.Wide_Wide_Text_IO.Complex_Aux is procedure Put (File : File_Type; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Fore : Field; Aft : Field; Exp : Field) @@ -159,8 +156,8 @@ package body Ada.Wide_Wide_Text_IO.Complex_Aux is procedure Puts (To : out String; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Aft : Field; Exp : Field) is @@ -174,9 +171,9 @@ package body Ada.Wide_Wide_Text_IO.Complex_Aux is -- Both parts are initially converted with a Fore of 0 Rptr := 0; - Set_Image_Real (ItemR, R_String, Rptr, 0, Aft, Exp); + Set_Image_Real (Long_Long_Float (ItemR), R_String, Rptr, 0, Aft, Exp); Iptr := 0; - Set_Image_Real (ItemI, I_String, Iptr, 0, Aft, Exp); + Set_Image_Real (Long_Long_Float (ItemI), I_String, Iptr, 0, Aft, Exp); -- Check room for both parts plus parens plus comma (RM G.1.3(34)) diff --git a/gcc/ada/libgnat/a-ztcoau.ads b/gcc/ada/libgnat/a-ztcoau.ads index b68c38b..43546d8 100644 --- a/gcc/ada/libgnat/a-ztcoau.ads +++ b/gcc/ada/libgnat/a-ztcoau.ads @@ -15,38 +15,45 @@ -- This package contains the routines for Ada.Wide_Wide_Text_IO.Complex_IO -- that are shared among separate instantiations of this package. The routines --- in this package are identical semantically to those in Complex_IO itself, --- except that the generic parameter Complex has been replaced by separate --- real and imaginary values of type Long_Long_Float, and default parameters --- have been removed because they are supplied explicitly by the calls from --- within the generic template. +-- in this package are identical semantically to those in Complex_IO, except +-- that the generic parameter Complex has been replaced by separate real and +-- imaginary parameters, and default parameters have been removed because they +-- are supplied explicitly by the calls from within the generic template. + +with Ada.Wide_Wide_Text_IO.Float_Aux; + +private generic + + type Num is digits <>; + + with package Aux is new Ada.Wide_Wide_Text_IO.Float_Aux (Num, <>); package Ada.Wide_Wide_Text_IO.Complex_Aux is procedure Get (File : File_Type; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; + ItemR : out Num; + ItemI : out Num; Width : Field); - procedure Gets - (From : String; - ItemR : out Long_Long_Float; - ItemI : out Long_Long_Float; - Last : out Positive); - procedure Put (File : File_Type; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Fore : Field; Aft : Field; Exp : Field); + procedure Gets + (From : String; + ItemR : out Num; + ItemI : out Num; + Last : out Positive); + procedure Puts (To : out String; - ItemR : Long_Long_Float; - ItemI : Long_Long_Float; + ItemR : Num; + ItemI : Num; Aft : Field; Exp : Field); diff --git a/gcc/ada/libgnat/a-ztcoio.adb b/gcc/ada/libgnat/a-ztcoio.adb index ead1234..5103191 100644 --- a/gcc/ada/libgnat/a-ztcoio.adb +++ b/gcc/ada/libgnat/a-ztcoio.adb @@ -30,24 +30,46 @@ ------------------------------------------------------------------------------ with Ada.Wide_Wide_Text_IO.Complex_Aux; - -with System.WCh_Con; use System.WCh_Con; -with System.WCh_WtS; use System.WCh_WtS; +with Ada.Wide_Wide_Text_IO.Float_Aux; +with System.Val_Flt; use System.Val_Flt; +with System.Val_LFlt; use System.Val_LFlt; +with System.Val_LLF; use System.Val_LLF; +with System.WCh_Con; use System.WCh_Con; +with System.WCh_WtS; use System.WCh_WtS; with Ada.Unchecked_Conversion; package body Ada.Wide_Wide_Text_IO.Complex_IO is - package Aux renames Ada.Wide_Wide_Text_IO.Complex_Aux; + use Complex_Types; + + package Scalar_Float is new + Ada.Wide_Wide_Text_IO.Float_Aux (Float, Scan_Float); + + package Scalar_Long_Float is new + Ada.Wide_Wide_Text_IO.Float_Aux (Long_Float, Scan_Long_Float); + + package Scalar_Long_Long_Float is new + Ada.Wide_Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + + package Aux_Float is new + Ada.Wide_Wide_Text_IO.Complex_Aux (Float, Scalar_Float); - subtype LLF is Long_Long_Float; - -- Type used for calls to routines in Aux + package Aux_Long_Float is new + Ada.Wide_Wide_Text_IO.Complex_Aux (Long_Float, Scalar_Long_Float); - function TFT is new - Ada.Unchecked_Conversion (File_Type, Ada.Wide_Wide_Text_IO.File_Type); - -- This unchecked conversion is to get around a visibility bug in - -- GNAT version 2.04w. It should be possible to simply use the - -- subtype declared above and do normal checked conversions. + package Aux_Long_Long_Float is new + Ada.Wide_Wide_Text_IO.Complex_Aux + (Long_Long_Float, Scalar_Long_Long_Float); + + -- Throughout this generic body, we distinguish between the case where type + -- Float is OK, where type Long_Float is OK and where type Long_Long_Float + -- is needed. These boolean constants are used to test for this, such that + -- only code for the relevant case is included in the instance. + + OK_Float : constant Boolean := Real'Base'Digits <= Float'Digits; + + OK_Long_Float : constant Boolean := Real'Base'Digits <= Long_Float'Digits; --------- -- Get -- @@ -62,7 +84,17 @@ package body Ada.Wide_Wide_Text_IO.Complex_IO is Imag_Item : Real'Base; begin - Aux.Get (TFT (File), LLF (Real_Item), LLF (Imag_Item), Width); + if OK_Float then + Aux_Float.Get (File, Float (Real_Item), Float (Imag_Item), Width); + elsif OK_Long_Float then + Aux_Long_Float.Get + (File, Long_Float (Real_Item), Long_Float (Imag_Item), Width); + else + Aux_Long_Long_Float.Get + (File, Long_Long_Float (Real_Item), Long_Long_Float (Imag_Item), + Width); + end if; + Item := (Real_Item, Imag_Item); exception @@ -78,7 +110,7 @@ package body Ada.Wide_Wide_Text_IO.Complex_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; --------- @@ -100,7 +132,17 @@ package body Ada.Wide_Wide_Text_IO.Complex_IO is -- Aux.Gets will raise Data_Error in any case. begin - Aux.Gets (S, LLF (Real_Item), LLF (Imag_Item), Last); + if OK_Float then + Aux_Float.Gets (S, Float (Real_Item), Float (Imag_Item), Last); + elsif OK_Long_Float then + Aux_Long_Float.Gets + (S, Long_Float (Real_Item), Long_Float (Imag_Item), Last); + else + Aux_Long_Long_Float.Gets + (S, Long_Long_Float (Real_Item), Long_Long_Float (Imag_Item), + Last); + end if; + Item := (Real_Item, Imag_Item); exception @@ -119,7 +161,18 @@ package body Ada.Wide_Wide_Text_IO.Complex_IO is Exp : Field := Default_Exp) is begin - Aux.Put (TFT (File), LLF (Re (Item)), LLF (Im (Item)), Fore, Aft, Exp); + if OK_Float then + Aux_Float.Put + (File, Float (Re (Item)), Float (Im (Item)), Fore, Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Put + (File, Long_Float (Re (Item)), Long_Float (Im (Item)), Fore, Aft, + Exp); + else + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Re (Item)), Long_Long_Float (Im (Item)), + Fore, Aft, Exp); + end if; end Put; --------- @@ -133,7 +186,7 @@ package body Ada.Wide_Wide_Text_IO.Complex_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; --------- @@ -149,7 +202,16 @@ package body Ada.Wide_Wide_Text_IO.Complex_IO is S : String (To'First .. To'Last); begin - Aux.Puts (S, LLF (Re (Item)), LLF (Im (Item)), Aft, Exp); + if OK_Float then + Aux_Float.Puts (S, Float (Re (Item)), Float (Im (Item)), Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Puts + (S, Long_Float (Re (Item)), Long_Float (Im (Item)), Aft, Exp); + else + Aux_Long_Long_Float.Puts + (S, Long_Long_Float (Re (Item)), Long_Long_Float (Im (Item)), + Aft, Exp); + end if; for J in S'Range loop To (J) := Wide_Wide_Character'Val (Character'Pos (S (J))); diff --git a/gcc/ada/libgnat/a-ztcoio.ads b/gcc/ada/libgnat/a-ztcoio.ads index 866fd87..2a08153 100644 --- a/gcc/ada/libgnat/a-ztcoio.ads +++ b/gcc/ada/libgnat/a-ztcoio.ads @@ -23,39 +23,39 @@ package Ada.Wide_Wide_Text_IO.Complex_IO is use Complex_Types; Default_Fore : Field := 2; - Default_Aft : Field := Real'Digits - 1; + Default_Aft : Field := Complex_Types.Real'Digits - 1; Default_Exp : Field := 3; procedure Get (File : File_Type; - Item : out Complex; + Item : out Complex_Types.Complex; Width : Field := 0); procedure Get - (Item : out Complex; + (Item : out Complex_Types.Complex; Width : Field := 0); procedure Put (File : File_Type; - Item : Complex; + Item : Complex_Types.Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); procedure Put - (Item : Complex; + (Item : Complex_Types.Complex; Fore : Field := Default_Fore; Aft : Field := Default_Aft; Exp : Field := Default_Exp); procedure Get (From : Wide_Wide_String; - Item : out Complex; + Item : out Complex_Types.Complex; Last : out Positive); procedure Put (To : out Wide_Wide_String; - Item : Complex; + Item : Complex_Types.Complex; Aft : Field := Default_Aft; Exp : Field := Default_Exp); diff --git a/gcc/ada/libgnat/a-ztdeau.adb b/gcc/ada/libgnat/a-ztdeau.adb index 6c2af9f..ec6431b 100644 --- a/gcc/ada/libgnat/a-ztdeau.adb +++ b/gcc/ada/libgnat/a-ztdeau.adb @@ -30,7 +30,6 @@ ------------------------------------------------------------------------------ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux; -with Ada.Wide_Wide_Text_IO.Float_Aux; use Ada.Wide_Wide_Text_IO.Float_Aux; package body Ada.Wide_Wide_Text_IO.Decimal_Aux is diff --git a/gcc/ada/libgnat/a-ztdeio.adb b/gcc/ada/libgnat/a-ztdeio.adb index cd26914..1d9f5d8 100644 --- a/gcc/ada/libgnat/a-ztdeio.adb +++ b/gcc/ada/libgnat/a-ztdeio.adb @@ -89,7 +89,7 @@ package body Ada.Wide_Wide_Text_IO.Decimal_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -144,7 +144,7 @@ package body Ada.Wide_Wide_Text_IO.Decimal_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-ztdeio__128.adb b/gcc/ada/libgnat/a-ztdeio__128.adb index e160a01..156a66d 100644 --- a/gcc/ada/libgnat/a-ztdeio__128.adb +++ b/gcc/ada/libgnat/a-ztdeio__128.adb @@ -102,7 +102,7 @@ package body Ada.Wide_Wide_Text_IO.Decimal_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -162,7 +162,7 @@ package body Ada.Wide_Wide_Text_IO.Decimal_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-ztenio.adb b/gcc/ada/libgnat/a-ztenio.adb index 5a61874..6c35b9f 100644 --- a/gcc/ada/libgnat/a-ztenio.adb +++ b/gcc/ada/libgnat/a-ztenio.adb @@ -51,7 +51,7 @@ package body Ada.Wide_Wide_Text_IO.Enumeration_IO is procedure Get (Item : out Enum) is begin - Get (Current_Input, Item); + Get (Current_In, Item); end Get; procedure Get @@ -88,7 +88,7 @@ package body Ada.Wide_Wide_Text_IO.Enumeration_IO is Set : Type_Set := Default_Setting) is begin - Put (Current_Output, Item, Width, Set); + Put (Current_Out, Item, Width, Set); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-ztfiau.adb b/gcc/ada/libgnat/a-ztfiau.adb index f26a16a..1e94fef 100644 --- a/gcc/ada/libgnat/a-ztfiau.adb +++ b/gcc/ada/libgnat/a-ztfiau.adb @@ -30,7 +30,6 @@ ------------------------------------------------------------------------------ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux; -with Ada.Wide_Wide_Text_IO.Float_Aux; use Ada.Wide_Wide_Text_IO.Float_Aux; package body Ada.Wide_Wide_Text_IO.Fixed_Aux is diff --git a/gcc/ada/libgnat/a-ztfiio.adb b/gcc/ada/libgnat/a-ztfiio.adb index c666c7b5..53ed45b 100644 --- a/gcc/ada/libgnat/a-ztfiio.adb +++ b/gcc/ada/libgnat/a-ztfiio.adb @@ -36,6 +36,7 @@ with System.Img_Fixed_32; use System.Img_Fixed_32; with System.Img_Fixed_64; use System.Img_Fixed_64; with System.Val_Fixed_32; use System.Val_Fixed_32; with System.Val_Fixed_64; use System.Val_Fixed_64; +with System.Val_LLF; use System.Val_LLF; with System.WCh_Con; use System.WCh_Con; with System.WCh_WtS; use System.WCh_WtS; @@ -55,6 +56,9 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is package Aux64 is new Ada.Wide_Wide_Text_IO.Fixed_Aux (Int64, Scan_Fixed64, Set_Image_Fixed64); + package Aux_Long_Long_Float is new + Ada.Wide_Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + -- Throughout this generic body, we distinguish between the case where type -- Int32 is OK and where type Int64 is OK. These boolean constants are used -- to test for this, such that only code for the relevant case is included @@ -62,7 +66,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- static (although it is not a static expressions in the RM sense). OK_Get_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -73,7 +77,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -87,7 +91,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -98,7 +102,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -157,7 +161,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Get (File, Long_Long_Float (Item), Width); + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); end if; exception @@ -169,7 +173,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -197,7 +201,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Gets (S, Long_Long_Float (Item), Last); + Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last); end if; exception @@ -225,7 +229,8 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); end if; end Put; @@ -236,7 +241,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put @@ -257,7 +262,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp); + Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp); end if; for J in S'Range loop diff --git a/gcc/ada/libgnat/a-ztfiio__128.adb b/gcc/ada/libgnat/a-ztfiio__128.adb index 4704146..13ed410 100644 --- a/gcc/ada/libgnat/a-ztfiio__128.adb +++ b/gcc/ada/libgnat/a-ztfiio__128.adb @@ -38,6 +38,7 @@ with System.Img_Fixed_128; use System.Img_Fixed_128; with System.Val_Fixed_32; use System.Val_Fixed_32; with System.Val_Fixed_64; use System.Val_Fixed_64; with System.Val_Fixed_128; use System.Val_Fixed_128; +with System.Val_LLF; use System.Val_LLF; with System.WCh_Con; use System.WCh_Con; with System.WCh_WtS; use System.WCh_WtS; @@ -62,6 +63,9 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is Ada.Wide_Wide_Text_IO.Fixed_Aux (Int128, Scan_Fixed128, Set_Image_Fixed128); + package Aux_Long_Long_Float is new + Ada.Wide_Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + -- Throughout this generic body, we distinguish between the case where type -- Int32 is OK, where type Int64 is OK and where type Int128 is OK. These -- boolean constants are used to test for this, such that only code for the @@ -70,7 +74,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- in the RM sense). OK_Get_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -81,7 +85,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_32 : constant Boolean := - Num'Object_Size <= 32 + Num'Base'Object_Size <= 32 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**31) or else @@ -95,7 +99,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -106,7 +110,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_64 : constant Boolean := - Num'Object_Size <= 64 + Num'Base'Object_Size <= 64 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**63) or else @@ -120,7 +124,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Image_F OK_Get_128 : constant Boolean := - Num'Object_Size <= 128 + Num'Base'Object_Size <= 128 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127) or else @@ -131,7 +135,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -- These conditions are derived from the prerequisites of System.Value_F OK_Put_128 : constant Boolean := - Num'Object_Size <= 128 + Num'Base'Object_Size <= 128 and then ((Num'Small_Numerator = 1 and then Num'Small_Denominator <= 2**127) or else @@ -198,7 +202,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Get (File, Long_Long_Float (Item), Width); + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); end if; exception @@ -210,7 +214,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -243,7 +247,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator)); else - Float_Aux.Gets (S, Long_Long_Float (Item), Last); + Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last); end if; exception @@ -275,7 +279,8 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); end if; end Put; @@ -286,7 +291,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put @@ -311,7 +316,7 @@ package body Ada.Wide_Wide_Text_IO.Fixed_IO is -Num'Small_Numerator, -Num'Small_Denominator, For0, Num'Aft); else - Float_Aux.Puts (S, Long_Long_Float (Item), Aft, Exp); + Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp); end if; for J in S'Range loop diff --git a/gcc/ada/libgnat/a-ztflau.adb b/gcc/ada/libgnat/a-ztflau.adb index c0c55ba..1bddcd8 100644 --- a/gcc/ada/libgnat/a-ztflau.adb +++ b/gcc/ada/libgnat/a-ztflau.adb @@ -31,8 +31,7 @@ with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux; -with System.Img_Real; use System.Img_Real; -with System.Val_Real; use System.Val_Real; +with System.Img_Real; use System.Img_Real; package body Ada.Wide_Wide_Text_IO.Float_Aux is @@ -42,12 +41,12 @@ package body Ada.Wide_Wide_Text_IO.Float_Aux is procedure Get (File : File_Type; - Item : out Long_Long_Float; + Item : out Num; Width : Field) is Buf : String (1 .. Field'Last); Stop : Integer := 0; - Ptr : aliased Integer := 1; + Ptr : aliased Integer; begin if Width /= 0 then @@ -55,10 +54,10 @@ package body Ada.Wide_Wide_Text_IO.Float_Aux is String_Skip (Buf, Ptr); else Load_Real (File, Buf, Stop); + Ptr := 1; end if; - Item := Scan_Real (Buf, Ptr'Access, Stop); - + Item := Scan (Buf, Ptr'Access, Stop); Check_End_Of_Field (Buf, Stop, Ptr, Width); end Get; @@ -68,137 +67,36 @@ package body Ada.Wide_Wide_Text_IO.Float_Aux is procedure Gets (From : String; - Item : out Long_Long_Float; + Item : out Num; Last : out Positive) is Pos : aliased Integer; begin String_Skip (From, Pos); - Item := Scan_Real (From, Pos'Access, From'Last); + Item := Scan (From, Pos'Access, From'Last); Last := Pos - 1; exception - when Constraint_Error => - raise Data_Error; + when Constraint_Error => raise Data_Error; end Gets; - --------------- - -- Load_Real -- - --------------- - - procedure Load_Real - (File : File_Type; - Buf : out String; - Ptr : in out Natural) - is - Loaded : Boolean; - - begin - -- Skip initial blanks and load possible sign - - Load_Skip (File); - Load (File, Buf, Ptr, '+', '-'); - - -- Case of .nnnn - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Digits (File, Buf, Ptr, Loaded); - - -- Hopeless junk if no digits loaded - - if not Loaded then - return; - end if; - - -- Otherwise must have digits to start - - else - Load_Digits (File, Buf, Ptr, Loaded); - - -- Hopeless junk if no digits loaded - - if not Loaded then - return; - end if; - - -- Deal with based case. We recognize either the standard '#' or the - -- allowed alternative replacement ':' (see RM J.2(3)). - - Load (File, Buf, Ptr, '#', ':', Loaded); - - if Loaded then - - -- Case of nnn#.xxx# - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Extended_Digits (File, Buf, Ptr); - Load (File, Buf, Ptr, '#', ':'); - - -- Case of nnn#xxx.[xxx]# or nnn#xxx# - - else - Load_Extended_Digits (File, Buf, Ptr); - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Extended_Digits (File, Buf, Ptr); - end if; - - -- As usual, it seems strange to allow mixed base characters, - -- but that is what ACVC tests expect, see CE3804M, case (3). - - Load (File, Buf, Ptr, '#', ':'); - end if; - - -- Case of nnn.[nnn] or nnn - - else - -- Prevent the potential processing of '.' in cases where the - -- initial digits have a trailing underscore. - - if Buf (Ptr) = '_' then - return; - end if; - - Load (File, Buf, Ptr, '.', Loaded); - - if Loaded then - Load_Digits (File, Buf, Ptr); - end if; - end if; - end if; - - -- Deal with exponent - - Load (File, Buf, Ptr, 'E', 'e', Loaded); - - if Loaded then - Load (File, Buf, Ptr, '+', '-'); - Load_Digits (File, Buf, Ptr); - end if; - end Load_Real; - --------- -- Put -- --------- procedure Put (File : File_Type; - Item : Long_Long_Float; + Item : Num; Fore : Field; Aft : Field; Exp : Field) is - Buf : String (1 .. Field'Last); + Buf : String (1 .. Max_Real_Image_Length); Ptr : Natural := 0; begin - Set_Image_Real (Item, Buf, Ptr, Fore, Aft, Exp); + Set_Image_Real (Long_Long_Float (Item), Buf, Ptr, Fore, Aft, Exp); Put_Item (File, Buf (1 .. Ptr)); end Put; @@ -208,15 +106,16 @@ package body Ada.Wide_Wide_Text_IO.Float_Aux is procedure Puts (To : out String; - Item : Long_Long_Float; + Item : Num; Aft : Field; Exp : Field) is - Buf : String (1 .. Field'Last); - Ptr : Natural := 0; + Buf : String (1 .. Max_Real_Image_Length); + Ptr : Natural := 0; begin - Set_Image_Real (Item, Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp); + Set_Image_Real + (Long_Long_Float (Item), Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp); if Ptr > To'Length then raise Layout_Error; diff --git a/gcc/ada/libgnat/a-ztflau.ads b/gcc/ada/libgnat/a-ztflau.ads index dc24682..48fba82 100644 --- a/gcc/ada/libgnat/a-ztflau.ads +++ b/gcc/ada/libgnat/a-ztflau.ads @@ -31,41 +31,42 @@ -- This package contains the routines for Ada.Wide_Wide_Text_IO.Float_IO that -- are shared among separate instantiations of this package. The routines --- in this package are identical semantically to those in Float_IO itself, --- except that generic parameter Num has been replaced by Long_Long_Float, --- and the default parameters have been removed because they are supplied +-- in this package are identical semantically to those in Float_IO, except +-- that the default parameters have been removed because they are supplied -- explicitly by the calls from within the generic template. Also used by --- Ada.Wide_Wide_Text_IO.Fixed_IO, and by Ada.Wide_Wide_Text_IO.Decimal_IO. +-- Ada.Wide_Wide_Text_IO.Fixed_IO and by Ada.Wide_Wide_Text_IO.Decimal_IO. -private package Ada.Wide_Wide_Text_IO.Float_Aux is +private generic - procedure Load_Real - (File : File_Type; - Buf : out String; - Ptr : in out Natural); - -- This is an auxiliary routine that is used to load a possibly signed - -- real literal value from the input file into Buf, starting at Ptr + 1. + type Num is digits <>; + + with function Scan + (Str : String; + Ptr : not null access Integer; + Max : Integer) return Num; + +package Ada.Wide_Wide_Text_IO.Float_Aux is procedure Get (File : File_Type; - Item : out Long_Long_Float; + Item : out Num; Width : Field); - procedure Gets - (From : String; - Item : out Long_Long_Float; - Last : out Positive); - procedure Put (File : File_Type; - Item : Long_Long_Float; + Item : Num; Fore : Field; Aft : Field; Exp : Field); + procedure Gets + (From : String; + Item : out Num; + Last : out Positive); + procedure Puts (To : out String; - Item : Long_Long_Float; + Item : Num; Aft : Field; Exp : Field); diff --git a/gcc/ada/libgnat/a-ztflio.adb b/gcc/ada/libgnat/a-ztflio.adb index bb52f38..e491e62 100644 --- a/gcc/ada/libgnat/a-ztflio.adb +++ b/gcc/ada/libgnat/a-ztflio.adb @@ -30,12 +30,31 @@ ------------------------------------------------------------------------------ with Ada.Wide_Wide_Text_IO.Float_Aux; -with System.WCh_Con; use System.WCh_Con; -with System.WCh_WtS; use System.WCh_WtS; +with System.Val_Flt; use System.Val_Flt; +with System.Val_LFlt; use System.Val_LFlt; +with System.Val_LLF; use System.Val_LLF; +with System.WCh_Con; use System.WCh_Con; +with System.WCh_WtS; use System.WCh_WtS; package body Ada.Wide_Wide_Text_IO.Float_IO is - package Aux renames Ada.Wide_Wide_Text_IO.Float_Aux; + package Aux_Float is new + Ada.Wide_Wide_Text_IO.Float_Aux (Float, Scan_Float); + + package Aux_Long_Float is new + Ada.Wide_Wide_Text_IO.Float_Aux (Long_Float, Scan_Long_Float); + + package Aux_Long_Long_Float is new + Ada.Wide_Wide_Text_IO.Float_Aux (Long_Long_Float, Scan_Long_Long_Float); + + -- Throughout this generic body, we distinguish between the case where type + -- Float is OK, where type Long_Float is OK and where type Long_Long_Float + -- is needed. These boolean constants are used to test for this, such that + -- only code for the relevant case is included in the instance. + + OK_Float : constant Boolean := Num'Base'Digits <= Float'Digits; + + OK_Long_Float : constant Boolean := Num'Base'Digits <= Long_Float'Digits; --------- -- Get -- @@ -46,8 +65,25 @@ package body Ada.Wide_Wide_Text_IO.Float_IO is Item : out Num; Width : Field := 0) is + pragma Unsuppress (Range_Check); + begin - Aux.Get (File, Long_Long_Float (Item), Width); + if OK_Float then + Aux_Float.Get (File, Float (Item), Width); + elsif OK_Long_Float then + Aux_Long_Float.Get (File, Long_Float (Item), Width); + else + Aux_Long_Long_Float.Get (File, Long_Long_Float (Item), Width); + end if; + + -- In the case where the type is unconstrained (e.g. Standard'Float), + -- the above conversion may result in an infinite value, which is + -- normally fine for a conversion, but in this case, we want to treat + -- that as a data error. + + if not Item'Valid then + raise Data_Error; + end if; exception when Constraint_Error => raise Data_Error; @@ -58,7 +94,7 @@ package body Ada.Wide_Wide_Text_IO.Float_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -66,6 +102,8 @@ package body Ada.Wide_Wide_Text_IO.Float_IO is Item : out Num; Last : out Positive) is + pragma Unsuppress (Range_Check); + S : constant String := Wide_Wide_String_To_String (From, WCEM_Upper); -- String on which we do the actual conversion. Note that the method -- used for wide character encoding is irrelevant, since if there is @@ -73,7 +111,22 @@ package body Ada.Wide_Wide_Text_IO.Float_IO is -- Aux.Gets will raise Data_Error in any case. begin - Aux.Gets (S, Long_Long_Float (Item), Last); + if OK_Float then + Aux_Float.Gets (S, Float (Item), Last); + elsif OK_Long_Float then + Aux_Long_Float.Gets (S, Long_Float (Item), Last); + else + Aux_Long_Long_Float.Gets (S, Long_Long_Float (Item), Last); + end if; + + -- In the case where the type is unconstrained (e.g. Standard'Float), + -- the above conversion may result in an infinite value, which is + -- normally fine for a conversion, but in this case, we want to treat + -- that as a data error. + + if not Item'Valid then + raise Data_Error; + end if; exception when Constraint_Error => raise Data_Error; @@ -91,7 +144,14 @@ package body Ada.Wide_Wide_Text_IO.Float_IO is Exp : Field := Default_Exp) is begin - Aux.Put (File, Long_Long_Float (Item), Fore, Aft, Exp); + if OK_Float then + Aux_Float.Put (File, Float (Item), Fore, Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Put (File, Long_Float (Item), Fore, Aft, Exp); + else + Aux_Long_Long_Float.Put + (File, Long_Long_Float (Item), Fore, Aft, Exp); + end if; end Put; procedure Put @@ -101,7 +161,7 @@ package body Ada.Wide_Wide_Text_IO.Float_IO is Exp : Field := Default_Exp) is begin - Put (Current_Output, Item, Fore, Aft, Exp); + Put (Current_Out, Item, Fore, Aft, Exp); end Put; procedure Put @@ -113,7 +173,13 @@ package body Ada.Wide_Wide_Text_IO.Float_IO is S : String (To'First .. To'Last); begin - Aux.Puts (S, Long_Long_Float (Item), Aft, Exp); + if OK_Float then + Aux_Float.Puts (S, Float (Item), Aft, Exp); + elsif OK_Long_Float then + Aux_Long_Float.Puts (S, Long_Float (Item), Aft, Exp); + else + Aux_Long_Long_Float.Puts (S, Long_Long_Float (Item), Aft, Exp); + end if; for J in S'Range loop To (J) := Wide_Wide_Character'Val (Character'Pos (S (J))); diff --git a/gcc/ada/libgnat/a-ztgeau.adb b/gcc/ada/libgnat/a-ztgeau.adb index be7aecc..6b5e4c5 100644 --- a/gcc/ada/libgnat/a-ztgeau.adb +++ b/gcc/ada/libgnat/a-ztgeau.adb @@ -403,6 +403,106 @@ package body Ada.Wide_Wide_Text_IO.Generic_Aux is end Load_Integer; --------------- + -- Load_Real -- + --------------- + + procedure Load_Real + (File : File_Type; + Buf : out String; + Ptr : in out Natural) + is + Loaded : Boolean; + + begin + -- Skip initial blanks and load possible sign + + Load_Skip (File); + Load (File, Buf, Ptr, '+', '-'); + + -- Case of .nnnn + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Digits (File, Buf, Ptr, Loaded); + + -- Hopeless junk if no digits loaded + + if not Loaded then + return; + end if; + + -- Otherwise must have digits to start + + else + Load_Digits (File, Buf, Ptr, Loaded); + + -- Hopeless junk if no digits loaded + + if not Loaded then + return; + end if; + + -- Deal with based case. We recognize either the standard '#' or the + -- allowed alternative replacement ':' (see RM J.2(3)). + + Load (File, Buf, Ptr, '#', ':', Loaded); + + if Loaded then + + -- Case of nnn#.xxx# + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Extended_Digits (File, Buf, Ptr); + Load (File, Buf, Ptr, '#', ':'); + + -- Case of nnn#xxx.[xxx]# or nnn#xxx# + + else + Load_Extended_Digits (File, Buf, Ptr); + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Extended_Digits (File, Buf, Ptr); + end if; + + -- As usual, it seems strange to allow mixed base characters, + -- but that is what ACVC tests expect, see CE3804M, case (3). + + Load (File, Buf, Ptr, '#', ':'); + end if; + + -- Case of nnn.[nnn] or nnn + + else + -- Prevent the potential processing of '.' in cases where the + -- initial digits have a trailing underscore. + + if Buf (Ptr) = '_' then + return; + end if; + + Load (File, Buf, Ptr, '.', Loaded); + + if Loaded then + Load_Digits (File, Buf, Ptr); + end if; + end if; + end if; + + -- Deal with exponent + + Load (File, Buf, Ptr, 'E', 'e', Loaded); + + if Loaded then + Load (File, Buf, Ptr, '+', '-'); + Load_Digits (File, Buf, Ptr); + end if; + end Load_Real; + + --------------- -- Load_Skip -- --------------- diff --git a/gcc/ada/libgnat/a-ztgeau.ads b/gcc/ada/libgnat/a-ztgeau.ads index 68d4a33..6b80ed4 100644 --- a/gcc/ada/libgnat/a-ztgeau.ads +++ b/gcc/ada/libgnat/a-ztgeau.ads @@ -155,6 +155,12 @@ package Ada.Wide_Wide_Text_IO.Generic_Aux is Ptr : in out Natural); -- Loads a possibly signed integer literal value + procedure Load_Real + (File : File_Type; + Buf : out String; + Ptr : in out Natural); + -- Loads a possibly signed real literal value + procedure Put_Item (File : File_Type; Str : String); -- This routine is like Wide_Wide_Text_IO.Put, except that it checks for -- overflow of bounded lines, as described in (RM A.10.6(8)). It is used diff --git a/gcc/ada/libgnat/a-ztinio.adb b/gcc/ada/libgnat/a-ztinio.adb index 4d4708a..c19c8a6 100644 --- a/gcc/ada/libgnat/a-ztinio.adb +++ b/gcc/ada/libgnat/a-ztinio.adb @@ -95,7 +95,7 @@ package body Ada.Wide_Wide_Text_IO.Integer_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -149,7 +149,7 @@ package body Ada.Wide_Wide_Text_IO.Integer_IO is Base : Number_Base := Default_Base) is begin - Put (Current_Output, Item, Width, Base); + Put (Current_Out, Item, Width, Base); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-ztinio__128.adb b/gcc/ada/libgnat/a-ztinio__128.adb index 560539a9..19dcc34 100644 --- a/gcc/ada/libgnat/a-ztinio__128.adb +++ b/gcc/ada/libgnat/a-ztinio__128.adb @@ -111,7 +111,7 @@ package body Ada.Wide_Wide_Text_IO.Integer_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -169,7 +169,7 @@ package body Ada.Wide_Wide_Text_IO.Integer_IO is Base : Number_Base := Default_Base) is begin - Put (Current_Output, Item, Width, Base); + Put (Current_Out, Item, Width, Base); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-ztmoio.adb b/gcc/ada/libgnat/a-ztmoio.adb index 67087c6..ba854ff 100644 --- a/gcc/ada/libgnat/a-ztmoio.adb +++ b/gcc/ada/libgnat/a-ztmoio.adb @@ -94,7 +94,7 @@ package body Ada.Wide_Wide_Text_IO.Modular_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -147,7 +147,7 @@ package body Ada.Wide_Wide_Text_IO.Modular_IO is Base : Number_Base := Default_Base) is begin - Put (Current_Output, Item, Width, Base); + Put (Current_Out, Item, Width, Base); end Put; procedure Put diff --git a/gcc/ada/libgnat/a-ztmoio__128.adb b/gcc/ada/libgnat/a-ztmoio__128.adb index 71626cc..2101508 100644 --- a/gcc/ada/libgnat/a-ztmoio__128.adb +++ b/gcc/ada/libgnat/a-ztmoio__128.adb @@ -110,7 +110,7 @@ package body Ada.Wide_Wide_Text_IO.Modular_IO is Width : Field := 0) is begin - Get (Current_Input, Item, Width); + Get (Current_In, Item, Width); end Get; procedure Get @@ -167,7 +167,7 @@ package body Ada.Wide_Wide_Text_IO.Modular_IO is Base : Number_Base := Default_Base) is begin - Put (Current_Output, Item, Width, Base); + Put (Current_Out, Item, Width, Base); end Put; procedure Put diff --git a/gcc/ada/libgnat/g-diopit.adb b/gcc/ada/libgnat/g-diopit.adb index 50bbf9b..1e8627e 100644 --- a/gcc/ada/libgnat/g-diopit.adb +++ b/gcc/ada/libgnat/g-diopit.adb @@ -32,6 +32,7 @@ with Ada.Characters.Handling; with Ada.Strings.Fixed; with Ada.Strings.Maps; + with GNAT.OS_Lib; with GNAT.Regexp; @@ -49,7 +50,7 @@ package body GNAT.Directory_Operations.Iteration is is File_Regexp : constant Regexp.Regexp := Regexp.Compile (File_Pattern); Index : Natural := 0; - Quit : Boolean; + Quit : Boolean := False; procedure Read_Directory (Directory : Dir_Name_Str); -- Open Directory and read all entries. This routine is called @@ -113,6 +114,7 @@ package body GNAT.Directory_Operations.Iteration is if not (Dir_Entry = "." or else Dir_Entry = "..") and then OS_Lib.Is_Directory (Pathname) + and then not OS_Lib.Is_Symbolic_Link (Pathname) then Read_Directory (Pathname); exit when Quit; @@ -124,7 +126,6 @@ package body GNAT.Directory_Operations.Iteration is end Read_Directory; begin - Quit := False; Read_Directory (Root_Directory); end Find; diff --git a/gcc/ada/libgnat/g-diopit.ads b/gcc/ada/libgnat/g-diopit.ads index aa60d32..952d795 100644 --- a/gcc/ada/libgnat/g-diopit.ads +++ b/gcc/ada/libgnat/g-diopit.ads @@ -50,6 +50,8 @@ package GNAT.Directory_Operations.Iteration is -- will pass in the value False on each call to Action. The iterator will -- terminate after passing the last matched path to Action or after -- returning from a call to Action which sets Quit to True. + -- The iterator does not follow symbolic links avoiding possible + -- circularities or exploring unrelated directories. -- Raises GNAT.Regexp.Error_In_Regexp if File_Pattern is ill formed. generic diff --git a/gcc/ada/libgnat/g-expect.adb b/gcc/ada/libgnat/g-expect.adb index 78b3c27..0f9d0b9 100644 --- a/gcc/ada/libgnat/g-expect.adb +++ b/gcc/ada/libgnat/g-expect.adb @@ -1181,6 +1181,12 @@ package body GNAT.Expect is Set_Up_Child_Communications (Descriptor, Pipe1, Pipe2, Pipe3, Command_With_Path.all, C_Arg_List'Address); + + -- On Windows systems we need to release memory taken for Arg_List + + for A of Arg_List loop + Free (A); + end loop; end if; Free (Command_With_Path); diff --git a/gcc/ada/libgnat/g-sercom__linux.adb b/gcc/ada/libgnat/g-sercom__linux.adb index 10b456f..f7212e8 100644 --- a/gcc/ada/libgnat/g-sercom__linux.adb +++ b/gcc/ada/libgnat/g-sercom__linux.adb @@ -30,6 +30,33 @@ ------------------------------------------------------------------------------ -- This is the GNU/Linux implementation of this package +-- +-- Testing on GNU/Linux can be done with socat & stty tools. +-- +-- First in a terminal create a virtual serial port: +-- +-- * First solution, the terminal is one of the side of the channel +-- characters written with Write into the port will be displayed +-- there and characters typed into the terminal will be send to the +-- channel and will be received by a Read call. +-- +-- $ socat PTY,link=/tmp/virtual-tty,raw,echo=1 - +-- +-- * Second solution, the virtual channel contains two side and the +-- program can Read and Write date to it. +-- +-- $ socat PTY,link=/tmp/virtual-tty,raw,echo=1 \ +-- PTY,link=/tmp/virtual-tty,raw,echo=1 +-- +-- Connect to this virtual serial port with: +-- +-- Open (Port => P, Name => "/tmp/virtual-tty"); +-- +-- Do any settings using the Set routine below, then you can check +-- the serial port configuration with: +-- +-- $ stty --file /tmp/virtual-tty +-- with Ada.Streams; use Ada.Streams; @@ -52,6 +79,34 @@ package body GNAT.Serial_Communications is function fcntl (fd : int; cmd : int; value : int) return int; pragma Import (C, fcntl, "fcntl"); + C_Data_Rate : constant array (Data_Rate) of unsigned := + (B75 => OSC.B75, + B110 => OSC.B110, + B150 => OSC.B150, + B300 => OSC.B300, + B600 => OSC.B600, + B1200 => OSC.B1200, + B2400 => OSC.B2400, + B4800 => OSC.B4800, + B9600 => OSC.B9600, + B19200 => OSC.B19200, + B38400 => OSC.B38400, + B57600 => OSC.B57600, + B115200 => OSC.B115200, + B230400 => OSC.B230400, + B460800 => OSC.B460800, + B500000 => OSC.B500000, + B576000 => OSC.B576000, + B921600 => OSC.B921600, + B1000000 => OSC.B1000000, + B1152000 => OSC.B1152000, + B1500000 => OSC.B1500000, + B2000000 => OSC.B2000000, + B2500000 => OSC.B2500000, + B3000000 => OSC.B3000000, + B3500000 => OSC.B3500000, + B4000000 => OSC.B4000000); + C_Bits : constant array (Data_Bits) of unsigned := (CS7 => OSC.CS7, CS8 => OSC.CS8); @@ -162,6 +217,8 @@ package body GNAT.Serial_Communications is is use OSC; + subtype speed_t is unsigned; + type termios is record c_iflag : unsigned; c_oflag : unsigned; @@ -169,8 +226,8 @@ package body GNAT.Serial_Communications is c_lflag : unsigned; c_line : unsigned_char; c_cc : Interfaces.C.char_array (0 .. 31); - c_ispeed : unsigned; - c_ospeed : unsigned; + c_ispeed : speed_t; + c_ospeed : speed_t; end record; pragma Convention (C, termios); @@ -184,9 +241,15 @@ package body GNAT.Serial_Communications is function tcflush (fd : int; queue_selector : int) return int; pragma Import (C, tcflush, "tcflush"); + function cfsetospeed (termios_p : Address; speed : speed_t) return int; + pragma Import (C, cfsetospeed, "cfsetospeed"); + + function cfsetispeed (termios_p : Address; speed : speed_t) return int; + pragma Import (C, cfsetispeed, "cfsetispeed"); + Current : termios; - Res : int; + Res : int := 0; pragma Warnings (Off, Res); -- Warnings off, since we don't always test the result @@ -205,6 +268,7 @@ package body GNAT.Serial_Communications is or C_Stop_Bits (Stop_Bits) or C_Parity (Parity) or CREAD; + Current.c_iflag := 0; Current.c_lflag := 0; Current.c_oflag := 0; @@ -224,10 +288,36 @@ package body GNAT.Serial_Communications is Current.c_iflag := Current.c_iflag or IXON; end case; - Current.c_ispeed := Data_Rate_Value (Rate); - Current.c_ospeed := Data_Rate_Value (Rate); - Current.c_cc (VMIN) := char'Val (0); - Current.c_cc (VTIME) := char'Val (Natural (Timeout * 10)); + Current.c_ispeed := Data_Rate_Value (Rate); + Current.c_ospeed := Data_Rate_Value (Rate); + + -- See man termios for descriptions about the different modes + + if Block and then Timeout = 0.0 then + -- MIN > 0, TIME == 0 (blocking read) + Current.c_cc (VMIN) := char'Val (1); + Current.c_cc (VTIME) := char'Val (0); + + else + -- MIN == 0, TIME > 0 (read with timeout) + -- MIN == 0, TIME == 0 (polling read) + Current.c_cc (VMIN) := char'Val (0); + Current.c_cc (VTIME) := char'Val (Natural (Timeout * 10)); + + Current.c_lflag := Current.c_lflag or (not ICANON); + end if; + + Res := cfsetispeed (Current'Address, C_Data_Rate (Rate)); + + if Res = -1 then + Raise_Error ("set: cfsetispeed failed"); + end if; + + Res := cfsetospeed (Current'Address, C_Data_Rate (Rate)); + + if Res = -1 then + Raise_Error ("set: cfsetospeed failed"); + end if; -- Set port settings @@ -236,7 +326,11 @@ package body GNAT.Serial_Communications is -- Block - Res := fcntl (int (Port.H), F_SETFL, (if Block then 0 else FNDELAY)); + if Block then + -- In blocking mode, remove the non-blocking flags set while + -- opening the serial port (see Open). + Res := fcntl (int (Port.H), F_SETFL, 0); + end if; if Res = -1 then Raise_Error ("set: fcntl failed"); diff --git a/gcc/ada/libgnat/memtrack.adb b/gcc/ada/libgnat/memtrack.adb index bd34796..a5f508d 100644 --- a/gcc/ada/libgnat/memtrack.adb +++ b/gcc/ada/libgnat/memtrack.adb @@ -102,6 +102,9 @@ package body System.Memory is pragma Import (C, OS_Exit, "__gnat_os_exit"); pragma No_Return (OS_Exit); + In_Child_After_Fork : Integer; + pragma Import (C, In_Child_After_Fork, "__gnat_in_child_after_fork"); + procedure fwrite (Ptr : System.Address; Size : size_t; @@ -149,6 +152,24 @@ package body System.Memory is -- themselves do dynamic allocation. We use First_Call flag to avoid -- infinite recursion + function Allow_Trace return Boolean; + pragma Inline (Allow_Trace); + -- Check if the memory trace is allowed + + ----------------- + -- Allow_Trace -- + ----------------- + + function Allow_Trace return Boolean is + begin + if First_Call then + First_Call := False; + return In_Child_After_Fork = 0; + else + return False; + end if; + end Allow_Trace; + ----------- -- Alloc -- ----------- @@ -176,14 +197,12 @@ package body System.Memory is Result := c_malloc (Actual_Size); - if First_Call then + if Allow_Trace then -- Logs allocation call -- format is: -- 'A' <mem addr> <size chunk> <len backtrace> <addr1> ... <addrn> - First_Call := False; - if Needs_Init then Gmem_Initialize; end if; @@ -243,14 +262,12 @@ package body System.Memory is begin Lock_Task.all; - if First_Call then + if Allow_Trace then -- Logs deallocation call -- format is: -- 'D' <mem addr> <len backtrace> <addr1> ... <addrn> - First_Call := False; - if Needs_Init then Gmem_Initialize; end if; @@ -334,9 +351,7 @@ package body System.Memory is Abort_Defer.all; Lock_Task.all; - if First_Call then - First_Call := False; - + if Allow_Trace then -- We first log deallocation call if Needs_Init then diff --git a/gcc/ada/libgnat/s-fatgen.adb b/gcc/ada/libgnat/s-fatgen.adb index a598a12..9f25987 100644 --- a/gcc/ada/libgnat/s-fatgen.adb +++ b/gcc/ada/libgnat/s-fatgen.adb @@ -29,50 +29,137 @@ -- -- ------------------------------------------------------------------------------ --- The implementation here is portable to any IEEE implementation. It does --- not handle nonbinary radix, and also assumes that model numbers and --- machine numbers are basically identical, which is not true of all possible --- floating-point implementations. On a non-IEEE machine, this body must be --- specialized appropriately, or better still, its generic instantiations --- should be replaced by efficient machine-specific code. +-- This implementation is portable to any IEEE implementation. It does not +-- handle nonbinary radix, and also assumes that model numbers and machine +-- numbers are basically identical, which is not true of all possible +-- floating-point implementations. with Ada.Unchecked_Conversion; -with System; -package body System.Fat_Gen is +with Interfaces; +with System.Unsigned_Types; + +pragma Warnings (Off, "non-static constant in preelaborated unit"); +-- Every constant is static given our instantiation model - Float_Radix : constant T := T (T'Machine_Radix); - Radix_To_M_Minus_1 : constant T := Float_Radix ** (T'Machine_Mantissa - 1); +package body System.Fat_Gen is + use type Interfaces.Unsigned_64; pragma Assert (T'Machine_Radix = 2); -- This version does not handle radix 16 - -- Constants for Decompose and Scaling + Rad : constant T := T (T'Machine_Radix); + -- Renaming for the machine radix - Rad : constant T := T (T'Machine_Radix); - Invrad : constant T := 1.0 / Rad; + Mantissa : constant Integer := T'Machine_Mantissa; + -- Renaming for the machine mantissa - subtype Expbits is Integer range 0 .. 6; - -- 2 ** (2 ** 7) might overflow. How big can radix-16 exponents get? - - Log_Power : constant array (Expbits) of Integer := (1, 2, 4, 8, 16, 32, 64); - - R_Power : constant array (Expbits) of T := - (Rad ** 1, - Rad ** 2, - Rad ** 4, - Rad ** 8, - Rad ** 16, - Rad ** 32, - Rad ** 64); - - R_Neg_Power : constant array (Expbits) of T := - (Invrad ** 1, - Invrad ** 2, - Invrad ** 4, - Invrad ** 8, - Invrad ** 16, - Invrad ** 32, - Invrad ** 64); + Invrad : constant T := 1.0 / Rad; + -- Smallest positive mantissa in the canonical form (RM A.5.3(4)) + + -- Small : constant T := Rad ** (T'Machine_Emin - 1); + -- Smallest positive normalized number + + -- Tiny : constant T := Rad ** (T'Machine_Emin - Mantissa); + -- Smallest positive denormalized number + + Tiny16 : constant Interfaces.Unsigned_16 := 1; + Tiny32 : constant Interfaces.Unsigned_32 := 1; + Tiny64 : constant Interfaces.Unsigned_64 := 1; + Tiny80 : constant array (1 .. 2) of Interfaces.Unsigned_64 := + (1 * Standard'Default_Bit_Order, + 2**48 * (1 - Standard'Default_Bit_Order)); + for Tiny80'Alignment use Standard'Maximum_Alignment; + -- We cannot use the direct declaration because it cannot be translated + -- into C90, as the hexadecimal floating constants were introduced in C99. + -- So we work around this by using an overlay of the integer constant. + + RM1 : constant T := Rad ** (Mantissa - 1); + -- Smallest positive member of the large consecutive integers. It is equal + -- to the ratio Small / Tiny, which means that multiplying by it normalizes + -- any nonzero denormalized number. + + IEEE_Emin : constant Integer := T'Machine_Emin - 1; + IEEE_Emax : constant Integer := T'Machine_Emax - 1; + -- The mantissa is a fraction with first digit set in Ada whereas it is + -- shifted by 1 digit to the left in the IEEE floating-point format. + + subtype IEEE_Erange is Integer range IEEE_Emin - 1 .. IEEE_Emax + 1; + -- The IEEE floating-point format extends the machine range by 1 to the + -- left for denormalized numbers and 1 to the right for infinities/NaNs. + + IEEE_Ebias : constant Integer := -(IEEE_Emin - 1); + -- The exponent is biased such that denormalized numbers have it zero + + -- The implementation uses a representation type Float_Rep that allows + -- direct access to exponent and mantissa of the floating point number. + + -- The Float_Rep type is a simple array of Float_Word elements. This + -- representation is chosen to make it possible to size the type based + -- on a generic parameter. Since the array size is known at compile + -- time, efficient code can still be generated. The size of Float_Word + -- elements should be large enough to allow accessing the exponent in + -- one read, but small enough so that all floating-point object sizes + -- are a multiple of Float_Word'Size. + + -- The following conditions must be met for all possible instantiations + -- of the attribute package: + + -- - T'Size is an integral multiple of Float_Word'Size + + -- - The exponent and sign are completely contained in a single + -- component of Float_Rep, named Most Significant Word (MSW). + + -- - The sign occupies the most significant bit of the MSW and the + -- exponent is in the following bits. The exception is 80-bit + -- double extended, where they occupy the low 16-bit halfword. + + -- The low-level primitives Copy_Sign, Decompose, Scaling and Valid are + -- implemented by accessing the bit pattern of the floating-point number. + -- Only the normalization of denormalized numbers, if any, and the gradual + -- underflow are left to the hardware, mainly because there is some leeway + -- for the hardware implementation in this area: for example, the MSB of + -- the mantissa, which is 1 for normalized numbers and 0 for denormalized + -- numbers, may or may not be stored by the hardware. + + Siz : constant := (if System.Word_Size > 32 then 32 else System.Word_Size); + type Float_Word is mod 2**Siz; + + N : constant Natural := (T'Size + Siz - 1) / Siz; + Rep_Last : constant Natural := Natural'Min (N - 1, (Mantissa + 16) / Siz); + -- Determine the number of Float_Words needed for representing the + -- entire floating-point value. Do not take into account excessive + -- padding, as occurs on IA-64 where 80 bits floats get padded to 128 + -- bits. In general, the exponent field cannot be larger than 15 bits, + -- even for 128-bit floating-point types, so the final format size + -- won't be larger than Mantissa + 16. + + type Float_Rep is array (Natural range 0 .. N - 1) of Float_Word; + pragma Suppress_Initialization (Float_Rep); + -- This pragma suppresses the generation of an initialization procedure + -- for type Float_Rep when operating in Initialize/Normalize_Scalars mode. + + MSW : constant Natural := Rep_Last * Standard'Default_Bit_Order; + -- Finding the location of the Exponent_Word is a bit tricky. In general + -- we assume Word_Order = Bit_Order. + + Exp_Factor : constant Float_Word := + (if Mantissa = 64 + then 1 + else 2**(Siz - 1) / Float_Word (IEEE_Emax - IEEE_Emin + 3)); + -- Factor that the extracted exponent needs to be divided by to be in + -- range 0 .. IEEE_Emax - IEEE_Emin + 2. The special case is 80-bit + -- double extended, where the exponent starts the 3rd float word. + + Exp_Mask : constant Float_Word := + Float_Word (IEEE_Emax - IEEE_Emin + 2) * Exp_Factor; + -- Value needed to mask out the exponent field. This assumes that the + -- range 0 .. IEEE_Emax - IEEE_Emin + 2 contains 2**N values, for some + -- N in Natural. + + Sign_Mask : constant Float_Word := + (if Mantissa = 64 then 2**15 else 2**(Siz - 1)); + -- Value needed to mask out the sign field. The special case is 80-bit + -- double extended, where the exponent starts the 3rd float word. ----------------------- -- Local Subprograms -- @@ -84,11 +171,6 @@ package body System.Fat_Gen is -- the sign of the exponent. The absolute value of Frac is in the range -- 0.0 <= Frac < 1.0. If Frac = 0.0 or -0.0, then Expo is always zero. - function Gradual_Scaling (Adjustment : UI) return T; - -- Like Scaling with a first argument of 1.0, but returns the smallest - -- denormal rather than zero when the adjustment is smaller than - -- Machine_Emin. Used for Succ and Pred. - -------------- -- Adjacent -- -------------- @@ -138,19 +220,22 @@ package body System.Fat_Gen is --------------- function Copy_Sign (Value, Sign : T) return T is - Result : T; + S : constant T := T'Machine (Sign); - function Is_Negative (V : T) return Boolean; - pragma Import (Intrinsic, Is_Negative); + Rep_S : Float_Rep; + for Rep_S'Address use S'Address; + -- Rep_S is a view of the Sign parameter - begin - Result := abs Value; + V : T := T'Machine (Value); - if Is_Negative (Sign) then - return -Result; - else - return Result; - end if; + Rep_V : Float_Rep; + for Rep_V'Address use V'Address; + -- Rep_V is a view of the Value parameter + + begin + Rep_V (MSW) := + (Rep_V (MSW) and not Sign_Mask) or (Rep_S (MSW) and Sign_Mask); + return V; end Copy_Sign; --------------- @@ -158,94 +243,53 @@ package body System.Fat_Gen is --------------- procedure Decompose (XX : T; Frac : out T; Expo : out UI) is - X : constant T := T'Machine (XX); + X : T := T'Machine (XX); - begin - if X = 0.0 then + Rep : Float_Rep; + for Rep'Address use X'Address; + -- Rep is a view of the input floating-point parameter - -- The normalized exponent of zero is zero, see RM A.5.2(15) + Exp : constant IEEE_Erange := + Integer ((Rep (MSW) and Exp_Mask) / Exp_Factor) - IEEE_Ebias; + -- Mask/Shift X to only get bits from the exponent. Then convert biased + -- value to final value. - Frac := X; - Expo := 0; - - -- Check for infinities, transfinites, whatnot + Minus : constant Boolean := (Rep (MSW) and Sign_Mask) /= 0; + -- Mask/Shift X to only get bit from the sign - elsif X > T'Safe_Last then - Frac := Invrad; - pragma Annotate (CodePeer, Intentional, "dead code", - "Check float range."); - Expo := T'Machine_Emax + 1; - - elsif X < T'Safe_First then - Frac := -Invrad; - pragma Annotate (CodePeer, Intentional, "dead code", - "Check float range."); - Expo := T'Machine_Emax + 2; -- how many extra negative values? + begin + -- The normalized exponent of zero is zero, see RM A.5.3(15) - else - -- Case of nonzero finite x. Essentially, we just multiply - -- by Rad ** (+-2**N) to reduce the range. + if X = 0.0 then + Expo := 0; + Frac := X; - declare - Ax : T := abs X; - Ex : UI := 0; + -- Check for infinities and NaNs - -- Ax * Rad ** Ex is invariant + elsif Exp = IEEE_Emax + 1 then + Expo := T'Machine_Emax + 1; + Frac := (if Minus then -Invrad else Invrad); - begin - if Ax >= 1.0 then - while Ax >= R_Power (Expbits'Last) loop - Ax := Ax * R_Neg_Power (Expbits'Last); - Ex := Ex + Log_Power (Expbits'Last); - end loop; + -- Check for nonzero denormalized numbers - -- Ax < Rad ** 64 + elsif Exp = IEEE_Emin - 1 then + -- Normalize by multiplying by Radix ** (Mantissa - 1) - for N in reverse Expbits'First .. Expbits'Last - 1 loop - if Ax >= R_Power (N) then - Ax := Ax * R_Neg_Power (N); - Ex := Ex + Log_Power (N); - end if; + Decompose (X * RM1, Frac, Expo); + Expo := Expo - (Mantissa - 1); - -- Ax < R_Power (N) + -- Case of normalized numbers - end loop; + else + -- The Ada exponent is the IEEE exponent plus 1, see above - -- 1 <= Ax < Rad + Expo := Exp + 1; - Ax := Ax * Invrad; - Ex := Ex + 1; + -- Set Ada exponent of X to zero, so we end up with the fraction - else - -- 0 < ax < 1 - - while Ax < R_Neg_Power (Expbits'Last) loop - Ax := Ax * R_Power (Expbits'Last); - pragma Annotate (CodePeer, Intentional, "dead code", - "Check float range."); - Ex := Ex - Log_Power (Expbits'Last); - end loop; - pragma Annotate - (CodePeer, Intentional, - "test always false", - "expected for some instantiations"); - - -- Rad ** -64 <= Ax < 1 - - for N in reverse Expbits'First .. Expbits'Last - 1 loop - if Ax < R_Neg_Power (N) then - Ax := Ax * R_Power (N); - Ex := Ex - Log_Power (N); - end if; - - -- R_Neg_Power (N) <= Ax < 1 - - end loop; - end if; - - Frac := (if X > 0.0 then Ax else -Ax); - Expo := Ex; - end; + Rep (MSW) := (Rep (MSW) and not Exp_Mask) + + Float_Word (IEEE_Ebias - 1) * Exp_Factor; + Frac := X; end if; end Decompose; @@ -291,38 +335,6 @@ package body System.Fat_Gen is return X_Frac; end Fraction; - --------------------- - -- Gradual_Scaling -- - --------------------- - - function Gradual_Scaling (Adjustment : UI) return T is - Y : T; - Y1 : T; - Ex : UI := Adjustment; - - begin - if Adjustment < T'Machine_Emin - 1 then - Y := 2.0 ** T'Machine_Emin; - Y1 := Y; - Ex := Ex - T'Machine_Emin; - while Ex < 0 loop - Y := T'Machine (Y / 2.0); - - if Y = 0.0 then - return Y1; - end if; - - Ex := Ex + 1; - Y1 := Y; - end loop; - - return Y1; - - else - return Scaling (1.0, Adjustment); - end if; - end Gradual_Scaling; - ------------------ -- Leading_Part -- ------------------ @@ -332,7 +344,7 @@ package body System.Fat_Gen is Y, Z : T; begin - if Radix_Digits >= T'Machine_Mantissa then + if Radix_Digits >= Mantissa then return X; elsif Radix_Digits <= 0 then @@ -412,6 +424,13 @@ package body System.Fat_Gen is ---------- function Pred (X : T) return T is + Tiny : constant T; + pragma Import (Ada, Tiny); + for Tiny'Address use (if T'Size = 16 then Tiny16'Address + elsif T'Size = 32 then Tiny32'Address + elsif T'Size = 64 then Tiny64'Address + elsif Mantissa = 64 then Tiny80'Address + else raise Program_Error); X_Frac : T; X_Exp : UI; @@ -419,12 +438,11 @@ package body System.Fat_Gen is -- Zero has to be treated specially, since its exponent is zero if X = 0.0 then - return -Succ (X); + return -Tiny; - -- Special treatment for most negative number + -- Special treatment for largest negative number: raise Constraint_Error elsif X = T'First then - raise Constraint_Error with "Pred of largest negative number"; -- For infinities, return unchanged @@ -438,28 +456,33 @@ package body System.Fat_Gen is -- Subtract from the given number a number equivalent to the value -- of its least significant bit. Given that the most significant bit - -- represents a value of 1.0 * radix ** (exp - 1), the value we want - -- is obtained by shifting this by (mantissa-1) bits to the right, + -- represents a value of 1.0 * Radix ** (Exp - 1), the value we want + -- is obtained by shifting this by (Mantissa-1) bits to the right, -- i.e. decreasing the exponent by that amount. else Decompose (X, X_Frac, X_Exp); - -- A special case, if the number we had was a positive power of - -- two, then we want to subtract half of what we would otherwise - -- subtract, since the exponent is going to be reduced. + -- For a denormalized number or a normalized number with the lowest + -- exponent, just subtract the Tiny. + + if X_Exp <= T'Machine_Emin then + return X - Tiny; - -- Note that X_Frac has the same sign as X, so if X_Frac is 0.5, - -- then we know that we have a positive number (and hence a - -- positive power of 2). + -- A special case, if the number we had was a power of two on the + -- positive side of zero, then we want to subtract half of what we + -- would have subtracted, since the exponent is going to be reduced. - if X_Frac = 0.5 then - return X - Gradual_Scaling (X_Exp - T'Machine_Mantissa - 1); + -- Note that X_Frac has the same sign as X so, if X_Frac is Invrad, + -- then we know that we had a power of two on the positive side. - -- Otherwise the exponent is unchanged + elsif X_Frac = Invrad then + return X - Scaling (1.0, X_Exp - Mantissa - 1); + + -- Otherwise the adjustment is unchanged else - return X - Gradual_Scaling (X_Exp - T'Machine_Mantissa); + return X - Scaling (1.0, X_Exp - Mantissa); end if; end if; end Pred; @@ -579,70 +602,97 @@ package body System.Fat_Gen is -- Scaling -- ------------- - -- Return x * rad ** adjustment quickly, or quietly underflow to zero, - -- or overflow naturally. - function Scaling (X : T; Adjustment : UI) return T is + pragma Assert (Mantissa <= 64); + -- This implementation handles only 80-bit IEEE Extended or smaller + + package UST renames System.Unsigned_Types; + use type UST.Long_Long_Unsigned; + + XX : T := T'Machine (X); + + Rep : Float_Rep; + for Rep'Address use XX'Address; + -- Rep is a view of the input floating-point parameter + + Exp : constant IEEE_Erange := + Integer ((Rep (MSW) and Exp_Mask) / Exp_Factor) - IEEE_Ebias; + -- Mask/Shift X to only get bits from the exponent. Then convert biased + -- value to final value. + + Minus : constant Boolean := (Rep (MSW) and Sign_Mask) /= 0; + -- Mask/Shift X to only get bit from the sign + + Expi, Expf : IEEE_Erange; + begin - if X = 0.0 or else Adjustment = 0 then + -- Check for zero, infinities, NaNs as well as no adjustment + + if X = 0.0 or else Exp = IEEE_Emax + 1 or else Adjustment = 0 then return X; - end if; - -- Nonzero x essentially, just multiply repeatedly by Rad ** (+-2**n) + -- Check for nonzero denormalized numbers - declare - Y : T := X; - Ex : UI := Adjustment; + elsif Exp = IEEE_Emin - 1 then + -- Check for zero result to protect the subtraction below - -- Y * Rad ** Ex is invariant + if Adjustment < -(Mantissa - 1) then + XX := 0.0; + return (if Minus then -XX else XX); - begin - if Ex < 0 then - while Ex <= -Log_Power (Expbits'Last) loop - Y := Y * R_Neg_Power (Expbits'Last); - Ex := Ex + Log_Power (Expbits'Last); - end loop; + -- Normalize by multiplying by Radix ** (Mantissa - 1) - -- -64 < Ex <= 0 + else + return Scaling (XX * RM1, Adjustment - (Mantissa - 1)); + end if; - for N in reverse Expbits'First .. Expbits'Last - 1 loop - if Ex <= -Log_Power (N) then - Y := Y * R_Neg_Power (N); - Ex := Ex + Log_Power (N); - end if; + -- Case of normalized numbers - -- -Log_Power (N) < Ex <= 0 + else + -- Check for overflow - end loop; + if Adjustment > IEEE_Emax - Exp then + XX := 0.0; + return (if Minus then -1.0 / XX else 1.0 / XX); + pragma Annotate + (CodePeer, Intentional, "overflow check", "Infinity produced"); + pragma Annotate + (CodePeer, Intentional, "divide by zero", "Infinity produced"); - -- Ex = 0 + -- Check for underflow - else - -- Ex >= 0 + elsif Adjustment < IEEE_Emin - Exp then + -- Check for gradual underflow - while Ex >= Log_Power (Expbits'Last) loop - Y := Y * R_Power (Expbits'Last); - Ex := Ex - Log_Power (Expbits'Last); - end loop; + if T'Denorm + and then Adjustment >= IEEE_Emin - (Mantissa - 1) - Exp + then + Expf := IEEE_Emin; + Expi := Exp + Adjustment - Expf; - -- 0 <= Ex < 64 + -- Case of zero result - for N in reverse Expbits'First .. Expbits'Last - 1 loop - if Ex >= Log_Power (N) then - Y := Y * R_Power (N); - Ex := Ex - Log_Power (N); - end if; + else + XX := 0.0; + return (if Minus then -XX else XX); + end if; - -- 0 <= Ex < Log_Power (N) + -- Case of normalized results - end loop; + else + Expf := Exp + Adjustment; + Expi := 0; + end if; - -- Ex = 0 + Rep (MSW) := (Rep (MSW) and not Exp_Mask) + + Float_Word (IEEE_Ebias + Expf) * Exp_Factor; + if Expi < 0 then + XX := XX / T (UST.Long_Long_Unsigned (2) ** (-Expi)); end if; - return Y; - end; + return XX; + end if; end Scaling; ---------- @@ -650,36 +700,27 @@ package body System.Fat_Gen is ---------- function Succ (X : T) return T is + Tiny : constant T; + pragma Import (Ada, Tiny); + for Tiny'Address use (if T'Size = 16 then Tiny16'Address + elsif T'Size = 32 then Tiny32'Address + elsif T'Size = 64 then Tiny64'Address + elsif Mantissa = 64 then Tiny80'Address + else raise Program_Error); X_Frac : T; X_Exp : UI; - X1, X2 : T; begin -- Treat zero specially since it has a zero exponent if X = 0.0 then - X1 := 2.0 ** T'Machine_Emin; + return Tiny; - -- Following loop generates smallest denormal - - loop - X2 := T'Machine (X1 / 2.0); - exit when X2 = 0.0; - X1 := X2; - end loop; - - return X1; - - -- Special treatment for largest positive number + -- Special treatment for largest positive number: raise Constraint_Error elsif X = T'Last then - - -- If not generating infinities, we raise a constraint error - raise Constraint_Error with "Succ of largest positive number"; - -- Otherwise generate a positive infinity - -- For infinities, return unchanged elsif X < T'First or else X > T'Last then @@ -689,30 +730,35 @@ package body System.Fat_Gen is pragma Annotate (CodePeer, Intentional, "dead code", "Check float range."); - -- Add to the given number a number equivalent to the value - -- of its least significant bit. Given that the most significant bit - -- represents a value of 1.0 * radix ** (exp - 1), the value we want - -- is obtained by shifting this by (mantissa-1) bits to the right, + -- Add to the given number a number equivalent to the value of its + -- least significant bit. Given that the most significant bit + -- represents a value of 1.0 * Radix ** (Exp - 1), the value we want + -- is obtained by shifting this by (Mantissa-1) bits to the right, -- i.e. decreasing the exponent by that amount. else Decompose (X, X_Frac, X_Exp); - -- A special case, if the number we had was a negative power of two, - -- then we want to add half of what we would otherwise add, since the - -- exponent is going to be reduced. + -- For a denormalized number or a normalized number with the lowest + -- exponent, just add the Tiny. + + if X_Exp <= T'Machine_Emin then + return X + Tiny; - -- Note that X_Frac has the same sign as X, so if X_Frac is -0.5, - -- then we know that we have a negative number (and hence a negative - -- power of 2). + -- A special case, if the number we had was a power of two on the + -- negative side of zero, then we want to add half of what we would + -- have added, since the exponent is going to be reduced. - if X_Frac = -0.5 then - return X + Gradual_Scaling (X_Exp - T'Machine_Mantissa - 1); + -- Note that X_Frac has the same sign as X, so if X_Frac is -Invrad, + -- then we know that we had a power of two on the negative side. - -- Otherwise the exponent is unchanged + elsif X_Frac = -Invrad then + return X + Scaling (1.0, X_Exp - Mantissa - 1); + + -- Otherwise the adjustment is unchanged else - return X + Gradual_Scaling (X_Exp - T'Machine_Mantissa); + return X + Scaling (1.0, X_Exp - Mantissa); end if; end if; end Succ; @@ -725,7 +771,7 @@ package body System.Fat_Gen is -- T'Machine (RM1 + N) - RM1 - -- where N >= 0.0 and RM1 = radix ** (mantissa - 1) + -- where N >= 0.0 and RM1 = Radix ** (Mantissa - 1) -- This works provided that the intermediate result (RM1 + N) does not -- have extra precision (which is why we call Machine). When we compute @@ -742,19 +788,18 @@ package body System.Fat_Gen is begin Result := abs X; - if Result >= Radix_To_M_Minus_1 then + if Result >= RM1 then return T'Machine (X); else - Result := - T'Machine (Radix_To_M_Minus_1 + Result) - Radix_To_M_Minus_1; + Result := T'Machine (RM1 + Result) - RM1; if Result > abs X then Result := Result - 1.0; end if; if X > 0.0 then - return Result; + return Result; elsif X < 0.0 then return -Result; @@ -805,132 +850,37 @@ package body System.Fat_Gen is ----------- function Valid (X : not null access T) return Boolean is - IEEE_Emin : constant Integer := T'Machine_Emin - 1; - IEEE_Emax : constant Integer := T'Machine_Emax - 1; - - IEEE_Bias : constant Integer := -(IEEE_Emin - 1); - - subtype IEEE_Exponent_Range is - Integer range IEEE_Emin - 1 .. IEEE_Emax + 1; - - -- The implementation of this floating point attribute uses a - -- representation type Float_Rep that allows direct access to the - -- exponent and mantissa parts of a floating point number. - - -- The Float_Rep type is an array of Float_Word elements. This - -- representation is chosen to make it possible to size the type based - -- on a generic parameter. Since the array size is known at compile - -- time, efficient code can still be generated. The size of Float_Word - -- elements should be large enough to allow accessing the exponent in - -- one read, but small enough so that all floating point object sizes - -- are a multiple of the Float_Word'Size. - - -- The following conditions must be met for all possible instantiations - -- of the attributes package: - - -- - T'Size is an integral multiple of Float_Word'Size - - -- - The exponent and sign are completely contained in a single - -- component of Float_Rep, named Most_Significant_Word (MSW). - - -- - The sign occupies the most significant bit of the MSW and the - -- exponent is in the following bits. Unused bits (if any) are in - -- the least significant part. - - type Float_Word is mod 2**Positive'Min (System.Word_Size, 32); - type Rep_Index is range 0 .. 7; - - Rep_Words : constant Positive := - (T'Size + Float_Word'Size - 1) / Float_Word'Size; - Rep_Last : constant Rep_Index := - Rep_Index'Min - (Rep_Index (Rep_Words - 1), - (T'Mantissa + 16) / Float_Word'Size); - -- Determine the number of Float_Words needed for representing the - -- entire floating-point value. Do not take into account excessive - -- padding, as occurs on IA-64 where 80 bits floats get padded to 128 - -- bits. In general, the exponent field cannot be larger than 15 bits, - -- even for 128-bit floating-point types, so the final format size - -- won't be larger than T'Mantissa + 16. - - type Float_Rep is - array (Rep_Index range 0 .. Rep_Index (Rep_Words - 1)) of Float_Word; - - pragma Suppress_Initialization (Float_Rep); - -- This pragma suppresses the generation of an initialization procedure - -- for type Float_Rep when operating in Initialize/Normalize_Scalars - -- mode. This is not just a matter of efficiency, but of functionality, - -- since Valid has a pragma Inline_Always, which is not permitted if - -- there are nested subprograms present. - - Most_Significant_Word : constant Rep_Index := - Rep_Last * Standard'Default_Bit_Order; - -- Finding the location of the Exponent_Word is a bit tricky. In general - -- we assume Word_Order = Bit_Order. - - Exponent_Factor : constant Float_Word := - 2**(Float_Word'Size - 1) / - Float_Word (IEEE_Emax - IEEE_Emin + 3) * - Boolean'Pos (Most_Significant_Word /= 2) + - Boolean'Pos (Most_Significant_Word = 2); - -- Factor that the extracted exponent needs to be divided by to be in - -- range 0 .. IEEE_Emax - IEEE_Emin + 2. Special case: Exponent_Factor - -- is 1 for x86/IA64 double extended (GCC adds unused bits to the type). - - Exponent_Mask : constant Float_Word := - Float_Word (IEEE_Emax - IEEE_Emin + 2) * - Exponent_Factor; - -- Value needed to mask out the exponent field. This assumes that the - -- range IEEE_Emin - 1 .. IEEE_Emax + contains 2**N values, for some N - -- in Natural. - - function To_Float is new Ada.Unchecked_Conversion (Float_Rep, T); - - type Float_Access is access all T; + type Access_T is access all T; function To_Address is - new Ada.Unchecked_Conversion (Float_Access, System.Address); - - XA : constant System.Address := To_Address (Float_Access (X)); + new Ada.Unchecked_Conversion (Access_T, System.Address); - R : Float_Rep; - pragma Import (Ada, R); - for R'Address use XA; - -- R is a view of the input floating-point parameter. Note that we - -- must avoid copying the actual bits of this parameter in float - -- form (since it may be a signalling NaN). + Rep : Float_Rep; + for Rep'Address use To_Address (Access_T (X)); + -- Rep is a view of the input floating-point parameter. Note that we + -- must avoid reading the actual bits of this parameter in float form + -- since it may be a signalling NaN. - E : constant IEEE_Exponent_Range := - Integer ((R (Most_Significant_Word) and Exponent_Mask) / - Exponent_Factor) - - IEEE_Bias; - -- Mask/Shift T to only get bits from the exponent. Then convert biased - -- value to integer value. - - SR : Float_Rep; - -- Float_Rep representation of significant of X.all + Exp : constant IEEE_Erange := + Integer ((Rep (MSW) and Exp_Mask) / Exp_Factor) - IEEE_Ebias; + -- Mask/Shift X to only get bits from the exponent. Then convert biased + -- value to final value. begin - if T'Denorm then - - -- All denormalized numbers are valid, so the only invalid numbers - -- are overflows and NaNs, both with exponent = Emax + 1. + if Exp = IEEE_Emax + 1 then + -- This is an infinity or a NaN, i.e. always invalid - return E /= IEEE_Emax + 1; + return False; - end if; + elsif Exp in IEEE_Emin .. IEEE_Emax then + -- This is a normalized number, i.e. always valid - -- All denormalized numbers except 0.0 are invalid + return True; - -- Set exponent of X to zero, so we end up with the significand, which - -- definitely is a valid number and can be converted back to a float. + else pragma Assert (Exp = IEEE_Emin - 1); + -- This is a denormalized number, valid if T'Denorm is True or 0.0 - SR := R; - SR (Most_Significant_Word) := - (SR (Most_Significant_Word) - and not Exponent_Mask) + Float_Word (IEEE_Bias) * Exponent_Factor; - - return (E in IEEE_Emin .. IEEE_Emax) or else - ((E = IEEE_Emin - 1) and then abs To_Float (SR) = 1.0); + return T'Denorm or else X.all = 0.0; + end if; end Valid; end System.Fat_Gen; diff --git a/gcc/ada/libgnat/s-fatgen.ads b/gcc/ada/libgnat/s-fatgen.ads index b84d23b..700cfdc 100644 --- a/gcc/ada/libgnat/s-fatgen.ads +++ b/gcc/ada/libgnat/s-fatgen.ads @@ -31,9 +31,8 @@ -- This generic package provides a target independent implementation of the -- floating-point attributes that denote functions. The implementations here --- are portable, but very slow. The runtime contains a set of instantiations --- of this package for all predefined floating-point types, and these should --- be replaced by efficient assembly language code where possible. +-- should be portable and reasonably efficient. The runtime contains a set of +-- instantiations of this package for all predefined floating-point types. generic type T is digits <>; @@ -107,12 +106,12 @@ package System.Fat_Gen is -- floating point register). private + pragma Inline (Compose); + pragma Inline (Copy_Sign); + pragma Inline (Exponent); + pragma Inline (Fraction); pragma Inline (Machine); pragma Inline (Model); - - -- Note: previously the validity checking subprograms (Unaligned_Valid and - -- Valid) were also inlined, but this was changed since there were some - -- problems with this inlining in optimized mode, and in any case it seems - -- better to avoid this inlining (space and robustness considerations). + pragma Inline (Valid); end System.Fat_Gen; diff --git a/gcc/ada/libgnat/s-finmas.adb b/gcc/ada/libgnat/s-finmas.adb index 5a6583a..3e9ae58 100644 --- a/gcc/ada/libgnat/s-finmas.adb +++ b/gcc/ada/libgnat/s-finmas.adb @@ -119,20 +119,6 @@ package body System.Finalization_Masters is Finalize_Address_Table.Remove (Obj); end Delete_Finalize_Address_Unprotected; - ------------ - -- Detach -- - ------------ - - procedure Detach (N : not null FM_Node_Ptr) is - begin - Lock_Task.all; - Detach_Unprotected (N); - Unlock_Task.all; - - -- Note: No need to unlock in case of an exception because the above - -- code can never raise one. - end Detach; - ------------------------ -- Detach_Unprotected -- ------------------------ diff --git a/gcc/ada/libgnat/s-finmas.ads b/gcc/ada/libgnat/s-finmas.ads index ae0276f..eb30ea1 100644 --- a/gcc/ada/libgnat/s-finmas.ads +++ b/gcc/ada/libgnat/s-finmas.ads @@ -86,10 +86,6 @@ package System.Finalization_Masters is -- Destroy the relation pair object - Finalize_Address from the internal -- hash table. - procedure Detach (N : not null FM_Node_Ptr); - -- Compiler interface, do not call from within the run-time. Remove a node - -- from an arbitrary finalization master. - procedure Detach_Unprotected (N : not null FM_Node_Ptr); -- Remove a node from an arbitrary finalization master diff --git a/gcc/ada/libgnat/s-imgrea.adb b/gcc/ada/libgnat/s-imgrea.adb index 03d30bd..2ec6a1a 100644 --- a/gcc/ada/libgnat/s-imgrea.adb +++ b/gcc/ada/libgnat/s-imgrea.adb @@ -29,9 +29,9 @@ -- -- ------------------------------------------------------------------------------ -with System.Img_LLU; use System.Img_LLU; -with System.Img_Uns; use System.Img_Uns; -with System.Powten_Table; use System.Powten_Table; +with System.Img_LLU; use System.Img_LLU; +with System.Img_Uns; use System.Img_Uns; +with System.Powten_LLF; use System.Powten_LLF; with System.Float_Control; package body System.Img_Real is diff --git a/gcc/ada/libgnat/s-imguti.ads b/gcc/ada/libgnat/s-imguti.ads index f980bb7..6e21c65 100644 --- a/gcc/ada/libgnat/s-imguti.ads +++ b/gcc/ada/libgnat/s-imguti.ads @@ -45,14 +45,17 @@ package System.Img_Util is Exp : Natural); -- Sets the image of Digs (1 .. NDigs), which is a string of decimal digits -- preceded by either a minus sign or a space, i.e. the integer image of - -- the value in units of delta of a decimal fixed point type with the given - -- Scale, starting at S (P + 1), updating P to point to the last character - -- stored, the caller promises that the buffer is large enough and no check - -- is made for this. Constraint_Error will not necessarily be raised if the - -- requirement is violated since it is perfectly valid to compile this unit - -- with checks off. The Fore, Aft and Exp values can be set to any valid - -- values for the case of use by Text_IO.Decimal_IO. Note that there is no - -- leading space stored. The call may destroy the value in Digs, which is - -- why Digs is in-out (this happens if rounding is required). + -- the value in units of delta if this is for a decimal fixed point type + -- with the given Scale, or the integer image of the value converted to an + -- implicit decimal fixed point type with the given Scale if this is for an + -- ordinary fixed point type, starting at S (P + 1), updating P to point to + -- the last character stored. The caller promises that the buffer is large + -- enough and therefore no check is made for it. Constraint_Error will not + -- necessarily be raised if the requirement is violated since it is valid + -- to compile this unit with checks off. The Fore, Aft and Exp values can + -- be set to any valid values for the case of use by Text_IO.Decimal_IO or + -- Text_IO.Fixed_IO. Note that there is no leading space stored. The call + -- may destroy the value in Digs, which is why Digs is in-out (this happens + -- if rounding is required). end System.Img_Util; diff --git a/gcc/ada/libgnat/s-objrea.adb b/gcc/ada/libgnat/s-objrea.adb index d64e285..0cfa522 100644 --- a/gcc/ada/libgnat/s-objrea.adb +++ b/gcc/ada/libgnat/s-objrea.adb @@ -645,6 +645,9 @@ package body System.Object_Reader is when EM_X86_64 => Res.Arch := x86_64; + when EM_ARM => + Res.Arch := ARM; + when others => raise Format_Error with "unrecognized architecture"; end case; @@ -2030,6 +2033,7 @@ package body System.Object_Reader is | MIPS | PPC | SPARC + | ARM => Address_32 := Read (S); return uint64 (Address_32); diff --git a/gcc/ada/libgnat/s-objrea.ads b/gcc/ada/libgnat/s-objrea.ads index bd4fbd5..b3cfe13 100644 --- a/gcc/ada/libgnat/s-objrea.ads +++ b/gcc/ada/libgnat/s-objrea.ads @@ -117,9 +117,12 @@ package System.Object_Reader is PPC, -- 32-bit PowerPC - PPC64); + PPC64, -- 64-bit PowerPC + ARM); + -- 32-bit ARM + ------------------ -- Target types -- ------------------ diff --git a/gcc/ada/libgnat/s-powflt.ads b/gcc/ada/libgnat/s-powflt.ads new file mode 100644 index 0000000..9d58967 --- /dev/null +++ b/gcc/ada/libgnat/s-powflt.ads @@ -0,0 +1,85 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . P O W T E N _ F L T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2020, 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- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- <http://www.gnu.org/licenses/>. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides a powers of ten table used for real conversions + +package System.Powten_Flt is + pragma Pure; + + Maxpow : constant := 38; + -- Largest power of ten representable with Float + + Maxpow_Exact : constant := 10; + -- Largest power of ten exactly representable with Float. It is equal to + -- floor (M * log 2 / log 5), when M is the size of the mantissa (24). + + Powten : constant array (0 .. Maxpow) of Float := + (00 => 1.0E+00, + 01 => 1.0E+01, + 02 => 1.0E+02, + 03 => 1.0E+03, + 04 => 1.0E+04, + 05 => 1.0E+05, + 06 => 1.0E+06, + 07 => 1.0E+07, + 08 => 1.0E+08, + 09 => 1.0E+09, + 10 => 1.0E+10, + 11 => 1.0E+11, + 12 => 1.0E+12, + 13 => 1.0E+13, + 14 => 1.0E+14, + 15 => 1.0E+15, + 16 => 1.0E+16, + 17 => 1.0E+17, + 18 => 1.0E+18, + 19 => 1.0E+19, + 20 => 1.0E+20, + 21 => 1.0E+21, + 22 => 1.0E+22, + 23 => 1.0E+23, + 24 => 1.0E+24, + 25 => 1.0E+25, + 26 => 1.0E+26, + 27 => 1.0E+27, + 28 => 1.0E+28, + 29 => 1.0E+29, + 30 => 1.0E+30, + 31 => 1.0E+31, + 32 => 1.0E+32, + 33 => 1.0E+33, + 34 => 1.0E+34, + 35 => 1.0E+35, + 36 => 1.0E+36, + 37 => 1.0E+37, + 38 => 1.0E+38); + +end System.Powten_Flt; diff --git a/gcc/ada/libgnat/s-powlfl.ads b/gcc/ada/libgnat/s-powlfl.ads new file mode 100644 index 0000000..d191eff --- /dev/null +++ b/gcc/ada/libgnat/s-powlfl.ads @@ -0,0 +1,355 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . P O W T E N _ L F L T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2020, 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- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- <http://www.gnu.org/licenses/>. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides a powers of ten table used for real conversions + +package System.Powten_LFlt is + pragma Pure; + + Maxpow : constant := 308; + -- Largest power of ten representable with Long_Float + + Maxpow_Exact : constant := 22; + -- Largest power of ten exactly representable with Long_Float. It is equal + -- to floor (M * log 2 / log 5), when M is the size of the mantissa (53). + + Powten : constant array (0 .. Maxpow) of Long_Float := + (00 => 1.0E+00, + 01 => 1.0E+01, + 02 => 1.0E+02, + 03 => 1.0E+03, + 04 => 1.0E+04, + 05 => 1.0E+05, + 06 => 1.0E+06, + 07 => 1.0E+07, + 08 => 1.0E+08, + 09 => 1.0E+09, + 10 => 1.0E+10, + 11 => 1.0E+11, + 12 => 1.0E+12, + 13 => 1.0E+13, + 14 => 1.0E+14, + 15 => 1.0E+15, + 16 => 1.0E+16, + 17 => 1.0E+17, + 18 => 1.0E+18, + 19 => 1.0E+19, + 20 => 1.0E+20, + 21 => 1.0E+21, + 22 => 1.0E+22, + 23 => 1.0E+23, + 24 => 1.0E+24, + 25 => 1.0E+25, + 26 => 1.0E+26, + 27 => 1.0E+27, + 28 => 1.0E+28, + 29 => 1.0E+29, + 30 => 1.0E+30, + 31 => 1.0E+31, + 32 => 1.0E+32, + 33 => 1.0E+33, + 34 => 1.0E+34, + 35 => 1.0E+35, + 36 => 1.0E+36, + 37 => 1.0E+37, + 38 => 1.0E+38, + 39 => 1.0E+39, + 40 => 1.0E+40, + 41 => 1.0E+41, + 42 => 1.0E+42, + 43 => 1.0E+43, + 44 => 1.0E+44, + 45 => 1.0E+45, + 46 => 1.0E+46, + 47 => 1.0E+47, + 48 => 1.0E+48, + 49 => 1.0E+49, + 50 => 1.0E+50, + 51 => 1.0E+51, + 52 => 1.0E+52, + 53 => 1.0E+53, + 54 => 1.0E+54, + 55 => 1.0E+55, + 56 => 1.0E+56, + 57 => 1.0E+57, + 58 => 1.0E+58, + 59 => 1.0E+59, + 60 => 1.0E+60, + 61 => 1.0E+61, + 62 => 1.0E+62, + 63 => 1.0E+63, + 64 => 1.0E+64, + 65 => 1.0E+65, + 66 => 1.0E+66, + 67 => 1.0E+67, + 68 => 1.0E+68, + 69 => 1.0E+69, + 70 => 1.0E+70, + 71 => 1.0E+71, + 72 => 1.0E+72, + 73 => 1.0E+73, + 74 => 1.0E+74, + 75 => 1.0E+75, + 76 => 1.0E+76, + 77 => 1.0E+77, + 78 => 1.0E+78, + 79 => 1.0E+79, + 80 => 1.0E+80, + 81 => 1.0E+81, + 82 => 1.0E+82, + 83 => 1.0E+83, + 84 => 1.0E+84, + 85 => 1.0E+85, + 86 => 1.0E+86, + 87 => 1.0E+87, + 88 => 1.0E+88, + 89 => 1.0E+89, + 90 => 1.0E+90, + 91 => 1.0E+91, + 92 => 1.0E+92, + 93 => 1.0E+93, + 94 => 1.0E+94, + 95 => 1.0E+95, + 96 => 1.0E+96, + 97 => 1.0E+97, + 98 => 1.0E+98, + 99 => 1.0E+99, + 100 => 1.0E+100, + 101 => 1.0E+101, + 102 => 1.0E+102, + 103 => 1.0E+103, + 104 => 1.0E+104, + 105 => 1.0E+105, + 106 => 1.0E+106, + 107 => 1.0E+107, + 108 => 1.0E+108, + 109 => 1.0E+109, + 110 => 1.0E+110, + 111 => 1.0E+111, + 112 => 1.0E+112, + 113 => 1.0E+113, + 114 => 1.0E+114, + 115 => 1.0E+115, + 116 => 1.0E+116, + 117 => 1.0E+117, + 118 => 1.0E+118, + 119 => 1.0E+119, + 120 => 1.0E+120, + 121 => 1.0E+121, + 122 => 1.0E+122, + 123 => 1.0E+123, + 124 => 1.0E+124, + 125 => 1.0E+125, + 126 => 1.0E+126, + 127 => 1.0E+127, + 128 => 1.0E+128, + 129 => 1.0E+129, + 130 => 1.0E+130, + 131 => 1.0E+131, + 132 => 1.0E+132, + 133 => 1.0E+133, + 134 => 1.0E+134, + 135 => 1.0E+135, + 136 => 1.0E+136, + 137 => 1.0E+137, + 138 => 1.0E+138, + 139 => 1.0E+139, + 140 => 1.0E+140, + 141 => 1.0E+141, + 142 => 1.0E+142, + 143 => 1.0E+143, + 144 => 1.0E+144, + 145 => 1.0E+145, + 146 => 1.0E+146, + 147 => 1.0E+147, + 148 => 1.0E+148, + 149 => 1.0E+149, + 150 => 1.0E+150, + 151 => 1.0E+151, + 152 => 1.0E+152, + 153 => 1.0E+153, + 154 => 1.0E+154, + 155 => 1.0E+155, + 156 => 1.0E+156, + 157 => 1.0E+157, + 158 => 1.0E+158, + 159 => 1.0E+159, + 160 => 1.0E+160, + 161 => 1.0E+161, + 162 => 1.0E+162, + 163 => 1.0E+163, + 164 => 1.0E+164, + 165 => 1.0E+165, + 166 => 1.0E+166, + 167 => 1.0E+167, + 168 => 1.0E+168, + 169 => 1.0E+169, + 170 => 1.0E+170, + 171 => 1.0E+171, + 172 => 1.0E+172, + 173 => 1.0E+173, + 174 => 1.0E+174, + 175 => 1.0E+175, + 176 => 1.0E+176, + 177 => 1.0E+177, + 178 => 1.0E+178, + 179 => 1.0E+179, + 180 => 1.0E+180, + 181 => 1.0E+181, + 182 => 1.0E+182, + 183 => 1.0E+183, + 184 => 1.0E+184, + 185 => 1.0E+185, + 186 => 1.0E+186, + 187 => 1.0E+187, + 188 => 1.0E+188, + 189 => 1.0E+189, + 190 => 1.0E+190, + 191 => 1.0E+191, + 192 => 1.0E+192, + 193 => 1.0E+193, + 194 => 1.0E+194, + 195 => 1.0E+195, + 196 => 1.0E+196, + 197 => 1.0E+197, + 198 => 1.0E+198, + 199 => 1.0E+199, + 200 => 1.0E+200, + 201 => 1.0E+201, + 202 => 1.0E+202, + 203 => 1.0E+203, + 204 => 1.0E+204, + 205 => 1.0E+205, + 206 => 1.0E+206, + 207 => 1.0E+207, + 208 => 1.0E+208, + 209 => 1.0E+209, + 210 => 1.0E+210, + 211 => 1.0E+211, + 212 => 1.0E+212, + 213 => 1.0E+213, + 214 => 1.0E+214, + 215 => 1.0E+215, + 216 => 1.0E+216, + 217 => 1.0E+217, + 218 => 1.0E+218, + 219 => 1.0E+219, + 220 => 1.0E+220, + 221 => 1.0E+221, + 222 => 1.0E+222, + 223 => 1.0E+223, + 224 => 1.0E+224, + 225 => 1.0E+225, + 226 => 1.0E+226, + 227 => 1.0E+227, + 228 => 1.0E+228, + 229 => 1.0E+229, + 230 => 1.0E+230, + 231 => 1.0E+231, + 232 => 1.0E+232, + 233 => 1.0E+233, + 234 => 1.0E+234, + 235 => 1.0E+235, + 236 => 1.0E+236, + 237 => 1.0E+237, + 238 => 1.0E+238, + 239 => 1.0E+239, + 240 => 1.0E+240, + 241 => 1.0E+241, + 242 => 1.0E+242, + 243 => 1.0E+243, + 244 => 1.0E+244, + 245 => 1.0E+245, + 246 => 1.0E+246, + 247 => 1.0E+247, + 248 => 1.0E+248, + 249 => 1.0E+249, + 250 => 1.0E+250, + 251 => 1.0E+251, + 252 => 1.0E+252, + 253 => 1.0E+253, + 254 => 1.0E+254, + 255 => 1.0E+255, + 256 => 1.0E+256, + 257 => 1.0E+257, + 258 => 1.0E+258, + 259 => 1.0E+259, + 260 => 1.0E+260, + 261 => 1.0E+261, + 262 => 1.0E+262, + 263 => 1.0E+263, + 264 => 1.0E+264, + 265 => 1.0E+265, + 266 => 1.0E+266, + 267 => 1.0E+267, + 268 => 1.0E+268, + 269 => 1.0E+269, + 270 => 1.0E+270, + 271 => 1.0E+271, + 272 => 1.0E+272, + 273 => 1.0E+273, + 274 => 1.0E+274, + 275 => 1.0E+275, + 276 => 1.0E+276, + 277 => 1.0E+277, + 278 => 1.0E+278, + 279 => 1.0E+279, + 280 => 1.0E+280, + 281 => 1.0E+281, + 282 => 1.0E+282, + 283 => 1.0E+283, + 284 => 1.0E+284, + 285 => 1.0E+285, + 286 => 1.0E+286, + 287 => 1.0E+287, + 288 => 1.0E+288, + 289 => 1.0E+289, + 290 => 1.0E+290, + 291 => 1.0E+291, + 292 => 1.0E+292, + 293 => 1.0E+293, + 294 => 1.0E+294, + 295 => 1.0E+295, + 296 => 1.0E+296, + 297 => 1.0E+297, + 298 => 1.0E+298, + 299 => 1.0E+299, + 300 => 1.0E+300, + 301 => 1.0E+301, + 302 => 1.0E+302, + 303 => 1.0E+303, + 304 => 1.0E+304, + 305 => 1.0E+305, + 306 => 1.0E+306, + 307 => 1.0E+307, + 308 => 1.0E+308); + +end System.Powten_LFlt; diff --git a/gcc/ada/libgnat/s-powtab.ads b/gcc/ada/libgnat/s-powllf.ads index ef8d74a..c5c42a1 100644 --- a/gcc/ada/libgnat/s-powtab.ads +++ b/gcc/ada/libgnat/s-powllf.ads @@ -2,7 +2,7 @@ -- -- -- GNAT COMPILER COMPONENTS -- -- -- --- S Y S T E M . P O W T E N _ T A B L E -- +-- S Y S T E M . P O W T E N _ L L F -- -- -- -- S p e c -- -- -- @@ -31,14 +31,14 @@ -- This package provides a powers of ten table used for real conversions -package System.Powten_Table is +package System.Powten_LLF is pragma Pure; Maxpow : constant := 22; -- The number of entries in this table is chosen to include powers of ten - -- that are exactly representable with long_long_float. Assuming that on - -- all targets we have 53 bits of mantissa for the type, the upper bound is - -- given by 53/(log 5). If the scaling factor for a string is greater than + -- that are exactly representable with Long_Long_Float. Assuming that on + -- all targets we have 53 bits of mantissa for the type, the upper bound + -- is given by 53 * log 2 / log 5. If the scaling factor is greater than -- Maxpow, it can be obtained by several multiplications, which is less -- efficient than with a bigger table, but avoids anomalies at end points. @@ -67,4 +67,4 @@ package System.Powten_Table is 21 => 1.0E+21, 22 => 1.0E+22); -end System.Powten_Table; +end System.Powten_LLF; diff --git a/gcc/ada/libgnat/s-fatsfl.ads b/gcc/ada/libgnat/s-valflt.ads index 45b13e1..5806d58 100644 --- a/gcc/ada/libgnat/s-fatsfl.ads +++ b/gcc/ada/libgnat/s-valflt.ads @@ -2,11 +2,11 @@ -- -- -- GNAT COMPILER COMPONENTS -- -- -- --- S Y S T E M . F A T _ S F L T -- +-- S Y S T E M . V A L _ F L T -- -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2020, Free Software Foundation, Inc. -- +-- Copyright (C) 2020, 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- -- @@ -29,19 +29,29 @@ -- -- ------------------------------------------------------------------------------ --- This package contains an instantiation of the floating-point attribute --- runtime routines for the type Short_Float. +-- This package contains routines for scanning real values for floating point +-- type Float, for use in Text_IO.Float_IO and the Value attribute. -with System.Fat_Gen; +with Interfaces; +with System.Powten_Flt; +with System.Val_Real; -package System.Fat_SFlt is - pragma Pure; +package System.Val_Flt is + pragma Preelaborate; - -- Note the only entity from this package that is accessed by Rtsfind - -- is the name of the package instantiation. Entities within this package - -- (i.e. the individual floating-point attribute routines) are accessed - -- by name using selected notation. + package Impl is new Val_Real + (Float, + Interfaces.Unsigned_32, + System.Powten_Flt.Maxpow, + System.Powten_Flt.Powten'Address); - package Attr_Short_Float is new System.Fat_Gen (Short_Float); + function Scan_Float + (Str : String; + Ptr : not null access Integer; + Max : Integer) return Float + renames Impl.Scan_Real; -end System.Fat_SFlt; + function Value_Float (Str : String) return Float + renames Impl.Value_Real; + +end System.Val_Flt; diff --git a/gcc/ada/libgnat/s-vallfl.ads b/gcc/ada/libgnat/s-vallfl.ads new file mode 100644 index 0000000..c612f75 --- /dev/null +++ b/gcc/ada/libgnat/s-vallfl.ads @@ -0,0 +1,57 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . V A L _ L F L T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2020, 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- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- <http://www.gnu.org/licenses/>. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package contains routines for scanning real values for floating point +-- type Long_Float, for use in Text_IO.Float_IO and the Value attribute. + +with Interfaces; +with System.Powten_LFlt; +with System.Val_Real; + +package System.Val_LFlt is + pragma Preelaborate; + + package Impl is new Val_Real + (Long_Float, + Interfaces.Unsigned_64, + System.Powten_LFlt.Maxpow, + System.Powten_LFlt.Powten'Address); + + function Scan_Long_Float + (Str : String; + Ptr : not null access Integer; + Max : Integer) return Long_Float + renames Impl.Scan_Real; + + function Value_Long_Float (Str : String) return Long_Float + renames Impl.Value_Real; + +end System.Val_LFlt; diff --git a/gcc/ada/libgnat/s-valllf.ads b/gcc/ada/libgnat/s-valllf.ads new file mode 100644 index 0000000..46a311b --- /dev/null +++ b/gcc/ada/libgnat/s-valllf.ads @@ -0,0 +1,57 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- S Y S T E M . V A L _ L L F -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2020, 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- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- <http://www.gnu.org/licenses/>. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package contains routines for scanning real values for floating point +-- type Long_Long_Float, for use in Text_IO.Float_IO and the Value attribute. + +with Interfaces; +with System.Powten_LLF; +with System.Val_Real; + +package System.Val_LLF is + pragma Preelaborate; + + package Impl is new Val_Real + (Long_Long_Float, + Interfaces.Unsigned_64, + System.Powten_LLF.Maxpow, + System.Powten_LLF.Powten'Address); + + function Scan_Long_Long_Float + (Str : String; + Ptr : not null access Integer; + Max : Integer) return Long_Long_Float + renames Impl.Scan_Real; + + function Value_Long_Long_Float (Str : String) return Long_Long_Float + renames Impl.Value_Real; + +end System.Val_LLF; diff --git a/gcc/ada/libgnat/s-valrea.adb b/gcc/ada/libgnat/s-valrea.adb index 693b261..0ac3846 100644 --- a/gcc/ada/libgnat/s-valrea.adb +++ b/gcc/ada/libgnat/s-valrea.adb @@ -34,16 +34,55 @@ with System.Unsigned_Types; use System.Unsigned_Types; with System.Val_Util; use System.Val_Util; with System.Value_R; +pragma Warnings (Off, "non-static constant in preelaborated unit"); +-- Every constant is static given our instantiation model + package body System.Val_Real is - package Impl is new Value_R (Long_Long_Unsigned, Floating => True); + pragma Assert (Num'Machine_Mantissa <= Uns'Size); + -- We need an unsigned type large enough to represent the mantissa + + Need_Extra : constant Boolean := Num'Machine_Mantissa > Uns'Size - 4; + -- If the mantissa of the floating-point type is almost as large as the + -- unsigned type, we do not have enough space for an extra digit in the + -- unsigned type so we handle the extra digit separately, at the cost of + -- a potential roundoff error. + + Precision_Limit : constant Uns := + (if Need_Extra then 2**Num'Machine_Mantissa - 1 else 2**Uns'Size - 1); + -- If we handle the extra digit separately, we use the precision of the + -- floating-point type so that the conversion is exact. + + package Impl is new Value_R (Uns, Precision_Limit, Round => Need_Extra); + + subtype Base_T is Unsigned range 2 .. 16; + + -- The following tables compute the maximum exponent of the base that can + -- fit in the given floating-point format, that is to say the element at + -- index N is the largest K such that N**K <= Num'Last. + + Maxexp32 : constant array (Base_T) of Positive := + (2 => 127, 3 => 80, 4 => 63, 5 => 55, 6 => 49, + 7 => 45, 8 => 42, 9 => 40, 10 => 38, 11 => 37, + 12 => 35, 13 => 34, 14 => 33, 15 => 32, 16 => 31); + + Maxexp64 : constant array (Base_T) of Positive := + (2 => 1023, 3 => 646, 4 => 511, 5 => 441, 6 => 396, + 7 => 364, 8 => 341, 9 => 323, 10 => 308, 11 => 296, + 12 => 285, 13 => 276, 14 => 268, 15 => 262, 16 => 255); + + Maxexp80 : constant array (Base_T) of Positive := + (2 => 16383, 3 => 10337, 4 => 8191, 5 => 7056, 6 => 6338, + 7 => 5836, 8 => 5461, 9 => 5168, 10 => 4932, 11 => 4736, + 12 => 4570, 13 => 4427, 14 => 4303, 15 => 4193, 16 => 4095); function Integer_to_Real (Str : String; - Val : Long_Long_Unsigned; + Val : Uns; Base : Unsigned; Scale : Integer; - Minus : Boolean) return Long_Long_Float; + Extra : Unsigned; + Minus : Boolean) return Num; -- Convert the real value from integer to real representation --------------------- @@ -52,26 +91,133 @@ package body System.Val_Real is function Integer_to_Real (Str : String; - Val : Long_Long_Unsigned; + Val : Uns; Base : Unsigned; Scale : Integer; - Minus : Boolean) return Long_Long_Float + Extra : Unsigned; + Minus : Boolean) return Num is + pragma Assert (Base in 2 .. 16); + + pragma Assert (Num'Machine_Radix = 2); + pragma Unsuppress (Range_Check); - R_Val : Long_Long_Float; + Maxexp : constant Positive := + (if Num'Size = 32 then Maxexp32 (Base) + elsif Num'Size = 64 then Maxexp64 (Base) + elsif Num'Machine_Mantissa = 64 then Maxexp80 (Base) + else raise Program_Error); + -- Maximum exponent of the base that can fit in Num + + B : constant Num := Num (Base); + + R_Val : Num; + S : Integer := Scale; begin -- We call the floating-point processor reset routine so we can be sure - -- that the processor is properly set for conversions. This is notably + -- that the x87 FPU is properly set for conversions. This is especially -- needed on Windows, where calls to the operating system randomly reset -- the processor into 64-bit mode. - System.Float_Control.Reset; + if Num'Machine_Mantissa = 64 then + System.Float_Control.Reset; + end if; + + -- Do the conversion + + R_Val := Num (Val); + + -- Take into account the extra digit, if need be. In this case, the + -- three operands are exact, so using an FMA would be ideal. + + if Need_Extra and then Extra > 0 then + R_Val := R_Val * B + Num (Extra); + S := S - 1; + end if; -- Compute the final value - R_Val := Long_Long_Float (Val) * Long_Long_Float (Base) ** Scale; + if R_Val /= 0.0 and then S /= 0 then + case Base is + -- If the base is a power of two, we use the efficient Scaling + -- attribute with an overflow check, if it is not 2, to catch + -- ludicrous exponents that would result in an infinity or zero. + + when 2 => + R_Val := Num'Scaling (R_Val, S); + + when 4 => + if Integer'First / 2 <= S and then S <= Integer'Last / 2 then + S := S * 2; + end if; + + R_Val := Num'Scaling (R_Val, S); + + when 8 => + if Integer'First / 3 <= S and then S <= Integer'Last / 3 then + S := S * 3; + end if; + + R_Val := Num'Scaling (R_Val, S); + + when 16 => + if Integer'First / 4 <= S and then S <= Integer'Last / 4 then + S := S * 4; + end if; + + R_Val := Num'Scaling (R_Val, S); + + -- If the base is 10, we use a table of powers for accuracy's sake + + when 10 => + declare + Powten : constant array (0 .. Maxpow) of Num; + pragma Import (Ada, Powten); + for Powten'Address use Powten_Address; + + begin + if S > 0 then + while S > Maxpow loop + R_Val := R_Val * Powten (Maxpow); + S := S - Maxpow; + end loop; + + R_Val := R_Val * Powten (S); + + else + while S < -Maxpow loop + R_Val := R_Val / Powten (Maxpow); + S := S + Maxpow; + end loop; + + R_Val := R_Val / Powten (-S); + end if; + end; + + -- Implementation for other bases with exponentiation + + -- When the exponent is positive, we can do the computation + -- directly because, if the exponentiation overflows, then + -- the final value overflows as well. But when the exponent + -- is negative, we may need to do it in two steps to avoid + -- an artificial underflow. + + when others => + if S > 0 then + R_Val := R_Val * B ** S; + + else + if S < -Maxexp then + R_Val := R_Val / B ** Maxexp; + S := S + Maxexp; + end if; + + R_Val := R_Val / B ** (-S); + end if; + end case; + end if; -- Finally deal with initial minus sign, note that this processing is -- done even if Uval is zero, so that -0.0 is correctly interpreted. @@ -87,38 +233,37 @@ package body System.Val_Real is --------------- function Scan_Real - (Str : String; - Ptr : not null access Integer; - Max : Integer) - return Long_Long_Float + (Str : String; + Ptr : not null access Integer; + Max : Integer) return Num is Base : Unsigned; Scale : Integer; Extra : Unsigned; Minus : Boolean; - Val : Long_Long_Unsigned; + Val : Uns; begin Val := Impl.Scan_Raw_Real (Str, Ptr, Max, Base, Scale, Extra, Minus); - return Integer_to_Real (Str, Val, Base, Scale, Minus); + return Integer_to_Real (Str, Val, Base, Scale, Extra, Minus); end Scan_Real; ---------------- -- Value_Real -- ---------------- - function Value_Real (Str : String) return Long_Long_Float is + function Value_Real (Str : String) return Num is Base : Unsigned; Scale : Integer; Extra : Unsigned; Minus : Boolean; - Val : Long_Long_Unsigned; + Val : Uns; begin Val := Impl.Value_Raw_Real (Str, Base, Scale, Extra, Minus); - return Integer_to_Real (Str, Val, Base, Scale, Minus); + return Integer_to_Real (Str, Val, Base, Scale, Extra, Minus); end Value_Real; end System.Val_Real; diff --git a/gcc/ada/libgnat/s-valrea.ads b/gcc/ada/libgnat/s-valrea.ads index cb5374c..d6ade80 100644 --- a/gcc/ada/libgnat/s-valrea.ads +++ b/gcc/ada/libgnat/s-valrea.ads @@ -29,13 +29,26 @@ -- -- ------------------------------------------------------------------------------ +-- This package contains routines for scanning real values for use in +-- Text_IO.Float_IO and the Value attribute. + +generic + + type Num is digits <>; + + type Uns is mod <>; + + Maxpow : Positive; + + Powten_Address : System.Address; + package System.Val_Real is pragma Preelaborate; function Scan_Real (Str : String; Ptr : not null access Integer; - Max : Integer) return Long_Long_Float; + Max : Integer) return Num; -- This function scans the string starting at Str (Ptr.all) for a valid -- real literal according to the syntax described in (RM 3.5(43)). The -- substring scanned extends no further than Str (Max). There are three @@ -65,10 +78,10 @@ package System.Val_Real is -- If this occurs Program_Error is raised with a message noting that this -- case is not supported. Most such cases are eliminated by the caller. - function Value_Real (Str : String) return Long_Long_Float; + function Value_Real (Str : String) return Num; -- Used in computing X'Value (Str) where X is a floating-point type or an -- ordinary fixed-point type. Str is the string argument of the attribute. -- Constraint_Error is raised if the string is malformed, or if the value - -- out of range of Long_Long_Float. + -- out of range of Num. end System.Val_Real; diff --git a/gcc/ada/libgnat/s-valued.adb b/gcc/ada/libgnat/s-valued.adb index 5fa8a99..8930752 100644 --- a/gcc/ada/libgnat/s-valued.adb +++ b/gcc/ada/libgnat/s-valued.adb @@ -35,7 +35,11 @@ with System.Value_R; package body System.Value_D is - package Impl is new Value_R (Uns, Floating => False); + pragma Assert (Int'Size <= Uns'Size); + -- We need an unsigned type large enough to represent the mantissa + + package Impl is new Value_R (Uns, 2**(Int'Size - 1), Round => False); + -- We do not use the Extra digit for decimal fixed-point types function Integer_to_Decimal (Str : String; @@ -228,6 +232,7 @@ package body System.Value_D is Base : Unsigned; ScaleB : Integer; Extra : Unsigned; + pragma Unreferenced (Extra); Minus : Boolean; Val : Uns; @@ -245,6 +250,7 @@ package body System.Value_D is Base : Unsigned; ScaleB : Integer; Extra : Unsigned; + pragma Unreferenced (Extra); Minus : Boolean; Val : Uns; diff --git a/gcc/ada/libgnat/s-valuef.adb b/gcc/ada/libgnat/s-valuef.adb index 9a54cf3..d13111a 100644 --- a/gcc/ada/libgnat/s-valuef.adb +++ b/gcc/ada/libgnat/s-valuef.adb @@ -43,7 +43,11 @@ package body System.Value_F is -- supported values for the base of the literal. Given that the largest -- supported base is 16, this gives a limit of 2**(Int'Size - 5). - package Impl is new Value_R (Uns, Floating => False); + pragma Assert (Int'Size <= Uns'Size); + -- We need an unsigned type large enough to represent the mantissa + + package Impl is new Value_R (Uns, 2**(Int'Size - 1), Round => True); + -- We use the Extra digit for ordinary fixed-point types function Integer_To_Fixed (Str : String; diff --git a/gcc/ada/libgnat/s-valuer.adb b/gcc/ada/libgnat/s-valuer.adb index 06d7adc..9e4de3e 100644 --- a/gcc/ada/libgnat/s-valuer.adb +++ b/gcc/ada/libgnat/s-valuer.adb @@ -33,13 +33,6 @@ with System.Val_Util; use System.Val_Util; package body System.Value_R is - F_Limit : constant Uns := 2 ** (Long_Long_Float'Machine_Mantissa - 1); - I_Limit : constant Uns := 2 ** (Uns'Size - 1); - -- Absolute value of largest representable signed integer - - Precision_Limit : constant Uns := (if Floating then F_Limit else I_Limit); - -- Limit beyond which additional digits are dropped - subtype Char_As_Digit is Unsigned range 0 .. 17; subtype Valid_Digit is Char_As_Digit range 0 .. 15; E_Digit : constant Char_As_Digit := 14; @@ -49,6 +42,14 @@ package body System.Value_R is function As_Digit (C : Character) return Char_As_Digit; -- Given a character return the digit it represents + procedure Round_Extra + (Digit : Char_As_Digit; + Value : in out Uns; + Scale : in out Integer; + Extra : in out Char_As_Digit; + Base : Unsigned); + -- Round the triplet (Value, Scale, Extra) according to Digit in Base + procedure Scan_Decimal_Digits (Str : String; Index : in out Integer; @@ -116,6 +117,45 @@ package body System.Value_R is end case; end As_Digit; + ----------------- + -- Round_Extra -- + ----------------- + + procedure Round_Extra + (Digit : Char_As_Digit; + Value : in out Uns; + Scale : in out Integer; + Extra : in out Char_As_Digit; + Base : Unsigned) + is + B : constant Uns := Uns (Base); + + begin + if Digit >= Base / 2 then + + -- If Extra is maximum, round Value + + if Extra = Base - 1 then + + -- If Value is maximum, scale it up + + if Value = Precision_Limit then + Extra := Char_As_Digit (Value mod B); + Value := Value / B; + Scale := Scale + 1; + Round_Extra (Digit, Value, Scale, Extra, Base); + + else + Extra := 0; + Value := Value + 1; + end if; + + else + Extra := Extra + 1; + end if; + end if; + end Round_Extra; + ------------------------- -- Scan_Decimal_Digits -- ------------------------- @@ -133,6 +173,8 @@ package body System.Value_R is is pragma Assert (Base in 2 .. 16); + pragma Assert (Index in Str'Range); + pragma Assert (Max <= Str'Last); Umax : constant Uns := (Precision_Limit - Uns (Base) + 1) / Uns (Base); -- Max value which cannot overflow on accumulating next digit @@ -144,8 +186,9 @@ package body System.Value_R is -- Set to True if addition of a digit will cause Value to be superior -- to Precision_Limit. - Precision_Limit_Just_Reached : Boolean := False; - -- Set to True if Precision_Limit_Reached was just set to True + Precision_Limit_Just_Reached : Boolean; + -- Set to True if Precision_Limit_Reached was just set to True, but only + -- used when Round is True. Digit : Char_As_Digit; -- The current digit @@ -166,6 +209,10 @@ package body System.Value_R is Extra := 0; end if; + if Round then + Precision_Limit_Just_Reached := False; + end if; + -- The function precondition is that the first character is a valid -- digit. @@ -188,22 +235,12 @@ package body System.Value_R is -- If precision limit has been reached, just ignore any remaining -- digits for the computation of Value and Scale, but store the - -- first in Extra and use the second to round Extra if this is for - -- a fixed-point type (we skip the rounding for a floating-point - -- type to preserve backward compatibility). The scanning should - -- continue only to assess the validity of the string. + -- first in Extra and use the second to round Extra. The scanning + -- should continue only to assess the validity of the string. if Precision_Limit_Reached then - if Precision_Limit_Just_Reached and then not Floating then - if Digit >= Base / 2 then - if Extra = Base - 1 then - Extra := 0; - Value := Value + 1; - else - Extra := Extra + 1; - end if; - end if; - + if Round and then Precision_Limit_Just_Reached then + Round_Extra (Digit, Value, Scale, Extra, Base); Precision_Limit_Just_Reached := False; end if; @@ -235,8 +272,16 @@ package body System.Value_R is Temp := Value * Uns (Base) + Uns (Digit); + -- Check if Temp is larger than Precision_Limit, taking into + -- account that Temp may wrap around when Precision_Limit is + -- equal to the largest integer. + if Value <= Umax - or else (Value <= UmaxB and then Temp <= Precision_Limit) + or else (Value <= UmaxB + and then ((Precision_Limit < Uns'Last + and then Temp <= Precision_Limit) + or else (Precision_Limit = Uns'Last + and then Temp >= Uns (Base)))) then Value := Temp; Scale := Scale - 1; @@ -244,7 +289,9 @@ package body System.Value_R is else Extra := Digit; Precision_Limit_Reached := True; - Precision_Limit_Just_Reached := True; + if Round then + Precision_Limit_Just_Reached := True; + end if; end if; end if; end if; @@ -308,8 +355,9 @@ package body System.Value_R is -- Set to True if addition of a digit will cause Value to be superior -- to Precision_Limit. - Precision_Limit_Just_Reached : Boolean := False; - -- Set to True if Precision_Limit_Reached was just set to True + Precision_Limit_Just_Reached : Boolean; + -- Set to True if Precision_Limit_Reached was just set to True, but only + -- used when Round is True. Digit : Char_As_Digit; -- The current digit @@ -324,6 +372,12 @@ package body System.Value_R is Scale := 0; Extra := 0; + if Round then + Precision_Limit_Just_Reached := False; + end if; + + pragma Assert (Max <= Str'Last); + -- The function precondition is that the first character is a valid -- digit. @@ -346,39 +400,39 @@ package body System.Value_R is -- If precision limit has been reached, just ignore any remaining -- digits for the computation of Value and Scale, but store the - -- first in Extra and use the second to round Extra if this is for - -- a fixed-point type (we skip the rounding for a floating-point - -- type to preserve backward compatibility). The scanning should - -- continue only to assess the validity of the string. + -- first in Extra and use the second to round Extra. The scanning + -- should continue only to assess the validity of the string. if Precision_Limit_Reached then Scale := Scale + 1; - if Precision_Limit_Just_Reached and then not Floating then - if Digit >= Base / 2 then - if Extra = Base - 1 then - Extra := 0; - Value := Value + 1; - else - Extra := Extra + 1; - end if; - end if; - + if Round and then Precision_Limit_Just_Reached then + Round_Extra (Digit, Value, Scale, Extra, Base); Precision_Limit_Just_Reached := False; end if; else Temp := Value * Uns (Base) + Uns (Digit); + -- Check if Temp is larger than Precision_Limit, taking into + -- account that Temp may wrap around when Precision_Limit is + -- equal to the largest integer. + if Value <= Umax - or else (Value <= UmaxB and then Temp <= Precision_Limit) + or else (Value <= UmaxB + and then ((Precision_Limit < Uns'Last + and then Temp <= Precision_Limit) + or else (Precision_Limit = Uns'Last + and then Temp >= Uns (Base)))) then Value := Temp; else Extra := Digit; Precision_Limit_Reached := True; - Precision_Limit_Just_Reached := True; + if Round then + Precision_Limit_Just_Reached := True; + end if; Scale := Scale + 1; end if; end if; @@ -409,7 +463,6 @@ package body System.Value_R is end if; end if; end loop; - end Scan_Integral_Digits; ------------------- @@ -425,6 +478,8 @@ package body System.Value_R is Extra : out Unsigned; Minus : out Boolean) return Uns is + pragma Assert (Max <= Str'Last); + After_Point : Boolean; -- True if a decimal should be parsed @@ -440,7 +495,7 @@ package body System.Value_R is -- Local copy of string pointer Start : Positive; - -- Position of starting non-blank character + pragma Unreferenced (Start); Value : Uns; -- Mantissa as an Integer @@ -461,14 +516,15 @@ package body System.Value_R is Scan_Sign (Str, Ptr, Max, Minus, Start); Index := Ptr.all; - Ptr.all := Start; - -- First character can be either a decimal digit or a dot + pragma Assert (Index >= Str'First); - if Str (Index) in '0' .. '9' then - pragma Annotate - (CodePeer, False_Positive, "test always true", "defensive code"); + pragma Annotate (CodePeer, Modified, Str (Index)); + + -- First character can be either a decimal digit or a dot and for some + -- reason CodePeer incorrectly thinks it is always a digit. + if Str (Index) in '0' .. '9' then After_Point := False; -- If this is a digit it can indicates either the float decimal @@ -496,13 +552,16 @@ package body System.Value_R is -- Check if the first number encountered is a base + pragma Assert (Index >= Str'First); + if Index < Max and then (Str (Index) = '#' or else Str (Index) = ':') then Base_Char := Str (Index); - Base := Unsigned (Value); - if Base < 2 or else Base > 16 then + if Value in 2 .. 16 then + Base := Unsigned (Value); + else Base_Violation := True; Base := 16; end if; @@ -533,6 +592,8 @@ package body System.Value_R is -- Do we have a dot? + pragma Assert (Index >= Str'First); + if not After_Point and then Index <= Max and then Str (Index) = '.' then -- At this stage if After_Point was not set, this means that an @@ -549,6 +610,8 @@ package body System.Value_R is -- Scan the decimal part if After_Point then + pragma Assert (Index <= Max); + Scan_Decimal_Digits (Str, Index, Max, Value, Scale, Char_As_Digit (Extra), Base_Violation, Base, Base_Specified => Base_Char /= ASCII.NUL); @@ -557,6 +620,8 @@ package body System.Value_R is -- If an explicit base was specified ensure that the delimiter is found if Base_Char /= ASCII.NUL then + pragma Assert (Index > Max or else Index in Str'Range); + if Index > Max or else Str (Index) /= Base_Char then Bad_Value (Str); else diff --git a/gcc/ada/libgnat/s-valuer.ads b/gcc/ada/libgnat/s-valuer.ads index 8d2f3fd..a933859 100644 --- a/gcc/ada/libgnat/s-valuer.ads +++ b/gcc/ada/libgnat/s-valuer.ads @@ -38,7 +38,9 @@ generic type Uns is mod <>; - Floating : Boolean; + Precision_Limit : Uns; + + Round : Boolean; package System.Value_R is pragma Preelaborate; diff --git a/gcc/ada/libgnat/system-aix.ads b/gcc/ada/libgnat/system-aix.ads index e346759..db4579f 100644 --- a/gcc/ada/libgnat/system-aix.ads +++ b/gcc/ada/libgnat/system-aix.ads @@ -135,8 +135,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-darwin-arm.ads b/gcc/ada/libgnat/system-darwin-arm.ads index e1af682..b306920 100644 --- a/gcc/ada/libgnat/system-darwin-arm.ads +++ b/gcc/ada/libgnat/system-darwin-arm.ads @@ -151,8 +151,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-darwin-ppc.ads b/gcc/ada/libgnat/system-darwin-ppc.ads index 0b746cc..bc0b147 100644 --- a/gcc/ada/libgnat/system-darwin-ppc.ads +++ b/gcc/ada/libgnat/system-darwin-ppc.ads @@ -151,8 +151,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-darwin-x86.ads b/gcc/ada/libgnat/system-darwin-x86.ads index e27379e..c175224 100644 --- a/gcc/ada/libgnat/system-darwin-x86.ads +++ b/gcc/ada/libgnat/system-darwin-x86.ads @@ -151,8 +151,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-djgpp.ads b/gcc/ada/libgnat/system-djgpp.ads index 35d9381..52e4a88 100644 --- a/gcc/ada/libgnat/system-djgpp.ads +++ b/gcc/ada/libgnat/system-djgpp.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-dragonfly-x86_64.ads b/gcc/ada/libgnat/system-dragonfly-x86_64.ads index 80da5af..0cc0dab 100644 --- a/gcc/ada/libgnat/system-dragonfly-x86_64.ads +++ b/gcc/ada/libgnat/system-dragonfly-x86_64.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-freebsd.ads b/gcc/ada/libgnat/system-freebsd.ads index e8765b8..ce1835c 100644 --- a/gcc/ada/libgnat/system-freebsd.ads +++ b/gcc/ada/libgnat/system-freebsd.ads @@ -126,8 +126,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-hpux-ia64.ads b/gcc/ada/libgnat/system-hpux-ia64.ads index 12252db..202bcac 100644 --- a/gcc/ada/libgnat/system-hpux-ia64.ads +++ b/gcc/ada/libgnat/system-hpux-ia64.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-hpux.ads b/gcc/ada/libgnat/system-hpux.ads index 71a1668..34f2752 100644 --- a/gcc/ada/libgnat/system-hpux.ads +++ b/gcc/ada/libgnat/system-hpux.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-alpha.ads b/gcc/ada/libgnat/system-linux-alpha.ads index d639630..2c638e5 100644 --- a/gcc/ada/libgnat/system-linux-alpha.ads +++ b/gcc/ada/libgnat/system-linux-alpha.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-arm.ads b/gcc/ada/libgnat/system-linux-arm.ads index 6831aad..9020c79 100644 --- a/gcc/ada/libgnat/system-linux-arm.ads +++ b/gcc/ada/libgnat/system-linux-arm.ads @@ -134,8 +134,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-hppa.ads b/gcc/ada/libgnat/system-linux-hppa.ads index 669289d..dccf444 100644 --- a/gcc/ada/libgnat/system-linux-hppa.ads +++ b/gcc/ada/libgnat/system-linux-hppa.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-ia64.ads b/gcc/ada/libgnat/system-linux-ia64.ads index 1dca30c..14b6bb3 100644 --- a/gcc/ada/libgnat/system-linux-ia64.ads +++ b/gcc/ada/libgnat/system-linux-ia64.ads @@ -133,8 +133,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-m68k.ads b/gcc/ada/libgnat/system-linux-m68k.ads index 6a98466..db7f9e7 100644 --- a/gcc/ada/libgnat/system-linux-m68k.ads +++ b/gcc/ada/libgnat/system-linux-m68k.ads @@ -135,8 +135,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-mips.ads b/gcc/ada/libgnat/system-linux-mips.ads index 8476f90..d44bf1b 100644 --- a/gcc/ada/libgnat/system-linux-mips.ads +++ b/gcc/ada/libgnat/system-linux-mips.ads @@ -126,8 +126,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-ppc.ads b/gcc/ada/libgnat/system-linux-ppc.ads index 9785c9a..917b949 100644 --- a/gcc/ada/libgnat/system-linux-ppc.ads +++ b/gcc/ada/libgnat/system-linux-ppc.ads @@ -134,8 +134,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-riscv.ads b/gcc/ada/libgnat/system-linux-riscv.ads index a298bcd..9e93e5e 100644 --- a/gcc/ada/libgnat/system-linux-riscv.ads +++ b/gcc/ada/libgnat/system-linux-riscv.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-s390.ads b/gcc/ada/libgnat/system-linux-s390.ads index 3d80ce7..0ceeb96 100644 --- a/gcc/ada/libgnat/system-linux-s390.ads +++ b/gcc/ada/libgnat/system-linux-s390.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-sh4.ads b/gcc/ada/libgnat/system-linux-sh4.ads index 6227bdb..fd0e0c7 100644 --- a/gcc/ada/libgnat/system-linux-sh4.ads +++ b/gcc/ada/libgnat/system-linux-sh4.ads @@ -133,8 +133,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-sparc.ads b/gcc/ada/libgnat/system-linux-sparc.ads index 0549a85..29a650a 100644 --- a/gcc/ada/libgnat/system-linux-sparc.ads +++ b/gcc/ada/libgnat/system-linux-sparc.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-linux-x86.ads b/gcc/ada/libgnat/system-linux-x86.ads index 5b2b77f..73c99c3 100644 --- a/gcc/ada/libgnat/system-linux-x86.ads +++ b/gcc/ada/libgnat/system-linux-x86.ads @@ -133,8 +133,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-lynxos178-ppc.ads b/gcc/ada/libgnat/system-lynxos178-ppc.ads index 70de803..e2d9765 100644 --- a/gcc/ada/libgnat/system-lynxos178-ppc.ads +++ b/gcc/ada/libgnat/system-lynxos178-ppc.ads @@ -102,7 +102,7 @@ package System is -- (Priority'First + Priority'Last) / 2 -- However, the default priority given by the OS is not the same thing as - -- the Ada value Default_Prioirity (previous examples include VxWorks). + -- the Ada value Default_Priority (previous examples include VxWorks). -- Therefore, we follow a model based on the full range of LynxOS-178 -- priorities. @@ -140,8 +140,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-lynxos178-x86.ads b/gcc/ada/libgnat/system-lynxos178-x86.ads index b14f48b..3131895 100644 --- a/gcc/ada/libgnat/system-lynxos178-x86.ads +++ b/gcc/ada/libgnat/system-lynxos178-x86.ads @@ -102,7 +102,7 @@ package System is -- (Priority'First + Priority'Last) / 2 -- However, the default priority given by the OS is not the same thing as - -- the Ada value Default_Prioirity (previous examples include VxWorks). + -- the Ada value Default_Priority (previous examples include VxWorks). -- Therefore, we follow a model based on the full range of LynxOS-178 -- priorities. @@ -140,8 +140,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-mingw.ads b/gcc/ada/libgnat/system-mingw.ads index c05dee7e..3729e44 100644 --- a/gcc/ada/libgnat/system-mingw.ads +++ b/gcc/ada/libgnat/system-mingw.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-qnx-aarch64.ads b/gcc/ada/libgnat/system-qnx-aarch64.ads index f3316c3..a6336a9 100644 --- a/gcc/ada/libgnat/system-qnx-aarch64.ads +++ b/gcc/ada/libgnat/system-qnx-aarch64.ads @@ -134,8 +134,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-rtems.ads b/gcc/ada/libgnat/system-rtems.ads index 8907d9e..dca09dd 100644 --- a/gcc/ada/libgnat/system-rtems.ads +++ b/gcc/ada/libgnat/system-rtems.ads @@ -144,8 +144,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-solaris-sparc.ads b/gcc/ada/libgnat/system-solaris-sparc.ads index f211eed..1efc78f 100644 --- a/gcc/ada/libgnat/system-solaris-sparc.ads +++ b/gcc/ada/libgnat/system-solaris-sparc.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-solaris-x86.ads b/gcc/ada/libgnat/system-solaris-x86.ads index 82fe656..8dc46ed 100644 --- a/gcc/ada/libgnat/system-solaris-x86.ads +++ b/gcc/ada/libgnat/system-solaris-x86.ads @@ -125,8 +125,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads index 7412611..592e25b 100644 --- a/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks-arm-rtp-smp.ads @@ -144,8 +144,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-arm-rtp.ads b/gcc/ada/libgnat/system-vxworks-arm-rtp.ads index 697f351..ac025ce 100644 --- a/gcc/ada/libgnat/system-vxworks-arm-rtp.ads +++ b/gcc/ada/libgnat/system-vxworks-arm-rtp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-arm.ads b/gcc/ada/libgnat/system-vxworks-arm.ads index 5f767b2..483881f 100644 --- a/gcc/ada/libgnat/system-vxworks-arm.ads +++ b/gcc/ada/libgnat/system-vxworks-arm.ads @@ -138,8 +138,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-e500-kernel.ads b/gcc/ada/libgnat/system-vxworks-e500-kernel.ads index 2d64186..ac674bd 100644 --- a/gcc/ada/libgnat/system-vxworks-e500-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks-e500-kernel.ads @@ -138,8 +138,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads index 46cd6e7..45a99f3 100644 --- a/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks-e500-rtp-smp.ads @@ -144,8 +144,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-e500-rtp.ads b/gcc/ada/libgnat/system-vxworks-e500-rtp.ads index c232fe0..27f7707 100644 --- a/gcc/ada/libgnat/system-vxworks-e500-rtp.ads +++ b/gcc/ada/libgnat/system-vxworks-e500-rtp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-e500-vthread.ads b/gcc/ada/libgnat/system-vxworks-e500-vthread.ads index 929a642..f60fbcd 100644 --- a/gcc/ada/libgnat/system-vxworks-e500-vthread.ads +++ b/gcc/ada/libgnat/system-vxworks-e500-vthread.ads @@ -140,8 +140,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads b/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads index 63cebb7..ec3de26 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads @@ -138,8 +138,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads b/gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads index 4347a01..e38ff3b 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc-ravenscar.ads @@ -163,8 +163,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := True; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := True; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads index 469c0f3..b4277e2 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads @@ -144,8 +144,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads b/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads index 8fba1b0..eeeca9b 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-ppc-vthread.ads b/gcc/ada/libgnat/system-vxworks-ppc-vthread.ads index a4f4eb2..05d27d6 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc-vthread.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc-vthread.ads @@ -140,8 +140,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := True; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-ppc.ads b/gcc/ada/libgnat/system-vxworks-ppc.ads index 67d936a..9862f42 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc.ads @@ -141,8 +141,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-x86-kernel.ads b/gcc/ada/libgnat/system-vxworks-x86-kernel.ads index e4d0344..b6eebb5 100644 --- a/gcc/ada/libgnat/system-vxworks-x86-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks-x86-kernel.ads @@ -141,8 +141,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads index f2a4142..e6d31de 100644 --- a/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks-x86-rtp-smp.ads @@ -142,8 +142,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-x86-rtp.ads b/gcc/ada/libgnat/system-vxworks-x86-rtp.ads index d597600..960a7ed 100644 --- a/gcc/ada/libgnat/system-vxworks-x86-rtp.ads +++ b/gcc/ada/libgnat/system-vxworks-x86-rtp.ads @@ -141,8 +141,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-x86-vthread.ads b/gcc/ada/libgnat/system-vxworks-x86-vthread.ads index a1eb8f0..f3f4037 100644 --- a/gcc/ada/libgnat/system-vxworks-x86-vthread.ads +++ b/gcc/ada/libgnat/system-vxworks-x86-vthread.ads @@ -140,8 +140,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := True; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks-x86.ads b/gcc/ada/libgnat/system-vxworks-x86.ads index 226a3dc..55bc3f6 100644 --- a/gcc/ada/libgnat/system-vxworks-x86.ads +++ b/gcc/ada/libgnat/system-vxworks-x86.ads @@ -141,8 +141,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads index e2ed214..0624ffa 100644 --- a/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-aarch64.ads b/gcc/ada/libgnat/system-vxworks7-aarch64.ads index ef1211b..1491332 100644 --- a/gcc/ada/libgnat/system-vxworks7-aarch64.ads +++ b/gcc/ada/libgnat/system-vxworks7-aarch64.ads @@ -140,8 +140,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads index 2b4c64e..d7da53d 100644 --- a/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads @@ -140,8 +140,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-arm.ads b/gcc/ada/libgnat/system-vxworks7-arm.ads index 5f767b2..483881f 100644 --- a/gcc/ada/libgnat/system-vxworks7-arm.ads +++ b/gcc/ada/libgnat/system-vxworks7-arm.ads @@ -138,8 +138,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads b/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads index 4182a1f..e697629 100644 --- a/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-e500-kernel.ads @@ -138,8 +138,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads index d4a303b..6388628 100644 --- a/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-e500-rtp-smp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads b/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads index c7acf95..69a0a66 100644 --- a/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads +++ b/gcc/ada/libgnat/system-vxworks7-e500-rtp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads b/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads index 71d06b4..82c5d3a 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads @@ -138,8 +138,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads index 3879614..d34d632 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads b/gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads index b5393cd..404da85 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc-rtp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads b/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads index 94f69ee..05a51d9 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads @@ -140,8 +140,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads index bafa41d..e55de8c 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads @@ -143,8 +143,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads b/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads index ae0c39f..b3659a3 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads @@ -138,8 +138,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads index 4681bba..8c2d527 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads @@ -141,8 +141,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-x86-rtp.ads b/gcc/ada/libgnat/system-vxworks7-x86-rtp.ads index 6b176d1..f6528ba 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86-rtp.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86-rtp.ads @@ -141,8 +141,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads b/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads index eadf5ee..fc4655f 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads @@ -138,8 +138,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads index a97b80a..2bc8e6a 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads @@ -141,8 +141,6 @@ private Denorm : constant Boolean := True; Duration_32_Bits : constant Boolean := False; Exit_Status_Supported : constant Boolean := True; - Fractional_Fixed_Ops : constant Boolean := False; - Frontend_Layout : constant Boolean := False; Machine_Overflows : constant Boolean := False; Machine_Rounds : constant Boolean := True; Preallocated_Stacks : constant Boolean := False; diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index f55e9c6..6b32a96 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -1135,7 +1135,7 @@ package Opt is -- make it easier to interface with back ends that implement C semantics. -- There is a section in Sinfo which describes the transformations made. - Multiple_Unit_Index : Int := 0; + Multiple_Unit_Index : Nat := 0; -- GNAT -- This is set non-zero if the current unit is being compiled in multiple -- unit per file mode, meaning that the current unit is selected from the diff --git a/gcc/ada/par-ch10.adb b/gcc/ada/par-ch10.adb index e4298e8..70984b1 100644 --- a/gcc/ada/par-ch10.adb +++ b/gcc/ada/par-ch10.adb @@ -861,11 +861,7 @@ package body Ch10 is ("unexpected LIMITED ignored"); end if; - if Ada_Version < Ada_2005 then - Error_Msg_SP ("LIMITED WITH is an Ada 2005 extension"); - Error_Msg_SP - ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("`LIMITED WITH`"); elsif Token = Tok_Private then Has_Limited := False; @@ -879,13 +875,10 @@ package body Ch10 is Restore_Scan_State (Scan_State); -- to PRIVATE return Item_List; - - elsif Ada_Version < Ada_2005 then - Error_Msg_SP ("`PRIVATE WITH` is an Ada 2005 extension"); - Error_Msg_SP - ("\unit must be compiled with -gnat05 switch"); end if; + Error_Msg_Ada_2005_Extension ("`PRIVATE WITH`"); + else Has_Limited := False; Has_Private := False; diff --git a/gcc/ada/par-ch11.adb b/gcc/ada/par-ch11.adb index 468ba03a..63f0c6e 100644 --- a/gcc/ada/par-ch11.adb +++ b/gcc/ada/par-ch11.adb @@ -227,10 +227,7 @@ package body Ch11 is end if; if Token = Tok_With then - if Ada_Version < Ada_2005 then - Error_Msg_SC ("string expression in raise is Ada 2005 extension"); - Error_Msg_SC ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("string expression in raise"); Scan; -- past WITH Set_Expression (Raise_Node, P_Expression); diff --git a/gcc/ada/par-ch12.adb b/gcc/ada/par-ch12.adb index c53f7cb..a4799c7 100644 --- a/gcc/ada/par-ch12.adb +++ b/gcc/ada/par-ch12.adb @@ -349,24 +349,19 @@ package body Ch12 is -- Ada 2005: an association can be given by: others => <> if Token = Tok_Others then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("partial parameterization of formal packages" - & " is an Ada 2005 extension"); - Error_Msg_SP - ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension + ("partial parameterization of formal package"); Scan; -- past OTHERS if Token /= Tok_Arrow then - Error_Msg_BC ("expect arrow after others"); + Error_Msg_BC ("expect `='>` after OTHERS"); else Scan; -- past arrow end if; if Token /= Tok_Box then - Error_Msg_BC ("expect Box after arrow"); + Error_Msg_BC ("expect `'<'>` after `='>`"); else Scan; -- past box end if; @@ -428,12 +423,12 @@ package body Ch12 is procedure P_Formal_Object_Declarations (Decls : List_Id) is Decl_Node : Node_Id; - Ident : Nat; + Ident : Pos; Not_Null_Present : Boolean := False; - Num_Idents : Nat; + Num_Idents : Pos; Scan_State : Saved_Scan_State; - Idents : array (Int range 1 .. 4096) of Entity_Id; + Idents : array (Pos range 1 .. 4096) of Entity_Id; -- This array holds the list of defining identifiers. The upper bound -- of 4096 is intended to be essentially infinite, and we do not even -- bother to check for it being exceeded. @@ -478,12 +473,8 @@ package body Ch12 is Set_Access_Definition (Decl_Node, P_Access_Definition (Not_Null_Present)); - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("access definition not allowed in formal object " & - "declaration"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension + ("access definition in formal object declaration"); -- Formal object with a subtype mark @@ -923,23 +914,13 @@ package body Ch12 is Set_Limited_Present (Def_Node); Scan; -- past LIMITED - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("LIMITED in derived type is an Ada 2005 extension"); - Error_Msg_SP - ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("LIMITED in derived type"); elsif Token = Tok_Synchronized then Set_Synchronized_Present (Def_Node); Scan; -- past SYNCHRONIZED - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("SYNCHRONIZED in derived type is an Ada 2005 extension"); - Error_Msg_SP - ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("SYNCHRONIZED in derived type"); end if; if Token = Tok_Abstract then @@ -955,11 +936,7 @@ package body Ch12 is if Token = Tok_And then Scan; -- past AND - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("abstract interface is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("abstract interface"); Set_Interface_List (Def_Node, New_List); @@ -972,20 +949,21 @@ package body Ch12 is if Token = Tok_With then - if Ada_Version >= Ada_2020 and not Next_Token_Is (Tok_Private) then - + if Next_Token_Is (Tok_Private) then + Scan; -- past WITH + Set_Private_Present (Def_Node, True); + T_Private; + else -- Formal type has aspect specifications, parsed later. -- Otherwise this is a formal derived type. Note that it may -- also include later aspect specifications, as in: - -- type DT is new T with private with atomic; + -- type DT is new T with private with Atomic; - return Def_Node; + Error_Msg_Ada_2020_Feature + ("formal type with aspect specification", Token_Ptr); - else - Scan; -- past WITH - Set_Private_Present (Def_Node, True); - T_Private; + return Def_Node; end if; elsif Token = Tok_Tagged then @@ -1190,11 +1168,7 @@ package body Ch12 is New_Node (N_Formal_Abstract_Subprogram_Declaration, Prev_Sloc); Scan; -- past ABSTRACT - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("formal abstract subprograms are an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("formal abstract subprogram"); else Def_Node := @@ -1214,11 +1188,7 @@ package body Ch12 is Scan; -- past <> elsif Token = Tok_Null then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("null default subprograms are an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("null default subprogram"); if Nkind (Spec_Node) = N_Procedure_Specification then Set_Null_Present (Spec_Node); diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb index 017a0a1..78a3ebd 100644 --- a/gcc/ada/par-ch3.adb +++ b/gcc/ada/par-ch3.adb @@ -690,12 +690,7 @@ package body Ch3 is -- Ada 2005 (AI-419): LIMITED NEW elsif Token = Tok_New then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("LIMITED in derived type is an Ada 2005 extension"); - Error_Msg_SP - ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("LIMITED in derived type"); Typedef_Node := P_Derived_Type_Def_Or_Private_Ext_Decl; Set_Limited_Present (Typedef_Node); @@ -919,7 +914,7 @@ package body Ch3 is if Unknown_Dis then Error_Msg - ("Full type declaration cannot have unknown discriminants", + ("full type declaration cannot have unknown discriminants", Discr_Sloc); end if; end if; @@ -1056,7 +1051,7 @@ package body Ch3 is -- otherwise things are really messed up, so resynchronize. if Token = Tok_Record then - Error_Msg_SC ("anonymous record definitions are not permitted"); + Error_Msg_SC ("anonymous record definition not permitted"); Discard_Junk_Node (P_Record_Definition); return Error; @@ -1491,11 +1486,8 @@ package body Ch3 is -- access_definition elsif Token = Tok_Renames then - if Ada_Version < Ada_2020 then - Error_Msg_SC - ("object renaming without subtype is an Ada 202x feature"); - Error_Msg_SC ("\compile with -gnat2020"); - end if; + Error_Msg_Ada_2020_Feature + ("object renaming without subtype", Token_Ptr); Scan; -- past renames @@ -1671,13 +1663,8 @@ package body Ch3 is Set_Null_Exclusion_Present (Decl_Node, Not_Null_Present); if Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("generalized use of anonymous access types " & - "is an Ada 2005 extension"); - Error_Msg_SP - ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension + ("generalized use of anonymous access types"); Set_Object_Definition (Decl_Node, P_Access_Definition (Not_Null_Present)); @@ -1734,13 +1721,8 @@ package body Ch3 is -- Access definition (AI-406) or subtype indication if Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("generalized use of anonymous access types " & - "is an Ada 2005 extension"); - Error_Msg_SP - ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension + ("generalized use of anonymous access types"); Set_Object_Definition (Decl_Node, P_Access_Definition (Not_Null_Present)); @@ -1779,12 +1761,8 @@ package body Ch3 is Not_Null_Present := P_Null_Exclusion; -- Ada 2005 (AI-231/423) if Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("generalized use of anonymous access types " & - "is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension + ("generalized use of anonymous access types"); Acc_Node := P_Access_Definition (Not_Null_Present); @@ -1850,12 +1828,8 @@ package body Ch3 is -- Ada 2005 (AI-230): Access Definition case elsif Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("generalized use of anonymous access types " & - "is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension + ("generalized use of anonymous access types"); Acc_Node := P_Access_Definition (Null_Exclusion_Present => False); @@ -2063,11 +2037,7 @@ package body Ch3 is if Token = Tok_And then Scan; -- past AND - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("abstract interface is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("abstract interface"); Set_Interface_List (Typedef_Node, New_List); @@ -2457,7 +2427,7 @@ package body Ch3 is begin if Ada_Version = Ada_83 then - Error_Msg_SC ("(Ada 83): modular types not allowed"); + Error_Msg_SC ("(Ada 83) modular types not allowed"); end if; Typedef_Node := New_Node (N_Modular_Type_Definition, Token_Ptr); @@ -2795,12 +2765,8 @@ package body Ch3 is -- Ada 2005 (AI-230): Access Definition case if Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("generalized use of anonymous access types " & - "is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension + ("generalized use of anonymous access types"); -- AI95-406 makes "aliased" legal (and useless) in this context so -- followintg code which used to be needed is commented out. @@ -3002,9 +2968,9 @@ package body Ch3 is -- DISCRIMINANT_SPECIFICATION ::= -- DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK - -- [:= DEFAULT_EXPRESSION] + -- [:= DEFAULT_EXPRESSION] [ASPECT_SPECIFICATION] -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION - -- [:= DEFAULT_EXPRESSION] + -- [:= DEFAULT_EXPRESSION] [ASPECT_SPECIFICATION] -- If no known discriminant part is present, then No_List is returned @@ -3098,6 +3064,10 @@ package body Ch3 is Set_Expression (Specification_Node, Init_Expr_Opt (True)); + if Token = Tok_With then + P_Aspect_Specifications (Specification_Node, False); + end if; + if Ident > 1 then Set_Prev_Ids (Specification_Node, True); end if; @@ -3584,7 +3554,7 @@ package body Ch3 is Set_Defining_Identifier (Decl_Node, Idents (Ident)); if Token = Tok_Constant then - Error_Msg_SC ("constant components are not permitted"); + Error_Msg_SC ("constant component not permitted"); Scan; end if; @@ -3604,12 +3574,8 @@ package body Ch3 is -- Ada 2005 (AI-230): Access Definition case if Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("generalized use of anonymous access types " & - "is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension + ("generalized use of anonymous access types"); -- AI95-406 makes "aliased" legal (and useless) here, so the -- following code which used to be required is commented out. @@ -3629,7 +3595,7 @@ package body Ch3 is Set_Null_Exclusion_Present (CompDef_Node, Not_Null_Present); if Token = Tok_Array then - Error_Msg_SC ("anonymous arrays not allowed as components"); + Error_Msg_SC ("anonymous array not allowed as component"); raise Error_Resync; end if; @@ -3949,10 +3915,7 @@ package body Ch3 is Typedef_Node : Node_Id; begin - if Ada_Version < Ada_2005 then - Error_Msg_SP ("abstract interface is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("abstract interface"); if Abstract_Present then Error_Msg_SP @@ -4139,11 +4102,7 @@ package body Ch3 is -- Ada 2005 (AI-318-02) if Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SC - ("anonymous access result type is an Ada 2005 extension"); - Error_Msg_SC ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("anonymous access result type"); Result_Node := P_Access_Definition (Result_Not_Null); @@ -4241,10 +4200,7 @@ package body Ch3 is or else Token = Tok_Procedure or else Token = Tok_Function then - if Ada_Version < Ada_2005 then - Error_Msg_SP ("access-to-subprogram is an Ada 2005 extension"); - Error_Msg_SP ("\unit should be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("access-to-subprogram"); Subp_Node := P_Access_Type_Definition (Header_Already_Parsed => True); Set_Null_Exclusion_Present (Subp_Node, Null_Exclusion_Present); @@ -4259,17 +4215,14 @@ package body Ch3 is if Token = Tok_All then if Ada_Version < Ada_2005 then Error_Msg_SP - ("ALL is not permitted for anonymous access types"); + ("ALL not permitted for anonymous access type"); end if; Scan; -- past ALL Set_All_Present (Def_Node); elsif Token = Tok_Constant then - if Ada_Version < Ada_2005 then - Error_Msg_SP ("access-to-constant is an Ada 2005 extension"); - Error_Msg_SP ("\unit should be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("access-to-constant"); Scan; -- past CONSTANT Set_Constant_Present (Def_Node); @@ -4794,7 +4747,7 @@ package body Ch3 is elsif Kind = N_Assignment_Statement then Error_Msg ("assignment statement not allowed in package spec", - Sloc (Decl)); + Sloc (Decl)); end if; Next (Decl); diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb index a146902..340668e 100644 --- a/gcc/ada/par-ch4.adb +++ b/gcc/ada/par-ch4.adb @@ -1233,7 +1233,7 @@ package body Ch4 is Attr_Node := New_Node (N_Attribute_Reference, Token_Ptr); Set_Attribute_Name (Attr_Node, Attr_Name); if Attr_Name /= Name_Reduce then - Error_Msg ("reduce attribute expected", Prev_Token_Ptr); + Error_Msg ("Reduce attribute expected", Prev_Token_Ptr); end if; Set_Prefix (Attr_Node, S); @@ -1360,9 +1360,7 @@ package body Ch4 is procedure Box_Error is begin - if Ada_Version < Ada_2005 then - Error_Msg_SC ("box in aggregate is an Ada 2005 extension"); - end if; + Error_Msg_Ada_2005_Extension ("'<'> in aggregate"); -- Ada 2005 (AI-287): The box notation is allowed only with named -- notation because positional notation might be error prone. For @@ -1580,17 +1578,13 @@ package body Ch4 is -- Deal with others association first. This is a named association if No (Expr_Node) then - if No (Assoc_List) then - Assoc_List := New_List; - end if; - - Append (P_Record_Or_Array_Component_Association, Assoc_List); + Append_New (P_Record_Or_Array_Component_Association, Assoc_List); -- Improper use of WITH elsif Token = Tok_With then Error_Msg_SC ("WITH must be preceded by single expression in " & - "extension aggregate"); + "extension aggregate"); raise Error_Resync; -- Range attribute can only appear as part of a discrete choice list @@ -1612,11 +1606,7 @@ package body Ch4 is elsif Nkind (Expr_Node) in N_Iterated_Component_Association | N_Iterated_Element_Association then - if No (Assoc_List) then - Assoc_List := New_List (Expr_Node); - else - Append_To (Assoc_List, Expr_Node); - end if; + Append_New (Expr_Node, Assoc_List); elsif Token = Tok_Comma or else Token = Tok_Right_Paren @@ -1630,11 +1620,7 @@ package body Ch4 is & "named association)"); end if; - if No (Expr_List) then - Expr_List := New_List; - end if; - - Append (Expr_Node, Expr_List); + Append_New (Expr_Node, Expr_List); -- Check for aggregate followed by left parent, maybe missing comma @@ -1643,18 +1629,10 @@ package body Ch4 is then T_Comma; - if No (Expr_List) then - Expr_List := New_List; - end if; - - Append (Expr_Node, Expr_List); + Append_New (Expr_Node, Expr_List); elsif Token = Tok_Right_Bracket then - if No (Expr_List) then - Expr_List := New_List; - end if; - - Append (Expr_Node, Expr_List); + Append_New (Expr_Node, Expr_List); exit; -- Anything else is assumed to be a named association @@ -1662,11 +1640,7 @@ package body Ch4 is else Restore_Scan_State (Scan_State); -- to start of expression - if No (Assoc_List) then - Assoc_List := New_List; - end if; - - Append (P_Record_Or_Array_Component_Association, Assoc_List); + Append_New (P_Record_Or_Array_Component_Association, Assoc_List); end if; exit when not Comma_Present; @@ -1779,11 +1753,7 @@ package body Ch4 is -- Ada 2005(AI-287): The box notation is used to indicate the -- default initialization of aggregate components - if Ada_Version < Ada_2005 then - Error_Msg_SP - ("component association with '<'> is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("component association with '<'>"); Set_Box_Present (Assoc_Node); Scan; -- Past box @@ -2958,10 +2928,7 @@ package body Ch4 is Scan; -- past minus when Tok_At_Sign => -- AI12-0125 : target_name - if Ada_Version < Ada_2020 then - Error_Msg_SC ("target name is an Ada 202x feature"); - Error_Msg_SC ("\compile with -gnat2020"); - end if; + Error_Msg_Ada_2020_Feature ("target name", Token_Ptr); Node1 := P_Name; return Node1; @@ -3537,10 +3504,7 @@ package body Ch4 is Set_Expression (Assoc_Node, P_Expression); end if; - if Ada_Version < Ada_2020 then - Error_Msg_SC ("iterated component is an Ada 202x feature"); - Error_Msg_SC ("\compile with -gnat2020"); - end if; + Error_Msg_Ada_2020_Feature ("iterated component", Token_Ptr); return Assoc_Node; end P_Iterated_Component_Association; @@ -3725,9 +3689,7 @@ package body Ch4 is Result : constant Node_Id := Make_Expression_With_Actions (Loc, Actions, Expression); begin - if Ada_Version < Ada_2020 then - Error_Msg ("declare_expression is an Ada 2020 feature", Loc); - end if; + Error_Msg_Ada_2020_Feature ("declare expression", Loc); return Result; end; diff --git a/gcc/ada/par-ch5.adb b/gcc/ada/par-ch5.adb index 5b002c4..a8d49b1 100644 --- a/gcc/ada/par-ch5.adb +++ b/gcc/ada/par-ch5.adb @@ -1306,14 +1306,16 @@ package body Ch5 is -- syntax rule. else - if Style_Check and then Paren_Count (Cond) > 0 then - if Nkind (Cond) not in N_If_Expression - | N_Case_Expression + if Style_Check + and then + Paren_Count (Cond) > + (if Nkind (Cond) in N_Case_Expression + | N_If_Expression | N_Quantified_Expression - or else Paren_Count (Cond) > 1 - then - Style.Check_Xtra_Parens (First_Sloc (Cond)); - end if; + then 1 + else 0) + then + Style.Check_Xtra_Parens (First_Sloc (Cond)); end if; -- And return the result @@ -1712,9 +1714,9 @@ package body Ch5 is Set_Discrete_Subtype_Definition (Loop_Param_Specification_Node, P_Discrete_Subtype_Definition); - if Ada_Version >= Ada_2020 - and then Token = Tok_When - then + if Token = Tok_When then + Error_Msg_Ada_2020_Feature ("iterator filter", Token_Ptr); + Scan; -- past WHEN Set_Iterator_Filter (Loop_Param_Specification_Node, P_Condition); @@ -1773,9 +1775,9 @@ package body Ch5 is Set_Name (Node1, P_Name); - if Ada_Version >= Ada_2020 - and then Token = Tok_When - then + if Token = Tok_When then + Error_Msg_Ada_2020_Feature ("iterator filter", Token_Ptr); + Scan; -- past WHEN Set_Iterator_Filter (Node1, P_Condition); diff --git a/gcc/ada/par-ch6.adb b/gcc/ada/par-ch6.adb index 0fcd23a..145fbc4 100644 --- a/gcc/ada/par-ch6.adb +++ b/gcc/ada/par-ch6.adb @@ -426,11 +426,7 @@ package body Ch6 is -- Ada 2005 (AI-318-02) if Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SC - ("anonymous access result type is an Ada 2005 extension"); - Error_Msg_SC ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("anonymous access result type"); Result_Node := P_Access_Definition (Result_Not_Null); @@ -598,10 +594,7 @@ package body Ch6 is -- Ada 2005 (AI-248): Parse a null procedure declaration elsif Token = Tok_Null then - if Ada_Version < Ada_2005 then - Error_Msg_SP ("null procedures are an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("null procedure"); Scan; -- past NULL @@ -1064,11 +1057,7 @@ package body Ch6 is -- Ada 2005 (AI-318-02) if Token = Tok_Access then - if Ada_Version < Ada_2005 then - Error_Msg_SC - ("anonymous access result type is an Ada 2005 extension"); - Error_Msg_SC ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("anonymous access result type"); Result_Node := P_Access_Definition (Result_Not_Null); @@ -1631,9 +1620,8 @@ package body Ch6 is -- the time being. elsif Token = Tok_With then - if Ada_Version < Ada_2020 then - Error_Msg_SP ("aspect on formal parameter requires -gnat2020"); - end if; + Error_Msg_Ada_2020_Feature + ("aspect on formal parameter", Token_Ptr); P_Aspect_Specifications (Specification_Node, False); @@ -1770,7 +1758,8 @@ package body Ch6 is -- -- EXTENDED_RETURN_STATEMENT ::= -- return DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION - -- [:= EXPRESSION] [do + -- [:= EXPRESSION] + -- [ASPECT_SPECIFICATION] [do -- HANDLED_SEQUENCE_OF_STATEMENTS -- end return]; -- @@ -1916,6 +1905,7 @@ package body Ch6 is Ret_Sloc : constant Source_Ptr := Token_Ptr; Ret_Strt : constant Column_Number := Start_Column; Ret_Node : Node_Id; + Decl : Node_Id; -- Start of processing for P_Return_Statement @@ -1948,15 +1938,15 @@ package body Ch6 is -- Extended_return_statement (Ada 2005 only -- AI-318): else - if Ada_Version < Ada_2005 then - Error_Msg_SP - (" extended_return_statement is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("extended return statement"); Ret_Node := New_Node (N_Extended_Return_Statement, Ret_Sloc); - Set_Return_Object_Declarations - (Ret_Node, New_List (P_Return_Object_Declaration)); + Decl := P_Return_Object_Declaration; + Set_Return_Object_Declarations (Ret_Node, New_List (Decl)); + + if Token = Tok_With then + P_Aspect_Specifications (Decl, False); + end if; if Token = Tok_Do then Push_Scope_Stack; diff --git a/gcc/ada/par-ch9.adb b/gcc/ada/par-ch9.adb index 2672e52..151656c 100644 --- a/gcc/ada/par-ch9.adb +++ b/gcc/ada/par-ch9.adb @@ -220,10 +220,7 @@ package body Ch9 is if Token = Tok_New then Scan; -- past NEW - if Ada_Version < Ada_2005 then - Error_Msg_SP ("task interface is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("task interface"); Set_Interface_List (Task_Node, New_List); @@ -565,10 +562,7 @@ package body Ch9 is if Token = Tok_New then Scan; -- past NEW - if Ada_Version < Ada_2005 then - Error_Msg_SP ("protected interface is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - end if; + Error_Msg_Ada_2005_Extension ("protected interface"); Set_Interface_List (Protected_Node, New_List); @@ -758,8 +752,7 @@ package body Ch9 is if Is_Overriding or else Not_Overriding then if Ada_Version < Ada_2005 then - Error_Msg_SP ("overriding indicator is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); + Error_Msg_Ada_2005_Extension ("overriding indicator"); elsif Token = Tok_Entry then Decl := P_Entry_Declaration; @@ -910,7 +903,7 @@ package body Ch9 is Resync_Past_Semicolon; elsif Token in Token_Class_Declk then - Error_Msg_SC ("this declaration not allowed in protected body"); + Error_Msg_SC ("declaration not allowed in protected body"); Resync_Past_Semicolon; else @@ -968,9 +961,7 @@ package body Ch9 is if Is_Overriding or else Not_Overriding then if Ada_Version < Ada_2005 then - Error_Msg_SP ("overriding indicator is an Ada 2005 extension"); - Error_Msg_SP ("\unit must be compiled with -gnat05 switch"); - + Error_Msg_Ada_2005_Extension ("overriding indicator"); elsif Token /= Tok_Entry then Error_Msg_SC -- CODEFIX ("ENTRY expected!"); @@ -1316,6 +1307,7 @@ package body Ch9 is -- ENTRY_INDEX_SPECIFICATION ::= -- for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION + -- [ASPECT_SPECIFICATION] -- Error recovery: can raise Error_Resync @@ -1329,6 +1321,11 @@ package body Ch9 is T_In; Set_Discrete_Subtype_Definition (Iterator_Node, P_Discrete_Subtype_Definition); + + if Token = Tok_With then + P_Aspect_Specifications (Iterator_Node, False); + end if; + return Iterator_Node; end P_Entry_Index_Specification; @@ -1654,7 +1651,7 @@ package body Ch9 is if Ada_Version = Ada_83 then Error_Msg_BC ("OR or ELSE expected"); else - Error_Msg_BC ("OR or ELSE or THEN ABORT expected"); + Error_Msg_BC ("OR or ELSE or `THEN ABORT` expected"); end if; Select_Node := Error; diff --git a/gcc/ada/repinfo.adb b/gcc/ada/repinfo.adb index dff3272..61912ef 100644 --- a/gcc/ada/repinfo.adb +++ b/gcc/ada/repinfo.adb @@ -92,18 +92,6 @@ package body Repinfo is Table_Increment => Alloc.Rep_Table_Increment, Table_Name => "BE_Rep_Table"); - -------------------------------------------------------------- - -- Representation of Front-End Dynamic Size/Offset Entities -- - -------------------------------------------------------------- - - package Dynamic_SO_Entity_Table is new Table.Table ( - Table_Component_Type => Entity_Id, - Table_Index_Type => Nat, - Table_Low_Bound => 1, - Table_Initial => Alloc.Rep_Table_Initial, - Table_Increment => Alloc.Rep_Table_Increment, - Table_Name => "FE_Rep_Table"); - Unit_Casing : Casing_Type; -- Identifier casing for current unit. This is set by List_Rep_Info for -- each unit, before calling subprograms which may read it. @@ -138,11 +126,6 @@ package body Repinfo is -- Local Subprograms -- ----------------------- - function Back_End_Layout return Boolean; - -- Test for layout mode, True = back end, False = front end. This function - -- is used rather than checking the configuration parameter because we do - -- not want Repinfo to depend on Targparm. - procedure List_Entities (Ent : Entity_Id; Bytes_Big_Endian : Boolean; @@ -218,18 +201,6 @@ package body Repinfo is -- flag Paren is set, then the output is surrounded in parentheses if it is -- other than a simple value. - --------------------- - -- Back_End_Layout -- - --------------------- - - function Back_End_Layout return Boolean is - begin - -- We have back-end layout if the back end has made any entries in the - -- table of GCC expressions, otherwise we have front-end layout. - - return Rep_Table.Last > 0; - end Back_End_Layout; - ------------------------ -- Create_Discrim_Ref -- ------------------------ @@ -241,16 +212,6 @@ package body Repinfo is Op1 => Discriminant_Number (Discr)); end Create_Discrim_Ref; - --------------------------- - -- Create_Dynamic_SO_Ref -- - --------------------------- - - function Create_Dynamic_SO_Ref (E : Entity_Id) return Dynamic_SO_Ref is - begin - Dynamic_SO_Entity_Table.Append (E); - return UI_From_Int (-Dynamic_SO_Entity_Table.Last); - end Create_Dynamic_SO_Ref; - ----------------- -- Create_Node -- ----------------- @@ -279,33 +240,6 @@ package body Repinfo is return Entity_Header_Num (Id mod Relevant_Entities_Size); end Entity_Hash; - --------------------------- - -- Get_Dynamic_SO_Entity -- - --------------------------- - - function Get_Dynamic_SO_Entity (U : Dynamic_SO_Ref) return Entity_Id is - begin - return Dynamic_SO_Entity_Table.Table (-UI_To_Int (U)); - end Get_Dynamic_SO_Entity; - - ----------------------- - -- Is_Dynamic_SO_Ref -- - ----------------------- - - function Is_Dynamic_SO_Ref (U : SO_Ref) return Boolean is - begin - return U < Uint_0; - end Is_Dynamic_SO_Ref; - - ---------------------- - -- Is_Static_SO_Ref -- - ---------------------- - - function Is_Static_SO_Ref (U : SO_Ref) return Boolean is - begin - return U >= Uint_0; - end Is_Static_SO_Ref; - --------- -- lgx -- --------- @@ -1224,14 +1158,6 @@ package body Repinfo is else Write_Val (Esiz, Paren => not List_Representation_Info_To_JSON); - -- If in front-end layout mode, then dynamic size is stored in - -- storage units, so renormalize for output. - - if not Back_End_Layout then - Write_Str (" * "); - Write_Int (SSU); - end if; - -- Add appropriate first bit offset if not List_Representation_Info_To_JSON then @@ -2397,11 +2323,7 @@ package body Repinfo is Write_Char ('('); end if; - if Back_End_Layout then - List_GCC_Expression (Val); - else - Write_Name_Decoded (Chars (Get_Dynamic_SO_Entity (Val))); - end if; + List_GCC_Expression (Val); if Paren then Write_Char (')'); diff --git a/gcc/ada/repinfo.ads b/gcc/ada/repinfo.ads index 6731dff..f730c53 100644 --- a/gcc/ada/repinfo.ads +++ b/gcc/ada/repinfo.ads @@ -45,28 +45,22 @@ package Repinfo is -- the corresponding entities as constant non-negative integers, -- and the Uint values are stored directly in these fields. - -- For composite types, there are three cases: + -- For composite types, there are two cases: -- 1. In some cases the front end knows the values statically, -- for example in the case where representation clauses or -- pragmas specify the values. - -- 2. If Frontend_Layout is False, then the backend is responsible - -- for layout of all types and objects not laid out by the - -- front end. This includes all dynamic values, and also - -- static values (e.g. record sizes) when not set by the - -- front end. - - -- 3. If Frontend_Layout is True, then the front end lays out - -- all data, according to target dependent size and alignment - -- information, creating dynamic inlinable functions where - -- needed in the case of sizes not known till runtime. + -- 2. Otherwise the backend is responsible for layout of all types and + -- objects not laid out by the front end. This includes all dynamic + -- values, and also static values (e.g. record sizes) when not set by + -- the front end. ----------------------------- -- Back Annotation by Gigi -- ----------------------------- - -- The following interface is used by gigi if Frontend_Layout is False + -- The following interface is used by gigi -- As part of the processing in gigi, the types are laid out and -- appropriate values computed for the sizes and component positions @@ -297,76 +291,6 @@ package Repinfo is function Create_Discrim_Ref (Discr : Entity_Id) return Node_Ref; -- Creates a reference to the discriminant whose entity is Discr - -------------------------------------------------------- - -- Front-End Interface for Dynamic Size/Offset Values -- - -------------------------------------------------------- - - -- If Frontend_Layout is True, then the front-end deals with all - -- dynamic size and offset fields. There are two cases: - - -- 1. The value can be computed at the time of type freezing, and - -- is stored in a run-time constant. In this case, the field - -- contains a reference to this entity. In the case of sizes - -- the value stored is the size in storage units, since dynamic - -- sizes are always a multiple of storage units. - - -- 2. The size/offset depends on the value of discriminants at - -- run-time. In this case, the front end builds a function to - -- compute the value. This function has a single parameter - -- which is the discriminated record object in question. Any - -- references to discriminant values are simply references to - -- the appropriate discriminant in this single argument, and - -- to compute the required size/offset value at run time, the - -- code generator simply constructs a call to the function - -- with the appropriate argument. The size/offset field in - -- this case contains a reference to the function entity. - -- Note that as for case 1, if such a function is used to - -- return a size, then the size in storage units is returned, - -- not the size in bits. - - -- The interface here allows these created entities to be referenced - -- using negative Unit values, so that they can be stored in the - -- appropriate size and offset fields in the tree. - - -- In the case of components, if the location of the component is static, - -- then all four fields (Component_Bit_Offset, Normalized_Position, Esize, - -- and Normalized_First_Bit) are set to appropriate values. In the case of - -- a non-static component location, Component_Bit_Offset is not used and - -- is left set to Unknown. Normalized_Position and Normalized_First_Bit - -- are set appropriately. - - subtype SO_Ref is Uint; - -- Type used to represent a Uint value that represents a static or - -- dynamic size/offset value (non-negative if static, negative if - -- the size value is dynamic). - - subtype Dynamic_SO_Ref is Uint; - -- Type used to represent a negative Uint value used to store - -- a dynamic size/offset value. - - function Is_Dynamic_SO_Ref (U : SO_Ref) return Boolean; - pragma Inline (Is_Dynamic_SO_Ref); - -- Given a SO_Ref (Uint) value, returns True iff the SO_Ref value - -- represents a dynamic Size/Offset value (i.e. it is negative). - - function Is_Static_SO_Ref (U : SO_Ref) return Boolean; - pragma Inline (Is_Static_SO_Ref); - -- Given a SO_Ref (Uint) value, returns True iff the SO_Ref value - -- represents a static Size/Offset value (i.e. it is non-negative). - - function Create_Dynamic_SO_Ref (E : Entity_Id) return Dynamic_SO_Ref; - -- Given the Entity_Id for a constant (case 1), the Node_Id for an - -- expression (case 2), or the Entity_Id for a function (case 3), - -- this function returns a (negative) Uint value that can be used - -- to retrieve the entity or expression for later use. - - function Get_Dynamic_SO_Entity (U : Dynamic_SO_Ref) return Entity_Id; - -- Retrieve the Node_Id or Entity_Id stored by a previous call to - -- Create_Dynamic_SO_Ref. The approach is that the front end makes - -- the necessary Create_Dynamic_SO_Ref calls to associate the node - -- and entity id values and the back end makes Get_Dynamic_SO_Ref - -- calls to retrieve them. - ------------------------------ -- External tools Interface -- ------------------------------ diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads index 665458f..a690bb4 100644 --- a/gcc/ada/rtsfind.ads +++ b/gcc/ada/rtsfind.ads @@ -239,8 +239,6 @@ package Rtsfind is System_Exp_Mod, System_Exp_Uns, System_Fat_Flt, - System_Fat_IEEE_Long_Float, - System_Fat_IEEE_Short_Float, System_Fat_LFlt, System_Fat_LLF, System_Fat_SFlt, @@ -434,13 +432,15 @@ package Rtsfind is System_Val_Fixed_32, System_Val_Fixed_64, System_Val_Fixed_128, + System_Val_Flt, System_Val_Int, + System_Val_LFlt, + System_Val_LLF, System_Val_LLI, System_Val_LLLI, System_Val_LLU, System_Val_LLLU, System_Val_Name, - System_Val_Real, System_Val_Uns, System_Val_WChar, System_Version_Control, @@ -925,18 +925,10 @@ package Rtsfind is RE_Attr_Float, -- System.Fat_Flt - RE_Attr_IEEE_Long, -- System.Fat_IEEE_Long_Float - RE_Fat_IEEE_Long, -- System.Fat_IEEE_Long_Float - - RE_Attr_IEEE_Short, -- System.Fat_IEEE_Short_Float - RE_Fat_IEEE_Short, -- System.Fat_IEEE_Short_Float - RE_Attr_Long_Float, -- System.Fat_LFlt RE_Attr_Long_Long_Float, -- System.Fat_LLF - RE_Attr_Short_Float, -- System.Fat_SFlt - RE_Attr_VAX_D_Float, -- System.Fat_VAX_D_Float RE_Fat_VAX_D, -- System.Fat_VAX_D_Float @@ -949,7 +941,6 @@ package Rtsfind is RE_Add_Offset_To_Address, -- System.Finalization_Masters RE_Attach, -- System.Finalization_Masters RE_Base_Pool, -- System.Finalization_Masters - RE_Detach, -- System.Finalization_Masters RE_Finalization_Master, -- System.Finalization_Masters RE_Finalization_Master_Ptr, -- System.Finalization_Masters RE_Set_Base_Pool, -- System.Finalization_Masters @@ -2045,8 +2036,14 @@ package Rtsfind is RE_Value_Fixed128, -- System_Val_Fixed_128 + RE_Value_Float, -- System_Val_Flt + RE_Value_Integer, -- System.Val_Int + RE_Value_Long_Float, -- System_Val_LFlt + + RE_Value_Long_Long_Float, -- System_Val_LLF + RE_Value_Long_Long_Integer, -- System.Val_LLI RE_Value_Long_Long_Long_Integer, -- System.Val_LLLI @@ -2055,8 +2052,6 @@ package Rtsfind is RE_Value_Long_Long_Long_Unsigned, -- System.Val_LLLU - RE_Value_Real, -- System.Val_Real - RE_Value_Unsigned, -- System.Val_Uns RE_Value_Wide_Character, -- System.Val_WChar @@ -2610,18 +2605,10 @@ package Rtsfind is RE_Attr_Float => System_Fat_Flt, - RE_Attr_IEEE_Long => System_Fat_IEEE_Long_Float, - RE_Fat_IEEE_Long => System_Fat_IEEE_Long_Float, - - RE_Attr_IEEE_Short => System_Fat_IEEE_Short_Float, - RE_Fat_IEEE_Short => System_Fat_IEEE_Short_Float, - RE_Attr_Long_Float => System_Fat_LFlt, RE_Attr_Long_Long_Float => System_Fat_LLF, - RE_Attr_Short_Float => System_Fat_SFlt, - RE_Attr_VAX_D_Float => System_Fat_VAX_D_Float, RE_Fat_VAX_D => System_Fat_VAX_D_Float, @@ -2634,7 +2621,6 @@ package Rtsfind is RE_Add_Offset_To_Address => System_Finalization_Masters, RE_Attach => System_Finalization_Masters, RE_Base_Pool => System_Finalization_Masters, - RE_Detach => System_Finalization_Masters, RE_Finalization_Master => System_Finalization_Masters, RE_Finalization_Master_Ptr => System_Finalization_Masters, RE_Set_Base_Pool => System_Finalization_Masters, @@ -3730,8 +3716,14 @@ package Rtsfind is RE_Value_Fixed128 => System_Val_Fixed_128, + RE_Value_Float => System_Val_Flt, + RE_Value_Integer => System_Val_Int, + RE_Value_Long_Float => System_Val_LFlt, + + RE_Value_Long_Long_Float => System_Val_LLF, + RE_Value_Long_Long_Integer => System_Val_LLI, RE_Value_Long_Long_Long_Integer => System_Val_LLLI, @@ -3740,8 +3732,6 @@ package Rtsfind is RE_Value_Long_Long_Long_Unsigned => System_Val_LLLU, - RE_Value_Real => System_Val_Real, - RE_Value_Unsigned => System_Val_Uns, RE_Value_Wide_Character => System_Val_WChar, diff --git a/gcc/ada/s-oscons-tmplt.c b/gcc/ada/s-oscons-tmplt.c index bce5437..582c35e 100644 --- a/gcc/ada/s-oscons-tmplt.c +++ b/gcc/ada/s-oscons-tmplt.c @@ -724,6 +724,41 @@ CNU(CRTSCTS, "Output hw flow control") #endif CNU(CREAD, "Read") +#ifndef ICANON +# define ICANON -1 +#endif +CNU(ICANON, "canonical mode") + +#ifndef CBAUD +# define CBAUD -1 +#endif +CNU(CBAUD, "baud speed mask") + +#ifndef ECHO +# define ECHO -1 +#endif +CNU(ECHO, "echo input characters") + +#ifndef ECHOE +# define ECHOE -1 +#endif +CNU(ECHOE, "erase preceding characters") + +#ifndef ECHOK +# define ECHOK -1 +#endif +CNU(ECHOK, "kill character, erases current line") + +#ifndef ECHOCTL +# define ECHOCTL -1 +#endif +CNU(ECHOCTL, "echo special characters") + +#ifndef ECHONL +# define ECHONL -1 +#endif +CNU(ECHONL, "force echo NL character") + #ifndef CS5 # define CS5 -1 #endif diff --git a/gcc/ada/sa_messages.ads b/gcc/ada/sa_messages.ads index 11da9fc..1f6fca8 100644 --- a/gcc/ada/sa_messages.ads +++ b/gcc/ada/sa_messages.ads @@ -94,7 +94,7 @@ package SA_Messages is -- type invariant checks (specific and class-wide), and checks for -- implementation-defined assertions such as Assert_And_Cut, Assume, -- Contract_Cases, Default_Initial_Condition, Initial_Condition, - -- Loop_Invariant, Loop_Variant, and Refined_Post. + -- Loop_Invariant, Loop_Variant, Refined_Post, and Subprogram_Variant. -- -- TBD: it might be nice to distinguish these different kinds of assertions -- as is done in SPARK's VC_Kind enumeration type, but any distinction diff --git a/gcc/ada/scng.adb b/gcc/ada/scng.adb index 0d5cff8..df6a689 100644 --- a/gcc/ada/scng.adb +++ b/gcc/ada/scng.adb @@ -25,6 +25,7 @@ with Atree; use Atree; with Csets; use Csets; +with Errout; use Errout; with Hostparm; use Hostparm; with Namet; use Namet; with Opt; use Opt; @@ -1299,19 +1300,15 @@ package body Scng is return; end if; - when '@' => - if Ada_Version < Ada_2020 then - Error_Msg ("target_name is an Ada 202x feature", Scan_Ptr); - Scan_Ptr := Scan_Ptr + 1; + -- AI12-0125-03 : @ is target_name - else - -- AI12-0125-03 : @ is target_name + when '@' => + Error_Msg_Ada_2020_Feature ("target name", Token_Ptr); - Accumulate_Checksum ('@'); - Scan_Ptr := Scan_Ptr + 1; - Token := Tok_At_Sign; - return; - end if; + Accumulate_Checksum ('@'); + Scan_Ptr := Scan_Ptr + 1; + Token := Tok_At_Sign; + return; -- Asterisk (can be multiplication operator or double asterisk which -- is the exponentiation compound delimiter). diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 3caa84f..b94f369 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -2949,7 +2949,7 @@ package body Sem_Aggr is while Present (Choice) loop Analyze_And_Resolve (Choice, Key_Type); if not Is_Static_Expression (Choice) then - Error_Msg_N ("Choice must be static", Choice); + Error_Msg_N ("choice must be static", Choice); end if; Next (Choice); @@ -2994,7 +2994,7 @@ package body Sem_Aggr is if Present (Component_Associations (N)) then if Present (Expressions (N)) then - Error_Msg_N ("Container aggregate cannot be " + Error_Msg_N ("container aggregate cannot be " & "both positional and named", N); return; end if; @@ -3035,10 +3035,7 @@ package body Sem_Aggr is Base : constant Node_Id := Expression (N); begin - if Ada_Version < Ada_2020 then - Error_Msg_N ("delta_aggregate is an Ada 202x feature", N); - Error_Msg_N ("\compile with -gnat2020", N); - end if; + Error_Msg_Ada_2020_Feature ("delta aggregate", Sloc (N)); if not Is_Composite_Type (Typ) then Error_Msg_N ("not a composite type", N); @@ -3075,7 +3072,7 @@ package body Sem_Aggr is while Present (Choice) loop if Nkind (Choice) = N_Others_Choice then Error_Msg_N - ("others not allowed in delta aggregate", Choice); + ("OTHERS not allowed in delta aggregate", Choice); elsif Nkind (Choice) = N_Subtype_Indication then Resolve_Discrete_Subtype_Indication @@ -3122,7 +3119,7 @@ package body Sem_Aggr is if Nkind (Choice) = N_Others_Choice then Error_Msg_N - ("others not allowed in delta aggregate", Choice); + ("OTHERS not allowed in delta aggregate", Choice); elsif Is_Entity_Name (Choice) and then Is_Type (Entity (Choice)) @@ -3848,10 +3845,7 @@ package body Sem_Aggr is -- by default, then set flag on the new association to indicate that -- the original association was for such a box-initialized component. - if Resolve_Record_Aggregate.Is_Box_Present - and then not Is_Box_Present - and then Is_Box_Init_By_Default -- ??? - then + if Is_Box_Init_By_Default then Set_Was_Default_Init_Box_Association (Last (Assoc_List)); end if; end Add_Association; @@ -5390,7 +5384,7 @@ package body Sem_Aggr is ("OTHERS must represent at least one component", Selectr); elsif Others_Box = 1 and then Warn_On_Redundant_Constructs then - Error_Msg_N ("others choice is redundant?", Box_Node); + Error_Msg_N ("OTHERS choice is redundant?", Box_Node); Error_Msg_N ("\previous choices cover all components?", Box_Node); end if; @@ -5557,7 +5551,7 @@ package body Sem_Aggr is -- because the association may be a null array range. Error_Msg_N - ("(Ada 2005) null not allowed in null-excluding component??", Expr); + ("(Ada 2005) NULL not allowed in null-excluding component??", Expr); Error_Msg_N ("\Constraint_Error will be raised at run time??", Expr); diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 504ca97..e4537e4 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -227,9 +227,11 @@ package body Sem_Attr is procedure Analyze_Attribute (N : Node_Id) is Loc : constant Source_Ptr := Sloc (N); Aname : constant Name_Id := Attribute_Name (N); - P : constant Node_Id := Prefix (N); Exprs : constant List_Id := Expressions (N); Attr_Id : constant Attribute_Id := Get_Attribute_Id (Aname); + P_Old : constant Node_Id := Prefix (N); + + P : Node_Id := P_Old; E1 : Node_Id; E2 : Node_Id; @@ -348,7 +350,7 @@ package body Sem_Attr is procedure Check_Floating_Point_Type_2; -- Verify that prefix of attribute N is a float type and that - -- two attribute expressions are present + -- two attribute expressions are present. procedure Check_Integer_Type; -- Verify that prefix of attribute N is an integer type @@ -782,6 +784,13 @@ package body Sem_Attr is Par : Node_Id; begin + -- If N does not come from source, the reference is assumed to be + -- valid. + + if not Comes_From_Source (N) then + return True; + end if; + Par := Parent (N); while Present (Par) and then @@ -1032,9 +1041,7 @@ package body Sem_Attr is -- expression comes from source, e.g. when a single component -- association in an aggregate has a box association. - elsif Ada_Version >= Ada_2005 - and then OK_Self_Reference - then + elsif Ada_Version >= Ada_2005 and then OK_Self_Reference then null; -- OK if reference to current instance of a protected object @@ -1656,7 +1663,7 @@ package body Sem_Attr is ---------------------- procedure Check_Array_Type is - D : Int; + D : Pos; -- Dimension number for array attributes begin @@ -1741,9 +1748,7 @@ package body Sem_Attr is ("expression for dimension must be static!", E1); Error_Attr; - elsif UI_To_Int (Expr_Value (E1)) > D - or else UI_To_Int (Expr_Value (E1)) < 1 - then + elsif Expr_Value (E1) > D or else Expr_Value (E1) < 1 then Error_Attr ("invalid dimension number for array type", E1); end if; end if; @@ -1833,7 +1838,7 @@ package body Sem_Attr is -- Case of an expression - Resolve (P); + Resolve (P_Old); if Is_Access_Type (P_Type) then @@ -1849,12 +1854,12 @@ package body Sem_Attr is Freeze_Before (N, Designated_Type (P_Type)); end if; - Rewrite (P, - Make_Explicit_Dereference (Sloc (P), - Prefix => Relocate_Node (P))); + Rewrite (P_Old, + Make_Explicit_Dereference (Sloc (P_Old), + Prefix => Relocate_Node (P_Old))); - Analyze_And_Resolve (P); - P_Type := Etype (P); + Analyze_And_Resolve (P_Old); + P_Type := Etype (P_Old); if P_Type = Any_Type then raise Bad_Attribute; @@ -3099,6 +3104,15 @@ package body Sem_Attr is end if; end if; + -- If the prefix was rewritten as a raise node, then rewrite N as a + -- raise node, to avoid creating inconsistent trees. We still need to + -- perform legality checks on the original tree. + + if Nkind (P) in N_Raise_xxx_Error then + Rewrite (N, Relocate_Node (P)); + P := Original_Node (P_Old); + end if; + -- Remaining processing depends on attribute case Attr_Id is @@ -3159,7 +3173,10 @@ package body Sem_Attr is -- Adjacent -- -------------- - when Attribute_Adjacent => + when Attribute_Adjacent + | Attribute_Copy_Sign + | Attribute_Remainder + => Check_Floating_Point_Type_2; Set_Etype (N, P_Base_Type); Resolve (E1, P_Base_Type); @@ -3281,7 +3298,7 @@ package body Sem_Attr is Check_E0; if not Is_Object_Reference (P) then - Error_Attr_P ("prefix for % attribute must be object"); + Error_Attr_P ("prefix of % attribute must be object"); -- What about the access object cases ??? @@ -3350,7 +3367,9 @@ package body Sem_Attr is -- Callable -- -------------- - when Attribute_Callable => + when Attribute_Callable + | Attribute_Terminated + => Check_E0; Set_Etype (N, Standard_Boolean); Check_Task_Prefix; @@ -3395,7 +3414,16 @@ package body Sem_Attr is -- Ceiling -- ------------- - when Attribute_Ceiling => + when Attribute_Ceiling + | Attribute_Floor + | Attribute_Fraction + | Attribute_Machine + | Attribute_Machine_Rounding + | Attribute_Model + | Attribute_Rounding + | Attribute_Truncation + | Attribute_Unbiased_Rounding + => Check_Floating_Point_Type_1; Set_Etype (N, P_Base_Type); Resolve (E1, P_Base_Type); @@ -3487,7 +3515,10 @@ package body Sem_Attr is -- Compose -- ------------- - when Attribute_Compose => + when Attribute_Compose + | Attribute_Leading_Part + | Attribute_Scaling + => Check_Floating_Point_Type_2; Set_Etype (N, P_Base_Type); Resolve (E1, P_Base_Type); @@ -3605,11 +3636,7 @@ package body Sem_Attr is -- Copy_Sign -- --------------- - when Attribute_Copy_Sign => - Check_Floating_Point_Type_2; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); - Resolve (E2, P_Base_Type); + -- Shares processing with Adjacent attribute ----------- -- Count -- @@ -3682,7 +3709,7 @@ package body Sem_Attr is null; else Error_Attr - ("Attribute % must apply to entry of current task", N); + ("attribute % must apply to entry of current task", N); end if; end if; @@ -3694,7 +3721,7 @@ package body Sem_Attr is | E_Entry_Family | E_Loop then - Error_Attr ("Attribute % cannot appear in inner unit", N); + Error_Attr ("attribute % cannot appear in inner unit", N); elsif Ekind (Scope (Ent)) = E_Protected_Type and then not Has_Completion (Scope (Ent)) @@ -3808,7 +3835,9 @@ package body Sem_Attr is -- Denorm -- ------------ - when Attribute_Denorm => + when Attribute_Denorm + | Attribute_Signed_Zeros + => Check_Floating_Point_Type_0; Set_Etype (N, Standard_Boolean); @@ -3891,7 +3920,14 @@ package body Sem_Attr is -- Emax -- ---------- - when Attribute_Emax => + when Attribute_Emax + | Attribute_Machine_Emax + | Attribute_Machine_Emin + | Attribute_Machine_Mantissa + | Attribute_Model_Emin + | Attribute_Model_Mantissa + | Attribute_Safe_Emax + => Check_Floating_Point_Type_0; Set_Etype (N, Universal_Integer); @@ -3982,7 +4018,12 @@ package body Sem_Attr is -- Epsilon -- ------------- - when Attribute_Epsilon => + when Attribute_Epsilon + | Attribute_Model_Epsilon + | Attribute_Model_Small + | Attribute_Safe_First + | Attribute_Safe_Last + => Check_Floating_Point_Type_0; Set_Etype (N, Universal_Real); @@ -4057,7 +4098,9 @@ package body Sem_Attr is -- First -- ----------- - when Attribute_First => + when Attribute_First + | Attribute_Last + => Check_Array_Or_Scalar_Type; Bad_Attribute_For_Predicate; @@ -4065,7 +4108,10 @@ package body Sem_Attr is -- First_Bit -- --------------- - when Attribute_First_Bit => + when Attribute_First_Bit + | Attribute_Last_Bit + | Attribute_Position + => Check_Component; Set_Etype (N, Universal_Integer); @@ -4073,7 +4119,9 @@ package body Sem_Attr is -- First_Valid -- ----------------- - when Attribute_First_Valid => + when Attribute_First_Valid + | Attribute_Last_Valid + => Check_First_Last_Valid; Set_Etype (N, P_Type); @@ -4082,8 +4130,8 @@ package body Sem_Attr is ----------------- when Attribute_Fixed_Value => - Check_E1; Check_Fixed_Point_Type; + Check_E1; Resolve (E1, Any_Integer); Set_Etype (N, P_Base_Type); @@ -4091,10 +4139,7 @@ package body Sem_Attr is -- Floor -- ----------- - when Attribute_Floor => - Check_Floating_Point_Type_1; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); + -- Shares processing with Ceiling attribute ---------- -- Fore -- @@ -4108,10 +4153,7 @@ package body Sem_Attr is -- Fraction -- -------------- - when Attribute_Fraction => - Check_Floating_Point_Type_1; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); + -- Shares processing with Ceiling attribute -------------- -- From_Any -- @@ -4283,7 +4325,11 @@ package body Sem_Attr is -- Large -- ----------- - when Attribute_Large => + when Attribute_Large + | Attribute_Small + | Attribute_Safe_Large + | Attribute_Safe_Small + => Check_E0; Check_Real_Type; Set_Etype (N, Universal_Real); @@ -4292,35 +4338,25 @@ package body Sem_Attr is -- Last -- ---------- - when Attribute_Last => - Check_Array_Or_Scalar_Type; - Bad_Attribute_For_Predicate; + -- Shares processing with First attribute -------------- -- Last_Bit -- -------------- - when Attribute_Last_Bit => - Check_Component; - Set_Etype (N, Universal_Integer); + -- Shares processing with First_Bit attribute ---------------- -- Last_Valid -- ---------------- - when Attribute_Last_Valid => - Check_First_Last_Valid; - Set_Etype (N, P_Type); + -- Shares processing with First_Valid attribute ------------------ -- Leading_Part -- ------------------ - when Attribute_Leading_Part => - Check_Floating_Point_Type_2; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); - Resolve (E2, Any_Integer); + -- Shares processing with Compose attribute ------------ -- Length -- @@ -4690,40 +4726,33 @@ package body Sem_Attr is -- Machine -- ------------- - when Attribute_Machine => - Check_Floating_Point_Type_1; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); + -- Shares processing with Ceiling attribute ------------------ -- Machine_Emax -- ------------------ - when Attribute_Machine_Emax => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Integer); + -- Shares processing with Emax attribute ------------------ -- Machine_Emin -- ------------------ - when Attribute_Machine_Emin => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Integer); + -- Shares processing with Emax attribute ---------------------- -- Machine_Mantissa -- ---------------------- - when Attribute_Machine_Mantissa => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Integer); + -- Shares processing with Emax attribute ----------------------- -- Machine_Overflows -- ----------------------- - when Attribute_Machine_Overflows => + when Attribute_Machine_Overflows + | Attribute_Machine_Rounds + => Check_Real_Type; Check_E0; Set_Etype (N, Standard_Boolean); @@ -4732,7 +4761,9 @@ package body Sem_Attr is -- Machine_Radix -- ------------------- - when Attribute_Machine_Radix => + when Attribute_Machine_Radix + | Attribute_Mantissa + => Check_Real_Type; Check_E0; Set_Etype (N, Universal_Integer); @@ -4741,25 +4772,22 @@ package body Sem_Attr is -- Machine_Rounding -- ---------------------- - when Attribute_Machine_Rounding => - Check_Floating_Point_Type_1; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); + -- Shares processing with Ceiling attribute -------------------- -- Machine_Rounds -- -------------------- - when Attribute_Machine_Rounds => - Check_Real_Type; - Check_E0; - Set_Etype (N, Standard_Boolean); + -- Shares processing with Machine_Overflows attribute ------------------ -- Machine_Size -- ------------------ - when Attribute_Machine_Size => + when Attribute_Machine_Size + | Attribute_Object_Size + | Attribute_Value_Size + => Check_E0; Check_Type; Check_Not_Incomplete_Type; @@ -4769,10 +4797,7 @@ package body Sem_Attr is -- Mantissa -- -------------- - when Attribute_Mantissa => - Check_E0; - Check_Real_Type; - Set_Etype (N, Universal_Integer); + -- Shares processing with Machine_Radix attribute --------- -- Max -- @@ -4832,7 +4857,7 @@ package body Sem_Attr is Error_Attr; elsif UI_To_Int (Intval (E1)) > Number_Formals (Entity (P)) - or else UI_To_Int (Intval (E1)) < 0 + or else Intval (E1) < 0 then Error_Attr ("invalid parameter number for % attribute", E1); end if; @@ -4866,42 +4891,31 @@ package body Sem_Attr is -- Model -- ----------- - when Attribute_Model => - Check_Floating_Point_Type_1; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); + -- Shares processing with Ceiling attribute ---------------- -- Model_Emin -- ---------------- - when Attribute_Model_Emin => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Integer); + -- Shares processing with Emax attribute ------------------- -- Model_Epsilon -- ------------------- - when Attribute_Model_Epsilon => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Real); + -- Shares processing with Epsilon attribute -------------------- -- Model_Mantissa -- -------------------- - when Attribute_Model_Mantissa => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Integer); + -- Shares processing with Emax attribute ----------------- -- Model_Small -- ----------------- - when Attribute_Model_Small => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Real); + -- Shares processing with Epsilon attribute ------------- -- Modulus -- @@ -5000,11 +5014,7 @@ package body Sem_Attr is -- Object_Size -- ----------------- - when Attribute_Object_Size => - Check_E0; - Check_Type; - Check_Not_Incomplete_Type; - Set_Etype (N, Universal_Integer); + -- Shares processing with Machine_Size attribute --------- -- Old -- @@ -5311,23 +5321,23 @@ package body Sem_Attr is -- Position -- -------------- - when Attribute_Position => - Check_Component; - Set_Etype (N, Universal_Integer); + -- Shares processing with First_Bit attribute ---------- -- Pred -- ---------- - when Attribute_Pred => + when Attribute_Pred + | Attribute_Succ + => Check_Scalar_Type; Check_E1; Resolve (E1, P_Base_Type); Set_Etype (N, P_Base_Type); - -- Since Pred works on the base type, we normally do no check for the - -- floating-point case, since the base type is unconstrained. But we - -- make an exception in Check_Float_Overflow mode. + -- Since Pred/Succ work on the base type, we normally do no check for + -- the floating-point case, since the base type is unconstrained. But + -- we make an exception in Check_Float_Overflow mode. if Is_Floating_Point_Type (P_Type) then if not Range_Checks_Suppressed (P_Base_Type) then @@ -5668,7 +5678,7 @@ package body Sem_Attr is null; else Error_Msg_NE - ("cannot apply reduce to object of type$", N, Typ); + ("cannot apply Reduce to object of type$", N, Typ); end if; elsif Present (Expressions (Stream)) @@ -5677,7 +5687,7 @@ package body Sem_Attr is N_Iterated_Component_Association then Error_Msg_N - ("Prefix of reduce must be an iterated component", N); + ("prefix of Reduce must be an iterated component", N); end if; Analyze (E1); @@ -5717,11 +5727,7 @@ package body Sem_Attr is -- Remainder -- --------------- - when Attribute_Remainder => - Check_Floating_Point_Type_2; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); - Resolve (E2, P_Base_Type); + -- Shares processing with Adjacent attribute --------------------- -- Restriction_Set -- @@ -5844,52 +5850,37 @@ package body Sem_Attr is -- Rounding -- -------------- - when Attribute_Rounding => - Check_Floating_Point_Type_1; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); + -- Shares processing with Ceiling attribute --------------- -- Safe_Emax -- --------------- - when Attribute_Safe_Emax => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Integer); + -- Shares processing with Emax attribute ---------------- -- Safe_First -- ---------------- - when Attribute_Safe_First => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Real); + -- Shares processing with Epsilon attribute ---------------- -- Safe_Large -- ---------------- - when Attribute_Safe_Large => - Check_E0; - Check_Real_Type; - Set_Etype (N, Universal_Real); + -- Shares processing with Large attribute --------------- -- Safe_Last -- --------------- - when Attribute_Safe_Last => - Check_Floating_Point_Type_0; - Set_Etype (N, Universal_Real); + -- Shares processing with Epsilon attribute ---------------- -- Safe_Small -- ---------------- - when Attribute_Safe_Small => - Check_E0; - Check_Real_Type; - Set_Etype (N, Universal_Real); + -- Shares processing with Large attribute -------------------------- -- Scalar_Storage_Order -- @@ -5958,18 +5949,13 @@ package body Sem_Attr is -- Scaling -- ------------- - when Attribute_Scaling => - Check_Floating_Point_Type_2; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); + -- Shares processing with Compose attribute ------------------ -- Signed_Zeros -- ------------------ - when Attribute_Signed_Zeros => - Check_Floating_Point_Type_0; - Set_Etype (N, Standard_Boolean); + -- Shares processing with Denorm attribute ---------- -- Size -- @@ -6059,10 +6045,7 @@ package body Sem_Attr is -- Small -- ----------- - when Attribute_Small => - Check_E0; - Check_Real_Type; - Set_Etype (N, Universal_Real); + -- Shares processing with Large attribute --------------------------------------- -- Small_Denominator/Small_Numerator -- @@ -6071,8 +6054,7 @@ package body Sem_Attr is when Attribute_Small_Denominator | Attribute_Small_Numerator => - Check_E0; - Check_Fixed_Point_Type; + Check_Fixed_Point_Type_0; Set_Etype (N, Universal_Integer); ------------------ @@ -6157,6 +6139,8 @@ package body Sem_Attr is Check_Restriction (No_Obsolescent_Features, P); elsif Is_Access_Type (P_Type) then + Set_Etype (N, Universal_Integer); + if Ekind (P_Type) = E_Access_Subprogram_Type then Error_Attr_P ("cannot use % attribute for access-to-subprogram type"); @@ -6166,7 +6150,6 @@ package body Sem_Attr is and then Is_Type (Entity (P)) then Check_Type; - Set_Etype (N, Universal_Integer); -- Validate_Remote_Access_To_Class_Wide_Type for attribute -- Storage_Size since this attribute is not defined for @@ -6179,7 +6162,6 @@ package body Sem_Attr is else Check_Task_Prefix; - Set_Etype (N, Universal_Integer); end if; else @@ -6249,30 +6231,7 @@ package body Sem_Attr is -- Succ -- ---------- - when Attribute_Succ => - Check_Scalar_Type; - Check_E1; - Resolve (E1, P_Base_Type); - Set_Etype (N, P_Base_Type); - - -- Since Pred works on the base type, we normally do no check for the - -- floating-point case, since the base type is unconstrained. But we - -- make an exception in Check_Float_Overflow mode. - - if Is_Floating_Point_Type (P_Type) then - if not Range_Checks_Suppressed (P_Base_Type) then - Set_Do_Range_Check (E1); - end if; - - -- If not modular type, test for overflow check required - - else - if not Is_Modular_Integer_Type (P_Type) - and then not Range_Checks_Suppressed (P_Base_Type) - then - Enable_Range_Check (E1); - end if; - end if; + -- Shares processing with Pred attribute -------------------------------- -- System_Allocator_Alignment -- @@ -6301,7 +6260,7 @@ package body Sem_Attr is then Error_Attr_P ("% attribute can only be applied to objects " & - "of class - wide type"); + "of class-wide type"); end if; -- The prefix cannot be an incomplete type. However, references to @@ -6353,10 +6312,7 @@ package body Sem_Attr is -- Terminated -- ---------------- - when Attribute_Terminated => - Check_E0; - Set_Etype (N, Standard_Boolean); - Check_Task_Prefix; + -- Shares processing with Callable attribute ---------------- -- To_Address -- @@ -6419,10 +6375,7 @@ package body Sem_Attr is -- Truncation -- ---------------- - when Attribute_Truncation => - Check_Floating_Point_Type_1; - Resolve (E1, P_Base_Type); - Set_Etype (N, P_Base_Type); + -- Shares processing with Ceiling attribute ---------------- -- Type_Class -- @@ -6611,10 +6564,7 @@ package body Sem_Attr is -- Unbiased_Rounding -- ----------------------- - when Attribute_Unbiased_Rounding => - Check_Floating_Point_Type_1; - Set_Etype (N, P_Base_Type); - Resolve (E1, P_Base_Type); + -- Shares processing with Ceiling attribute ---------------------- -- Unchecked_Access -- @@ -6795,7 +6745,7 @@ package body Sem_Attr is if Nkind (Expr) = N_Others_Choice then Error_Attr - ("others choice not allowed in attribute %", Expr); + ("OTHERS choice not allowed in attribute %", Expr); -- Otherwise analyze and resolve all indexes @@ -6842,7 +6792,7 @@ package body Sem_Attr is if Nkind (Index) = N_Others_Choice then Error_Attr - ("others choice not allowed in attribute %", Index); + ("OTHERS choice not allowed in attribute %", Index); -- The index denotes a range of elements @@ -7017,7 +6967,7 @@ package body Sem_Attr is elsif Nkind (Comp) = N_Others_Choice then Error_Attr - ("others choice not allowed in attribute %", Comp); + ("OTHERS choice not allowed in attribute %", Comp); -- The name of a record component cannot appear in any -- other form. @@ -7154,7 +7104,10 @@ package body Sem_Attr is -- Value -- ----------- - when Attribute_Value => + when Attribute_Value + | Attribute_Wide_Value + | Attribute_Wide_Wide_Value + => Check_E1; Check_Scalar_Type; @@ -7204,11 +7157,7 @@ package body Sem_Attr is -- Value_Size -- ---------------- - when Attribute_Value_Size => - Check_E0; - Check_Type; - Check_Not_Incomplete_Type; - Set_Etype (N, Universal_Integer); + -- Shares processing with Machine_Size attribute ------------- -- Version -- @@ -7244,51 +7193,22 @@ package body Sem_Attr is -- Wide_Value -- ---------------- - when Attribute_Wide_Value => - Check_E1; - Check_Scalar_Type; - - -- Set Etype before resolving expression because expansion - -- of expression may require enclosing type. - - 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; + -- Shares processing with Value attribute --------------------- -- Wide_Wide_Value -- --------------------- - when Attribute_Wide_Wide_Value => - Check_E1; - Check_Scalar_Type; - - -- Set Etype before resolving expression because expansion - -- of expression may require enclosing type. - - 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; + -- Shares processing with Value attribute --------------------- -- Wide_Wide_Width -- --------------------- - when Attribute_Wide_Wide_Width => + when Attribute_Wide_Wide_Width + | Attribute_Wide_Width + | Attribute_Width + => Check_E0; Check_Scalar_Type; Set_Etype (N, Universal_Integer); @@ -7297,19 +7217,13 @@ package body Sem_Attr is -- Wide_Width -- ---------------- - when Attribute_Wide_Width => - Check_E0; - Check_Scalar_Type; - Set_Etype (N, Universal_Integer); + -- Shares processing with Wide_Wide_Width attribute ----------- -- Width -- ----------- - when Attribute_Width => - Check_E0; - Check_Scalar_Type; - Set_Etype (N, Universal_Integer); + -- Shares processing with Wide_Wide_Width attribute --------------- -- Word_Size -- diff --git a/gcc/ada/sem_aux.adb b/gcc/ada/sem_aux.adb index 36fd6ad..4925ffd 100644 --- a/gcc/ada/sem_aux.adb +++ b/gcc/ada/sem_aux.adb @@ -26,6 +26,7 @@ with Atree; use Atree; with Einfo; use Einfo; with Nlists; use Nlists; +with Sinfo; use Sinfo; with Snames; use Snames; with Stand; use Stand; with Uintp; use Uintp; @@ -430,34 +431,6 @@ package body Sem_Aux is return Empty; end First_Tag_Component; - --------------------- - -- Get_Binary_Nkind -- - --------------------- - - function Get_Binary_Nkind (Op : Entity_Id) return Node_Kind is - begin - case Chars (Op) is - when Name_Op_Add => return N_Op_Add; - when Name_Op_Concat => return N_Op_Concat; - when Name_Op_Expon => return N_Op_Expon; - when Name_Op_Subtract => return N_Op_Subtract; - when Name_Op_Mod => return N_Op_Mod; - when Name_Op_Multiply => return N_Op_Multiply; - when Name_Op_Divide => return N_Op_Divide; - when Name_Op_Rem => return N_Op_Rem; - when Name_Op_And => return N_Op_And; - when Name_Op_Eq => return N_Op_Eq; - when Name_Op_Ge => return N_Op_Ge; - when Name_Op_Gt => return N_Op_Gt; - when Name_Op_Le => return N_Op_Le; - when Name_Op_Lt => return N_Op_Lt; - when Name_Op_Ne => return N_Op_Ne; - when Name_Op_Or => return N_Op_Or; - when Name_Op_Xor => return N_Op_Xor; - when others => raise Program_Error; - end case; - end Get_Binary_Nkind; - ----------------------- -- Get_Called_Entity -- ----------------------- @@ -656,21 +629,6 @@ package body Sem_Aux is return Empty; end Get_Rep_Pragma; - --------------------- - -- Get_Unary_Nkind -- - --------------------- - - function Get_Unary_Nkind (Op : Entity_Id) return Node_Kind is - begin - case Chars (Op) is - when Name_Op_Abs => return N_Op_Abs; - when Name_Op_Subtract => return N_Op_Minus; - when Name_Op_Not => return N_Op_Not; - when Name_Op_Add => return N_Op_Plus; - when others => raise Program_Error; - end case; - end Get_Unary_Nkind; - --------------------------------- -- Has_External_Tag_Rep_Clause -- --------------------------------- @@ -1288,19 +1246,6 @@ package body Sem_Aux is end if; end Is_Limited_View; - ---------------------------- - -- Is_Protected_Operation -- - ---------------------------- - - function Is_Protected_Operation (E : Entity_Id) return Boolean is - begin - return - Is_Entry (E) - or else (Is_Subprogram (E) - and then Nkind (Parent (Unit_Declaration_Node (E))) = - N_Protected_Definition); - end Is_Protected_Operation; - ------------------------------- -- Is_Record_Or_Limited_Type -- ------------------------------- @@ -1414,33 +1359,6 @@ package body Sem_Aux is return Empty; end Next_Tag_Component; - ----------------------- - -- Number_Components -- - ----------------------- - - function Number_Components (Typ : Entity_Id) return Nat is - N : Nat := 0; - Comp : Entity_Id; - - begin - -- We do not call Einfo.First_Component_Or_Discriminant, as this - -- function does not skip completely hidden discriminants, which we - -- want to skip here. - - if Has_Discriminants (Typ) then - Comp := First_Discriminant (Typ); - else - Comp := First_Component (Typ); - end if; - - while Present (Comp) loop - N := N + 1; - Next_Component_Or_Discriminant (Comp); - end loop; - - return N; - end Number_Components; - -------------------------- -- Number_Discriminants -- -------------------------- @@ -1479,38 +1397,6 @@ package body Sem_Aux is end Object_Type_Has_Constrained_Partial_View; ------------------ - -- Package_Body -- - ------------------ - - function Package_Body (E : Entity_Id) return Node_Id is - N : Node_Id; - - begin - if Ekind (E) = E_Package_Body then - N := Parent (E); - - if Nkind (N) = N_Defining_Program_Unit_Name then - N := Parent (N); - end if; - - else - N := Package_Spec (E); - - if Present (Corresponding_Body (N)) then - N := Parent (Corresponding_Body (N)); - - if Nkind (N) = N_Defining_Program_Unit_Name then - N := Parent (N); - end if; - else - N := Empty; - end if; - end if; - - return N; - end Package_Body; - - ------------------ -- Package_Spec -- ------------------ diff --git a/gcc/ada/sem_aux.ads b/gcc/ada/sem_aux.ads index 1d82045..237d5dc 100644 --- a/gcc/ada/sem_aux.ads +++ b/gcc/ada/sem_aux.ads @@ -34,7 +34,6 @@ with Alloc; with Namet; use Namet; with Table; with Types; use Types; -with Sinfo; use Sinfo; package Sem_Aux is @@ -148,22 +147,10 @@ package Sem_Aux is -- Typ must be a tagged record type. This function returns the Entity for -- the first _Tag field in the record type. - function Get_Binary_Nkind (Op : Entity_Id) return Node_Kind; - -- Op must be an entity with an Ekind of E_Operator. This function returns - -- the Nkind value that would be used to construct a binary operator node - -- referencing this entity. It is an error to call this function if Ekind - -- (Op) /= E_Operator. - function Get_Called_Entity (Call : Node_Id) return Entity_Id; -- Obtain the entity of the entry, operator, or subprogram being invoked -- by call Call. - function Get_Unary_Nkind (Op : Entity_Id) return Node_Kind; - -- Op must be an entity with an Ekind of E_Operator. This function returns - -- the Nkind value that would be used to construct a unary operator node - -- referencing this entity. It is an error to call this function if Ekind - -- (Op) /= E_Operator. - function Get_Rep_Item (E : Entity_Id; Nam : Name_Id; @@ -347,10 +334,6 @@ package Sem_Aux is -- these types). This older routine overlaps with the previous one, this -- should be cleaned up??? - function Is_Protected_Operation (E : Entity_Id) return Boolean; - -- Given a subprogram or entry, determines whether E is a protected entry - -- or subprogram. - function Is_Record_Or_Limited_Type (Typ : Entity_Id) return Boolean; -- Return True if Typ requires is a record or limited type. @@ -382,10 +365,6 @@ package Sem_Aux is -- The result returned is the next _Tag field in this record, or Empty -- if this is the last such field. - function Number_Components (Typ : Entity_Id) return Nat; - -- Typ is a record type, yields number of components (including - -- discriminants) in type. - function Number_Discriminants (Typ : Entity_Id) return Pos; -- Typ is a type with discriminants, yields number of discriminants in type @@ -398,10 +377,6 @@ package Sem_Aux is -- derived type, and the subtype is not an unconstrained array subtype -- (RM 3.3(23.10/3)). - function Package_Body (E : Entity_Id) return Node_Id; - -- Given an entity for a package (spec or body), return the corresponding - -- package body if any, or else Empty. - function Package_Spec (E : Entity_Id) return Node_Id; -- Given an entity for a package spec, return the corresponding package -- spec if any, or else Empty. diff --git a/gcc/ada/sem_cat.adb b/gcc/ada/sem_cat.adb index 7872c68..ee22113 100644 --- a/gcc/ada/sem_cat.adb +++ b/gcc/ada/sem_cat.adb @@ -1068,7 +1068,8 @@ package body Sem_Cat is and then not Private_Present (P) and then not Is_Remote_Call_Interface (E) then - Error_Msg_N ("public child of rci unit must also be rci unit", N); + Error_Msg_N + ("public child of 'R'C'I unit must also be 'R'C'I unit", N); end if; end if; end Validate_Categorization_Dependency; @@ -1580,21 +1581,21 @@ package body Sem_Cat is if Comes_From_Source (E) then if Is_Limited_Type (E) then Error_Msg_N - ("limited type not allowed in rci unit", Parent (E)); + ("limited type not allowed in 'R'C'I unit", Parent (E)); Explain_Limited_Type (E, Parent (E)); elsif Ekind (E) in E_Generic_Function | E_Generic_Package | E_Generic_Procedure then - Error_Msg_N ("generic declaration not allowed in rci unit", + Error_Msg_N ("generic declaration not allowed in 'R'C'I unit", Parent (E)); elsif (Ekind (E) = E_Function or else Ekind (E) = E_Procedure) and then Has_Pragma_Inline (E) then Error_Msg_N - ("inlined subprogram not allowed in rci unit", Parent (E)); + ("inlined subprogram not allowed in 'R'C'I unit", Parent (E)); -- Inner packages that are renamings need not be checked. Generic -- RCI packages are subject to the checks, but entities that come diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb index 2d1232e..e5519bf 100644 --- a/gcc/ada/sem_ch10.adb +++ b/gcc/ada/sem_ch10.adb @@ -6184,34 +6184,35 @@ package body Sem_Ch10 is null; when N_Subprogram_Declaration => - Error_Msg_N ("subprograms not allowed in limited with_clauses", N); + Error_Msg_N + ("subprogram not allowed in `LIMITED WITH` clause", N); return; when N_Generic_Package_Declaration | N_Generic_Subprogram_Declaration => - Error_Msg_N ("generics not allowed in limited with_clauses", N); + Error_Msg_N ("generic not allowed in `LIMITED WITH` clause", N); return; when N_Generic_Instantiation => Error_Msg_N - ("generic instantiations not allowed in limited with_clauses", + ("generic instantiation not allowed in `LIMITED WITH` clause", N); return; when N_Generic_Renaming_Declaration => Error_Msg_N - ("generic renamings not allowed in limited with_clauses", N); + ("generic renaming not allowed in `LIMITED WITH` clause", N); return; when N_Subprogram_Renaming_Declaration => Error_Msg_N - ("renamed subprograms not allowed in limited with_clauses", N); + ("renamed subprogram not allowed in `LIMITED WITH` clause", N); return; when N_Package_Renaming_Declaration => Error_Msg_N - ("renamed packages not allowed in limited with_clauses", N); + ("renamed package not allowed in `LIMITED WITH` clause", N); return; when others => diff --git a/gcc/ada/sem_ch11.adb b/gcc/ada/sem_ch11.adb index 940c93b..48c9855 100644 --- a/gcc/ada/sem_ch11.adb +++ b/gcc/ada/sem_ch11.adb @@ -127,7 +127,7 @@ package body Sem_Ch11 is and then Comes_From_Source (Id) then Error_Msg_N - ("(Ada 83): duplicate exception choice&", Id); + ("(Ada 83) duplicate exception choice&", Id); end if; end if; end if; diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 6a32bdc..7e6aa8f 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -1619,7 +1619,7 @@ package body Sem_Ch12 is Others_Choice := Actual; if Present (Next (Actual)) then - Error_Msg_N ("others must be last association", Actual); + Error_Msg_N ("OTHERS must be last association", Actual); end if; -- This subprogram is used both for formal packages and for @@ -1630,7 +1630,7 @@ package body Sem_Ch12 is and then Comes_From_Source (I_Node) then Error_Msg_N - ("others association not allowed in an instance", + ("OTHERS association not allowed in an instance", Actual); end if; @@ -12936,10 +12936,10 @@ package body Sem_Ch12 is elsif Ekind (A_Gen_T) = E_General_Access_Type and then Ekind (Base_Type (Act_T)) /= E_General_Access_Type then - Error_Msg_N -- CODEFIX + Error_Msg_N ("actual must be general access type!", Actual); Error_Msg_NE -- CODEFIX - ("add ALL to }!", Actual, Act_T); + ("\add ALL to }!", Actual, Act_T); Abandon_Instantiation (Actual); end if; end if; @@ -13230,7 +13230,7 @@ package body Sem_Ch12 is else Error_Msg_Name_1 := Chars (Act_T); Error_Msg_NE - ("Actual% must implement interface&", + ("actual% must implement interface&", Actual, Etype (Iface)); end if; diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index b48aeb4..4724e0e 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -64,6 +64,7 @@ with Sinfo; use Sinfo; with Sinput; use Sinput; with Snames; use Snames; with Stand; use Stand; +with Table; with Targparm; use Targparm; with Ttypes; use Ttypes; with Tbuild; use Tbuild; @@ -2012,9 +2013,9 @@ package body Sem_Ch13 is Error_Msg_N ("incompatible interfacing aspects given for &", E); Error_Msg_Sloc := Sloc (Expo); - Error_Msg_N ("\aspect `Export` #", E); + Error_Msg_N ("\aspect Export #", E); Error_Msg_Sloc := Sloc (Imp); - Error_Msg_N ("\aspect `Import` #", E); + Error_Msg_N ("\aspect Import #", E); end if; -- A variable is most likely modified from the outside. Take @@ -2096,8 +2097,8 @@ package body Sem_Ch13 is if A_Id = Aspect_External_Name then if No (Expo) and then No (Imp) then Error_Msg_N - ("aspect `External_Name` requires aspect `Import` or " - & "`Export`", Aspect); + ("aspect External_Name requires aspect Import or " + & "Export", Aspect); end if; -- Otherwise ensure that aspect Link_Name applies to aspect @@ -2107,8 +2108,8 @@ package body Sem_Ch13 is pragma Assert (A_Id = Aspect_Link_Name); if No (Expo) and then No (Imp) then Error_Msg_N - ("aspect `Link_Name` requires aspect `Import` or " - & "`Export`", Aspect); + ("aspect Link_Name requires aspect Import or Export", + Aspect); end if; end if; end Analyze_Aspect_External_Link_Name; @@ -2594,8 +2595,9 @@ package body Sem_Ch13 is for Asp in Pre_Post_Aspects loop if Has_Aspect (E, Asp) then Error_Msg_N - ("this aspect not allowed for static expression " - & "functions", Find_Aspect (E, Asp)); + ("this aspect is not allowed for a static " + & "expression function", + Find_Aspect (E, Asp)); return; end if; @@ -2659,7 +2661,7 @@ package body Sem_Ch13 is elsif Within_Protected_Type (E) then Error_Msg_N - ("aspect% not applicable to protected operations", Id); + ("aspect% not applicable to protected operation", Id); return; else @@ -3375,7 +3377,7 @@ package body Sem_Ch13 is else Error_Msg_N - ("main subprogram CPU is out of range", Expr); + ("main subprogram 'C'P'U is out of range", Expr); end if; -- For the Priority aspect @@ -3408,15 +3410,11 @@ package body Sem_Ch13 is -- System.Tasking, but this package does not trigger the -- required initialization of the run-time library. - declare - Discard : Entity_Id; - begin - if Restricted_Profile then - Discard := RTE (RE_Activate_Restricted_Tasks); - else - Discard := RTE (RE_Activate_Tasks); - end if; - end; + if Restricted_Profile then + Discard_Node (RTE (RE_Activate_Restricted_Tasks)); + else + Discard_Node (RTE (RE_Activate_Tasks)); + end if; -- Handling for these aspects in subprograms is complete @@ -4149,7 +4147,8 @@ package body Sem_Ch13 is -- Must not be parenthesized if Paren_Count (Expr) /= 0 then - Error_Msg_F ("extra parentheses ignored", Expr); + Error_Msg -- CODEFIX + ("redundant parentheses", First_Sloc (Expr)); end if; -- List of arguments is list of aggregate expressions @@ -4204,14 +4203,14 @@ package body Sem_Ch13 is elsif A_Id = Aspect_Default_Value and then not Is_Scalar_Type (E) then - Error_Msg_N ("aspect% can only be applied to scalar type", - Id); + Error_Msg_N + ("aspect% can only be applied to scalar type", Id); goto Continue; elsif A_Id = Aspect_Default_Component_Value then if not Is_Array_Type (E) then - Error_Msg_N ("aspect% can only be applied to array " & - "type", Id); + Error_Msg_N + ("aspect% can only be applied to array type", Id); goto Continue; elsif not Is_Scalar_Type (Component_Type (E)) then @@ -4426,14 +4425,25 @@ package body Sem_Ch13 is if Nkind (Parent (N)) = N_Compilation_Unit then Error_Msg_Name_1 := Nam; - Error_Msg_N ("incorrect placement of aspect `%`", E); + Error_Msg_N ("incorrect placement of aspect %", E); goto Continue; end if; - if Nkind (Expr) /= N_Aggregate then + if Nkind (Expr) /= N_Aggregate + or else Null_Record_Present (Expr) + then Error_Msg_Name_1 := Nam; Error_Msg_NE - ("wrong syntax for aspect `%` for &", Id, E); + ("wrong syntax for aspect % for &", Id, E); + goto Continue; + end if; + + -- Check that the expression is a proper aggregate (no + -- parentheses). + + if Paren_Count (Expr) /= 0 then + Error_Msg -- CODEFIX + ("redundant parentheses", First_Sloc (Expr)); goto Continue; end if; @@ -4456,7 +4466,7 @@ package body Sem_Ch13 is then Error_Msg_Name_1 := Nam; Error_Msg_NE - ("wrong syntax for aspect `%` for &", Id, E); + ("wrong syntax for aspect % for &", Id, E); goto Continue; end if; @@ -6619,7 +6629,7 @@ package body Sem_Ch13 is -- come from an aspect specification. if not Is_Task_Type (U_Ent) then - Error_Msg_N ("CPU can only be defined for task", Nam); + Error_Msg_N ("'C'P'U can only be defined for task", Nam); elsif Duplicate_Clause then null; @@ -6710,7 +6720,7 @@ package body Sem_Ch13 is else Error_Msg_NE - ("Default Iterator must be a primitive of&", Func, U_Ent); + ("Default_Iterator must be a primitive of&", Func, U_Ent); end if; end Default_Iterator; @@ -7764,7 +7774,7 @@ package body Sem_Ch13 is | N_Implicit_Label_Declaration then Error_Msg_N - ("this declaration not allowed in machine code subprogram", + ("this declaration is not allowed in machine code subprogram", DeclO); end if; @@ -7963,7 +7973,7 @@ package body Sem_Ch13 is end if; if Nkind (Choice) = N_Others_Choice then - Error_Msg_N ("others choice not allowed here", Choice); + Error_Msg_N ("OTHERS choice not allowed here", Choice); Err := True; elsif Nkind (Choice) = N_Range then @@ -9141,7 +9151,7 @@ package body Sem_Ch13 is or else Etype (Expression (Expr)) /= Typ then Error_Msg_N - ("expression must denaote subtype", Expression (Expr)); + ("expression must denote subtype", Expression (Expr)); return False_Range; end if; @@ -15086,27 +15096,39 @@ package body Sem_Ch13 is function Parse_Aspect_Stable_Properties (Aspect_Spec : Node_Id; Negated : out Boolean) return Subprogram_List is - L : List_Id; - Id : Node_Id; - function Extract_Entity (Expr : Node_Id) return Entity_Id; - -- Given an element of a Stable_Properties aspect spec, - -- return the associated entity. + -- Given an element of a Stable_Properties aspect spec, return the + -- associated entity. -- This function updates the Negated flag as a side-effect. + -------------------- + -- Extract_Entity -- + -------------------- + function Extract_Entity (Expr : Node_Id) return Entity_Id is - Name : Node_Id := Expr; + Name : Node_Id; begin if Nkind (Expr) = N_Op_Not then Negated := True; Name := Right_Opnd (Expr); + else + Name := Expr; end if; + if Nkind (Name) in N_Has_Entity then return Entity (Name); else return Empty; end if; end Extract_Entity; + + -- Local variables + + L : List_Id; + Id : Node_Id; + + -- Start of processing for Parse_Aspect_Stable_Properties + begin Negated := False; @@ -15120,7 +15142,7 @@ package body Sem_Ch13 is for I in Result'Range loop Result (I) := Extract_Entity (Id); - if not Present (Result (I)) then + if No (Result (I)) then pragma Assert (Serious_Errors_Detected > 0); goto Ignore_Aspect; end if; @@ -15145,14 +15167,13 @@ package body Sem_Ch13 is Assign_Indexed_Subp : Node_Id := Empty; begin - if Ada_Version < Ada_2020 then - Error_Msg_N ("Aspect Aggregate is an Ada_2020 feature", N); + Error_Msg_Ada_2020_Feature ("aspect Aggregate", Sloc (N)); - elsif Nkind (N) /= N_Aggregate + if Nkind (N) /= N_Aggregate or else Present (Expressions (N)) or else No (Component_Associations (N)) then - Error_Msg_N ("Aspect Aggregate requires an aggregate " + Error_Msg_N ("aspect Aggregate requires an aggregate " & "with component associations", N); return; end if; @@ -15224,13 +15245,14 @@ package body Sem_Ch13 is ("NOT modifier not allowed for Stable_Properties aspect" & " of a type", PF_Arg); else - Error_Msg_N ("Mixed use of NOT modifiers", PF_Arg); + Error_Msg_N ("mixed use of NOT modifiers", PF_Arg); end if; end Modifier_Error; PF_Name : Node_Id := PF_Arg; - -- Start of processing for Check_Property_Function_Arg + -- Start of processing for Check_Property_Function_Arg + begin if Nkind (PF_Arg) = N_Op_Not then PF_Name := Right_Opnd (PF_Arg); @@ -15257,14 +15279,14 @@ package body Sem_Ch13 is if Nkind (PF_Name) not in N_Identifier | N_Operator_Symbol | N_Selected_Component then - Error_Msg_N ("Bad property function name", PF_Name); + Error_Msg_N ("bad property function name", PF_Name); end if; end Check_Property_Function_Arg; + -- Start of processing for Validate_Aspect_Stable_Properties + begin - if Ada_Version < Ada_2020 then - Error_Msg_N ("Aspect Stable_Properties is an Ada_2020 feature", N); - end if; + Error_Msg_Ada_2020_Feature ("aspect Stable_Properties", Sloc (N)); if (not Is_Aspect_Of_Type) and then (not Is_Subprogram (E)) then Error_Msg_N ("Stable_Properties aspect can only be specified for " @@ -15273,13 +15295,13 @@ package body Sem_Ch13 is if Is_Aspect_Of_Type then if not Is_Tagged_Type (E) then Error_Msg_N - ("Stable_Properties'Class aspect cannot be specified for " + ("Stable_Properties''Class aspect cannot be specified for " & "an untagged type", N); end if; else if not Is_Dispatching_Operation (E) then Error_Msg_N - ("Stable_Properties'Class aspect cannot be specified for " + ("Stable_Properties''Class aspect cannot be specified for " & "a subprogram that is not a primitive subprogram " & "of a tagged type", N); end if; @@ -15291,7 +15313,7 @@ package body Sem_Ch13 is or else Null_Record_Present (N) or else not Present (Expressions (N)) then - Error_Msg_N ("Bad Stable_Properties aspect specification", N); + Error_Msg_N ("bad Stable_Properties aspect specification", N); return; end if; @@ -15300,7 +15322,7 @@ package body Sem_Ch13 is begin while Present (PF_Arg) loop Check_Property_Function_Arg (PF_Arg); - PF_Arg := Next (PF_Arg); + Next (PF_Arg); end loop; end; else @@ -15344,7 +15366,7 @@ package body Sem_Ch13 is -- First or Last (Container) => Cursor if Etype (Ent) /= Cursor then - Error_Msg_N ("primitive for First must yield a curosr", N); + Error_Msg_N ("primitive for First must yield a cursor", N); end if; elsif Nam = Name_Next then @@ -16203,303 +16225,6 @@ package body Sem_Ch13 is end loop; end Validate_Address_Clauses; - --------------------------- - -- Validate_Independence -- - --------------------------- - - procedure Validate_Independence is - SU : constant Uint := UI_From_Int (System_Storage_Unit); - N : Node_Id; - E : Entity_Id; - IC : Boolean; - Comp : Entity_Id; - Addr : Node_Id; - P : Node_Id; - - procedure Check_Array_Type (Atyp : Entity_Id); - -- Checks if the array type Atyp has independent components, and - -- if not, outputs an appropriate set of error messages. - - procedure No_Independence; - -- Output message that independence cannot be guaranteed - - function OK_Component (C : Entity_Id) return Boolean; - -- Checks one component to see if it is independently accessible, and - -- if so yields True, otherwise yields False if independent access - -- cannot be guaranteed. This is a conservative routine, it only - -- returns True if it knows for sure, it returns False if it knows - -- there is a problem, or it cannot be sure there is no problem. - - procedure Reason_Bad_Component (C : Entity_Id); - -- Outputs continuation message if a reason can be determined for - -- the component C being bad. - - ---------------------- - -- Check_Array_Type -- - ---------------------- - - procedure Check_Array_Type (Atyp : Entity_Id) is - Ctyp : constant Entity_Id := Component_Type (Atyp); - - begin - -- OK if no alignment clause, no pack, and no component size - - if not Has_Component_Size_Clause (Atyp) - and then not Has_Alignment_Clause (Atyp) - and then not Is_Packed (Atyp) - then - return; - end if; - - -- Case where component size is greater than or equal to the maximum - -- integer size and the alignment of the array is at least as large - -- as the alignment of the component. We are OK in this situation. - - if Known_Component_Size (Atyp) - and then Component_Size (Atyp) >= System_Max_Integer_Size - and then Known_Alignment (Atyp) - and then Known_Alignment (Ctyp) - and then Alignment (Atyp) >= Alignment (Ctyp) - then - return; - end if; - - -- Check actual component size - - if not Known_Component_Size (Atyp) - or else not Addressable (Component_Size (Atyp)) - or else Component_Size (Atyp) mod Esize (Ctyp) /= 0 - then - No_Independence; - - -- Bad component size, check reason - - if Has_Component_Size_Clause (Atyp) then - P := Get_Attribute_Definition_Clause - (Atyp, Attribute_Component_Size); - - if Present (P) then - Error_Msg_Sloc := Sloc (P); - Error_Msg_N ("\because of Component_Size clause#", N); - return; - end if; - end if; - - if Is_Packed (Atyp) then - P := Get_Rep_Pragma (Atyp, Name_Pack); - - if Present (P) then - Error_Msg_Sloc := Sloc (P); - Error_Msg_N ("\because of pragma Pack#", N); - return; - end if; - end if; - - -- No reason found, just return - - return; - end if; - - -- Array type is OK independence-wise - - return; - end Check_Array_Type; - - --------------------- - -- No_Independence -- - --------------------- - - procedure No_Independence is - begin - if Pragma_Name (N) = Name_Independent then - Error_Msg_NE ("independence cannot be guaranteed for&", N, E); - else - Error_Msg_NE - ("independent components cannot be guaranteed for&", N, E); - end if; - end No_Independence; - - ------------------ - -- OK_Component -- - ------------------ - - function OK_Component (C : Entity_Id) return Boolean is - Rec : constant Entity_Id := Scope (C); - Ctyp : constant Entity_Id := Etype (C); - - begin - -- OK if no component clause, no Pack, and no alignment clause - - if No (Component_Clause (C)) - and then not Is_Packed (Rec) - and then not Has_Alignment_Clause (Rec) - then - return True; - end if; - - -- Here we look at the actual component layout. A component is - -- addressable if its size is a multiple of the Esize of the - -- component type, and its starting position in the record has - -- appropriate alignment, and the record itself has appropriate - -- alignment to guarantee the component alignment. - - -- Make sure sizes are static, always assume the worst for any - -- cases where we cannot check static values. - - if not (Known_Static_Esize (C) - and then - Known_Static_Esize (Ctyp)) - then - return False; - end if; - - -- Size of component must be addressable or greater than the maximum - -- integer size and a multiple of bytes. - - if not Addressable (Esize (C)) - and then Esize (C) < System_Max_Integer_Size - then - return False; - end if; - - -- Check size is proper multiple - - if Esize (C) mod Esize (Ctyp) /= 0 then - return False; - end if; - - -- Check alignment of component is OK - - if not Known_Component_Bit_Offset (C) - or else Component_Bit_Offset (C) < Uint_0 - or else Component_Bit_Offset (C) mod Esize (Ctyp) /= 0 - then - return False; - end if; - - -- Check alignment of record type is OK - - if not Known_Alignment (Rec) - or else (Alignment (Rec) * SU) mod Esize (Ctyp) /= 0 - then - return False; - end if; - - -- All tests passed, component is addressable - - return True; - end OK_Component; - - -------------------------- - -- Reason_Bad_Component -- - -------------------------- - - procedure Reason_Bad_Component (C : Entity_Id) is - Rec : constant Entity_Id := Scope (C); - Ctyp : constant Entity_Id := Etype (C); - - begin - -- If component clause present assume that's the problem - - if Present (Component_Clause (C)) then - Error_Msg_Sloc := Sloc (Component_Clause (C)); - Error_Msg_N ("\because of Component_Clause#", N); - return; - end if; - - -- If pragma Pack clause present, assume that's the problem - - if Is_Packed (Rec) then - P := Get_Rep_Pragma (Rec, Name_Pack); - - if Present (P) then - Error_Msg_Sloc := Sloc (P); - Error_Msg_N ("\because of pragma Pack#", N); - return; - end if; - end if; - - -- See if record has bad alignment clause - - if Has_Alignment_Clause (Rec) - and then Known_Alignment (Rec) - and then (Alignment (Rec) * SU) mod Esize (Ctyp) /= 0 - then - P := Get_Attribute_Definition_Clause (Rec, Attribute_Alignment); - - if Present (P) then - Error_Msg_Sloc := Sloc (P); - Error_Msg_N ("\because of Alignment clause#", N); - end if; - end if; - - -- Couldn't find a reason, so return without a message - - return; - end Reason_Bad_Component; - - -- Start of processing for Validate_Independence - - begin - for J in Independence_Checks.First .. Independence_Checks.Last loop - N := Independence_Checks.Table (J).N; - E := Independence_Checks.Table (J).E; - IC := Pragma_Name (N) = Name_Independent_Components; - - -- Deal with component case - - if Ekind (E) in E_Component | E_Discriminant then - if not OK_Component (E) then - No_Independence; - Reason_Bad_Component (E); - goto Continue; - end if; - end if; - - -- Deal with record with Independent_Components - - if IC and then Is_Record_Type (E) then - Comp := First_Component_Or_Discriminant (E); - while Present (Comp) loop - if not OK_Component (Comp) then - No_Independence; - Reason_Bad_Component (Comp); - goto Continue; - end if; - - Next_Component_Or_Discriminant (Comp); - end loop; - end if; - - -- Deal with address clause case - - if Is_Object (E) then - Addr := Address_Clause (E); - - if Present (Addr) then - No_Independence; - Error_Msg_Sloc := Sloc (Addr); - Error_Msg_N ("\because of Address clause#", N); - goto Continue; - end if; - end if; - - -- Deal with independent components for array type - - if IC and then Is_Array_Type (E) then - Check_Array_Type (E); - end if; - - -- Deal with independent components for array object - - if IC and then Is_Object (E) and then Is_Array_Type (Etype (E)) then - Check_Array_Type (Etype (E)); - end if; - - <<Continue>> null; - end loop; - end Validate_Independence; - ------------------------------ -- Validate_Iterable_Aspect -- ------------------------------ diff --git a/gcc/ada/sem_ch13.ads b/gcc/ada/sem_ch13.ads index 389bb41..e2ea55a 100644 --- a/gcc/ada/sem_ch13.ads +++ b/gcc/ada/sem_ch13.ads @@ -23,7 +23,6 @@ -- -- ------------------------------------------------------------------------------ -with Table; with Types; use Types; with Sem_Disp; use Sem_Disp; with Uintp; use Uintp; @@ -238,36 +237,6 @@ package Sem_Ch13 is -- table of saved address clauses checking for suspicious alignments and -- if necessary issuing warnings. - procedure Validate_Independence; - -- This is called after the back end has been called (and thus after the - -- layout of components has been back annotated). It goes through the - -- table of saved pragma Independent[_Component] entries, checking that - -- independence can be achieved, and if necessary issuing error messages. - - ------------------------------------- - -- Table for Validate_Independence -- - ------------------------------------- - - -- If a legal pragma Independent or Independent_Components is given for - -- an entity, then an entry is made in this table, to be checked by a - -- call to Validate_Independence after back annotation of layout is done. - - type Independence_Check_Record is record - N : Node_Id; - -- The pragma Independent or Independent_Components - - E : Entity_Id; - -- The entity to which it applies - end record; - - package Independence_Checks is new Table.Table ( - Table_Component_Type => Independence_Check_Record, - Table_Index_Type => Int, - Table_Low_Bound => 1, - Table_Initial => 20, - Table_Increment => 200, - Table_Name => "Independence_Checks"); - ----------------------------------- -- Handling of Aspect Visibility -- ----------------------------------- diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 00834ce..c01bce1 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -833,7 +833,7 @@ package body Sem_Ch3 is if All_Present (N) and then Ada_Version >= Ada_2005 then - Error_Msg_N ("ALL is not permitted for anonymous access types", N); + Error_Msg_N ("ALL not permitted for anonymous access types", N); end if; -- Ada 2005 (AI-254): In case of anonymous access to subprograms call @@ -1026,7 +1026,8 @@ package body Sem_Ch3 is if Nkind (Def) in N_Has_Etype then if Etype (Def) = T_Name then Error_Msg_N - ("type& cannot be used before end of its declaration", Def); + ("type& cannot be used before the end of its declaration", + Def); end if; -- If this is not a subtype, then this is an access_definition @@ -12992,7 +12993,7 @@ package body Sem_Ch3 is then Error_Msg_N ("deferred constant must be declared in visible part", - Parent (Prev)); + Parent (Prev)); end if; if Is_Access_Type (T) @@ -14618,11 +14619,13 @@ package body Sem_Ch3 is Comp_List : constant Elist_Id := New_Elmt_List; Parent_Type : constant Entity_Id := Etype (Typ); Assoc_List : constant List_Id := New_List; - Discr_Val : Elmt_Id; - Errors : Boolean; - New_C : Entity_Id; - Old_C : Entity_Id; - Is_Static : Boolean := True; + + Discr_Val : Elmt_Id; + Errors : Boolean; + New_C : Entity_Id; + Old_C : Entity_Id; + Is_Static : Boolean := True; + Is_Compile_Time_Known : Boolean := True; procedure Collect_Fixed_Components (Typ : Entity_Id); -- Collect parent type components that do not appear in a variant part @@ -14772,7 +14775,11 @@ package body Sem_Ch3 is while Present (Discr_Val) loop if not Is_OK_Static_Expression (Node (Discr_Val)) then Is_Static := False; - exit; + + if not Compile_Time_Known_Value (Node (Discr_Val)) then + Is_Compile_Time_Known := False; + exit; + end if; end if; Next_Elmt (Discr_Val); @@ -14870,19 +14877,18 @@ package body Sem_Ch3 is end if; end Add_Discriminants; - if Is_Static + if Is_Compile_Time_Known and then Is_Variant_Record (Typ) then Collect_Fixed_Components (Typ); - - Gather_Components ( - Typ, - Component_List (Type_Definition (Parent (Typ))), - Governed_By => Assoc_List, - Into => Comp_List, - Report_Errors => Errors); - pragma Assert (not Errors - or else Serious_Errors_Detected > 0); + Gather_Components + (Typ, + Component_List (Type_Definition (Parent (Typ))), + Governed_By => Assoc_List, + Into => Comp_List, + Report_Errors => Errors, + Allow_Compile_Time => True); + pragma Assert (not Errors or else Serious_Errors_Detected > 0); Create_All_Components; @@ -14890,7 +14896,7 @@ package body Sem_Ch3 is -- with constraints, we retrieve the record definition of the parent -- type to select the components of the proper variant. - elsif Is_Static + elsif Is_Compile_Time_Known and then Is_Tagged_Type (Typ) and then Nkind (Parent (Typ)) = N_Full_Type_Declaration and then @@ -14898,13 +14904,13 @@ package body Sem_Ch3 is and then Is_Variant_Record (Parent_Type) then Collect_Fixed_Components (Typ); - Gather_Components (Typ, Component_List (Type_Definition (Parent (Parent_Type))), - Governed_By => Assoc_List, - Into => Comp_List, - Report_Errors => Errors); + Governed_By => Assoc_List, + Into => Comp_List, + Report_Errors => Errors, + Allow_Compile_Time => True); -- Note: previously there was a check at this point that no errors -- were detected. As a consequence of AI05-220 there may be an error @@ -14912,21 +14918,19 @@ package body Sem_Ch3 is -- static constraint. -- If the tagged derivation has a type extension, collect all the - -- new components therein. + -- new relevant components therein via Gather_Components. if Present (Record_Extension_Part (Type_Definition (Parent (Typ)))) then - Old_C := First_Component (Typ); - while Present (Old_C) loop - if Original_Record_Component (Old_C) = Old_C - and then Chars (Old_C) /= Name_uTag - and then Chars (Old_C) /= Name_uParent - then - Append_Elmt (Old_C, Comp_List); - end if; - - Next_Component (Old_C); - end loop; + Gather_Components + (Typ, + Component_List + (Record_Extension_Part (Type_Definition (Parent (Typ)))), + Governed_By => Assoc_List, + Into => Comp_List, + Report_Errors => Errors, + Allow_Compile_Time => True, + Include_Interface_Tag => True); end if; Create_All_Components; @@ -16943,7 +16947,7 @@ package body Sem_Ch3 is then if Ada_Version = Ada_83 and then Comes_From_Source (Indic) then Error_Msg_N - ("(Ada 83): premature use of type for derivation", Indic); + ("(Ada 83) premature use of type for derivation", Indic); end if; end if; diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 7b358d4..7a8c261 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -2297,7 +2297,7 @@ package body Sem_Ch4 is end if; if Aliased_Present (A) then - Error_Msg_N ("aliased not allowed in declare_expression", A); + Error_Msg_N ("ALIASED not allowed in declare_expression", A); end if; if Constant_Present (A) @@ -2449,7 +2449,7 @@ package body Sem_Ch4 is if Etype (N) = Any_Type then Error_Msg_N - ("type incompatible with that of `THEN` expression", + ("type incompatible with that of THEN expression", Else_Expr); return; end if; @@ -5455,7 +5455,7 @@ package body Sem_Ch4 is Apply_Compile_Time_Constraint_Error (N, "component not present in }??", CE_Discriminant_Check_Failed, - Ent => Prefix_Type, Rep => False); + Ent => Prefix_Type); Set_Raises_Constraint_Error (N); return; @@ -5700,7 +5700,7 @@ package body Sem_Ch4 is Error_Msg_N ("\use qualified expression instead", N); elsif Nkind (Expr) = N_Allocator then - Error_Msg_N ("argument of conversion cannot be an allocator", N); + Error_Msg_N ("argument of conversion cannot be allocator", N); Error_Msg_N ("\use qualified expression instead", N); elsif Nkind (Expr) = N_String_Literal then @@ -5711,8 +5711,8 @@ package body Sem_Ch4 is if Ada_Version = Ada_83 then Resolve (Expr, Typ); else - Error_Msg_N ("argument of conversion cannot be character literal", - N); + Error_Msg_N + ("argument of conversion cannot be character literal", N); Error_Msg_N ("\use qualified expression instead", N); end if; @@ -5721,7 +5721,8 @@ package body Sem_Ch4 is | Name_Unchecked_Access | Name_Unrestricted_Access then - Error_Msg_N ("argument of conversion cannot be access", N); + Error_Msg_N + ("argument of conversion cannot be access attribute", N); Error_Msg_N ("\use qualified expression instead", N); end if; @@ -8088,8 +8089,7 @@ package body Sem_Ch4 is -- resolution does not depend on the type of the parameter that -- includes the indexing operation. - elsif Nkind (Parent (Par)) in - N_Function_Call | N_Procedure_Call_Statement + elsif Nkind (Parent (Par)) in N_Subprogram_Call and then Is_Entity_Name (Name (Parent (Par))) then declare diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index b136356..04fc980 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -195,7 +195,8 @@ package body Sem_Ch5 is or else Is_Protected_Component (Ent) then Error_Msg_N - ("protected function cannot modify protected object", N); + ("protected function cannot modify its protected object", + N); return; end if; end; @@ -705,7 +706,8 @@ package body Sem_Ch5 is and then Convention (S) = Convention_Protected then Error_Msg_N - ("protected function cannot modify protected object", + ("protected function cannot modify its protected " & + "object", Lhs); end if; @@ -771,7 +773,7 @@ package body Sem_Ch5 is if Is_Protected_Part_Of_Constituent (Lhs) and then Within_Function then Error_Msg_N - ("protected function cannot modify protected object", Lhs); + ("protected function cannot modify its protected object", Lhs); end if; -- Resolution may have updated the subtype, in case the left-hand side @@ -954,7 +956,7 @@ package body Sem_Ch5 is Apply_Compile_Time_Constraint_Error (N => Rhs, Msg => - "(Ada 2005) null not allowed in null-excluding objects??", + "(Ada 2005) NULL not allowed in null-excluding objects??", Reason => CE_Null_Not_Allowed); -- We still mark this as a possible modification, that's necessary @@ -1387,16 +1389,7 @@ package body Sem_Ch5 is ---------------------------- procedure Analyze_Case_Statement (N : Node_Id) is - Exp : Node_Id; - Exp_Type : Entity_Id; - Exp_Btype : Entity_Id; - Last_Choice : Nat; - - Others_Present : Boolean; - -- Indicates if Others was present - - pragma Warnings (Off, Last_Choice); - -- Don't care about assigned value + Exp : constant Node_Id := Expression (N); Statements_Analyzed : Boolean := False; -- Set True if at least some statement sequences get analyzed. If False @@ -1404,9 +1397,6 @@ package body Sem_Ch5 is -- the case statement, and as a result it is not a good idea to output -- warning messages about unreachable code. - Save_Unblocked_Exit_Count : constant Nat := Unblocked_Exit_Count; - -- Recursively save value of this global, will be restored on exit - procedure Non_Static_Choice_Error (Choice : Node_Id); -- Error routine invoked by the generic instantiation below when the -- case statement has a non static choice. @@ -1490,11 +1480,20 @@ package body Sem_Ch5 is Analyze_Statements (Statements (Alternative)); end Process_Statements; + -- Local variables + + Exp_Type : Entity_Id; + Exp_Btype : Entity_Id; + + Others_Present : Boolean; + -- Indicates if Others was present + + Save_Unblocked_Exit_Count : constant Nat := Unblocked_Exit_Count; + -- Recursively save value of this global, will be restored on exit + -- Start of processing for Analyze_Case_Statement begin - Unblocked_Exit_Count := 0; - Exp := Expression (N); Analyze (Exp); -- The expression must be of any discrete type. In rare cases, the @@ -1558,7 +1557,9 @@ package body Sem_Ch5 is Exp_Type := Exp_Btype; end if; - -- Call instantiated procedures to analyzwe and check discrete choices + -- Call instantiated procedures to analyze and check discrete choices + + Unblocked_Exit_Count := 0; Analyze_Choices (Alternatives (N), Exp_Type); Check_Choices (N, Alternatives (N), Exp_Type, Others_Present); @@ -1773,8 +1774,6 @@ package body Sem_Ch5 is -- on which they depend will not be available at the freeze point. procedure Analyze_If_Statement (N : Node_Id) is - E : Node_Id; - Save_Unblocked_Exit_Count : constant Nat := Unblocked_Exit_Count; -- Recursively save value of this global, will be restored on exit @@ -1839,6 +1838,11 @@ package body Sem_Ch5 is end if; end Analyze_Cond_Then; + -- Local variables + + E : Node_Id; + -- For iterating over elsif parts + -- Start of processing for Analyze_If_Statement begin @@ -2620,7 +2624,10 @@ package body Sem_Ch5 is end if; if Present (Iterator_Filter (N)) then - Analyze_And_Resolve (Iterator_Filter (N), Standard_Boolean); + -- Preanalyze the filter. Expansion will take place when enclosing + -- loop is expanded. + + Preanalyze_And_Resolve (Iterator_Filter (N), Standard_Boolean); end if; end Analyze_Iterator_Specification; @@ -3017,6 +3024,9 @@ package body Sem_Ch5 is begin Set_Iterator_Specification (Scheme, I_Spec); Set_Loop_Parameter_Specification (Scheme, Empty); + Set_Iterator_Filter (I_Spec, + Relocate_Node (Iterator_Filter (N))); + Analyze_Iterator_Specification (I_Spec); -- In a generic context, analyze the original domain of @@ -3089,7 +3099,10 @@ package body Sem_Ch5 is Check_Predicate_Use (Entity (Subtype_Mark (DS))); end if; - Make_Index (DS, N); + if Nkind (DS) not in N_Raise_xxx_Error then + Make_Index (DS, N); + end if; + Set_Ekind (Id, E_Loop_Parameter); -- A quantified expression which appears in a pre- or post-condition may diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 35e13a5..7bab772 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -1537,12 +1537,12 @@ package body Sem_Ch6 is -- Can it really happen (extended return???) Error_Msg_N - ("aliased only allowed for limited return objects " + ("ALIASED only allowed for limited return objects " & "in Ada 2012??", N); elsif not Is_Limited_View (R_Type) then Error_Msg_N - ("aliased only allowed for limited return objects", N); + ("ALIASED only allowed for limited return objects", N); end if; end if; @@ -2490,13 +2490,11 @@ package body Sem_Ch6 is Result : Entity_Id := Empty; begin - -- Loop outward through the Scope_Stack, skipping blocks, loops, - -- and postconditions. + -- Loop outward through the Scope_Stack, skipping blocks, and loops for J in reverse 0 .. Scope_Stack.Last loop Result := Scope_Stack.Table (J).Entity; - exit when Ekind (Result) not in E_Block | E_Loop - and then Chars (Result) /= Name_uPostconditions; + exit when Ekind (Result) not in E_Block | E_Loop; end loop; pragma Assert (Present (Result)); @@ -4401,22 +4399,46 @@ package body Sem_Ch6 is if Expander_Active and then Transform_Function_Array - and then Present (Spec_Id) - and then Ekind (Spec_Id) = E_Function and then Nkind (N) /= N_Subprogram_Body_Stub - and then Rewritten_For_C (Spec_Id) then - Set_Has_Completion (Spec_Id); + declare + S : constant Entity_Id := + (if Present (Spec_Id) + then Spec_Id + else Defining_Unit_Name (Specification (N))); + Proc_Body : Node_Id; - Rewrite (N, Build_Procedure_Body_Form (Spec_Id, N)); - Analyze (N); + begin + if Ekind (S) = E_Function and then Rewritten_For_C (S) then + Set_Has_Completion (S); + Proc_Body := Build_Procedure_Body_Form (S, N); - -- The entity for the created procedure must remain invisible, so it - -- does not participate in resolution of subsequent references to the - -- function. + if Present (Spec_Id) then + Rewrite (N, Proc_Body); + Analyze (N); - Set_Is_Immediately_Visible (Corresponding_Spec (N), False); - goto Leave; + -- The entity for the created procedure must remain + -- invisible, so it does not participate in resolution of + -- subsequent references to the function. + + Set_Is_Immediately_Visible (Corresponding_Spec (N), False); + + -- If we do not have a separate spec for N, build one and + -- insert the new body right after. + + else + Rewrite (N, + Make_Subprogram_Declaration (Loc, + Specification => Relocate_Node (Specification (N)))); + Analyze (N); + Insert_After_And_Analyze (N, Proc_Body); + Set_Is_Immediately_Visible + (Corresponding_Spec (Proc_Body), False); + end if; + + goto Leave; + end if; + end; end if; -- If a separate spec is present, then deal with freezing issues @@ -9946,7 +9968,7 @@ package body Sem_Ch6 is Error_Msg_Sloc := Text_Ptr'Max (Sloc (Entity (E1)), Sloc (Entity (E2))); Error_Msg_NE - ("Meaning of& differs because of declaration#", E1, E2); + ("meaning of& differs because of declaration#", E1, E2); end if; return Result; diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index 07484d5..4689ae4 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -772,6 +772,31 @@ package body Sem_Ch8 is -- Obtain the name of the object from node Nod which is being renamed by -- the object renaming declaration N. + function Find_Raise_Node (N : Node_Id) return Traverse_Result; + -- Process one node in search for N_Raise_xxx_Error nodes. + -- Return Abandon if found, OK otherwise. + + --------------------- + -- Find_Raise_Node -- + --------------------- + + function Find_Raise_Node (N : Node_Id) return Traverse_Result is + begin + if Nkind (N) in N_Raise_xxx_Error then + return Abandon; + else + return OK; + end if; + end Find_Raise_Node; + + ------------------------ + -- No_Raise_xxx_Error -- + ------------------------ + + function No_Raise_xxx_Error is new Traverse_Func (Find_Raise_Node); + -- Traverse tree to look for a N_Raise_xxx_Error node and returns + -- Abandon if so and OK if none found. + ------------------------------ -- Check_Constrained_Object -- ------------------------------ @@ -1454,10 +1479,11 @@ package body Sem_Ch8 is then Error_Msg_N ("incompatible types in renaming", Nam); - -- AI12-0383: Names that denote values can be renamed + -- AI12-0383: Names that denote values can be renamed. + -- Ignore (accept) N_Raise_xxx_Error nodes in this context. - elsif Ada_Version < Ada_2020 then - Error_Msg_N ("value in renaming requires -gnat2020", Nam); + elsif No_Raise_xxx_Error (Nam) = OK then + Error_Msg_Ada_2020_Feature ("value in renaming", Sloc (Nam)); end if; Set_Etype (Id, T2); @@ -7867,7 +7893,7 @@ package body Sem_Ch8 is elsif Warn_On_Obsolescent_Feature and then False then Error_Msg_N - ("applying 'Class to an untagged incomplete type" + ("applying ''Class to an untagged incomplete type" & " is an obsolescent feature (RM J.11)?r?", N); end if; end if; diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb index a9d720b..b7b7d7d 100644 --- a/gcc/ada/sem_ch9.adb +++ b/gcc/ada/sem_ch9.adb @@ -790,13 +790,13 @@ package body Sem_Ch9 is if Kind /= E_Block and then Kind /= E_Loop and then not Is_Entry (Task_Nam) then - Error_Msg_N ("enclosing body of accept must be a task", N); + Error_Msg_N ("enclosing body of ACCEPT must be a task", N); return; end if; end loop; if Ekind (Etype (Task_Nam)) /= E_Task_Type then - Error_Msg_N ("invalid context for accept statement", N); + Error_Msg_N ("invalid context for ACCEPT statement", N); return; end if; @@ -844,7 +844,7 @@ package body Sem_Ch9 is end loop; if Entry_Nam = Any_Id then - Error_Msg_N ("no entry declaration matches accept statement", N); + Error_Msg_N ("no entry declaration matches ACCEPT statement", N); return; else Set_Entity (Nam, Entry_Nam); @@ -882,7 +882,7 @@ package body Sem_Ch9 is if Entry_Nam = Scope_Stack.Table (J).Entity then Error_Msg_N - ("duplicate accept statement for same entry (RM 9.5.2 (15))", N); + ("duplicate ACCEPT statement for same entry (RM 9.5.2 (15))", N); -- Do not continue analysis of accept statement, to prevent -- cascaded errors. @@ -904,8 +904,8 @@ package body Sem_Ch9 is when N_Asynchronous_Select => Error_Msg_N - ("accept statements are not allowed within an " - & "asynchronous select inner to the enclosing task body", + ("ACCEPT statement not allowed within an " + & "asynchronous SELECT inner to the enclosing task body", N); exit; @@ -2671,7 +2671,7 @@ package body Sem_Ch9 is if Entity (EDN1) = Ent then Error_Msg_Sloc := Sloc (Stm1); Error_Msg_N - ("accept duplicates one on line#??", Stm); + ("ACCEPT duplicates one on line#??", Stm); exit; end if; end if; @@ -2691,16 +2691,16 @@ package body Sem_Ch9 is Check_Potentially_Blocking_Operation (N); if Terminate_Present and Delay_Present then - Error_Msg_N ("at most one of terminate or delay alternative", N); + Error_Msg_N ("at most one of TERMINATE or DELAY alternative", N); elsif not Accept_Present then Error_Msg_N - ("select must contain at least one accept alternative", N); + ("SELECT must contain at least one ACCEPT alternative", N); end if; if Present (Else_Statements (N)) then if Terminate_Present or Delay_Present then - Error_Msg_N ("else part not allowed with other alternatives", N); + Error_Msg_N ("ELSE part not allowed with other alternatives", N); end if; Analyze_Statements (Else_Statements (N)); diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb index cf54337..36efa42 100644 --- a/gcc/ada/sem_disp.adb +++ b/gcc/ada/sem_disp.adb @@ -625,7 +625,7 @@ package body Sem_Disp is Par := Parent (Par); end if; - if Nkind (Par) in N_Function_Call | N_Procedure_Call_Statement + if Nkind (Par) in N_Subprogram_Call and then Is_Entity_Name (Name (Par)) then declare diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb index d7a8bb0..89b6e13 100644 --- a/gcc/ada/sem_elab.adb +++ b/gcc/ada/sem_elab.adb @@ -2414,10 +2414,16 @@ package body Sem_Elab is -- Default_Initial_Condition elsif Is_Default_Initial_Condition_Proc (Subp_Id) then - Output_Verification_Call - (Pred => "Default_Initial_Condition", - Id => First_Formal_Type (Subp_Id), - Id_Kind => "type"); + + -- Only do output for a normal DIC procedure, since partial DIC + -- procedures are subsidiary to those. + + if not Is_Partial_DIC_Procedure (Subp_Id) then + Output_Verification_Call + (Pred => "Default_Initial_Condition", + Id => First_Formal_Type (Subp_Id), + Id_Kind => "type"); + end if; -- Entries @@ -3738,7 +3744,7 @@ package body Sem_Elab is Set_Is_Dispatching_Call (Marker, - Nkind (N) in N_Function_Call | N_Procedure_Call_Statement + Nkind (N) in N_Subprogram_Call and then Present (Controlling_Argument (N))); Set_Is_Elaboration_Checks_OK_Node @@ -19362,7 +19368,7 @@ package body Sem_Elab is function Is_Call_Of_Generic_Formal (N : Node_Id) return Boolean is begin - return Nkind (N) in N_Function_Call | N_Procedure_Call_Statement + return Nkind (N) in N_Subprogram_Call -- Always return False if debug flag -gnatd.G is set diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb index 198f72f..8d47589 100644 --- a/gcc/ada/sem_eval.adb +++ b/gcc/ada/sem_eval.adb @@ -43,6 +43,7 @@ with Rtsfind; use Rtsfind; with Sem; use Sem; with Sem_Aux; use Sem_Aux; with Sem_Cat; use Sem_Cat; +with Sem_Ch3; use Sem_Ch3; with Sem_Ch6; use Sem_Ch6; with Sem_Ch8; use Sem_Ch8; with Sem_Elab; use Sem_Elab; @@ -124,7 +125,7 @@ package body Sem_Eval is type CV_Cache_Array is array (CV_Range) of CV_Entry; - CV_Cache : CV_Cache_Array := (others => (Node_High_Bound, Uint_0)); + CV_Cache : CV_Cache_Array; -- This is the actual cache, with entries consisting of node/value pairs, -- and the impossible value Node_High_Bound used for unset entries. @@ -1855,6 +1856,12 @@ package body Sem_Eval is N_Character_Literal | N_Real_Literal | N_String_Literal | N_Null then return True; + + -- Evaluate static discriminants, to eliminate dead paths and + -- redundant discriminant checks. + + elsif Is_Static_Discriminant_Component (Op) then + return True; end if; end if; @@ -3818,6 +3825,24 @@ package body Sem_Eval is Warn_On_Known_Condition (N); end Eval_Relational_Op; + ----------------------------- + -- Eval_Selected_Component -- + ----------------------------- + + procedure Eval_Selected_Component (N : Node_Id) is + begin + -- If an attribute reference or a LHS, nothing to do. + -- Also do not fold if N is an [in] out subprogram parameter. + -- Fold will perform the other relevant tests. + + if Nkind (Parent (N)) /= N_Attribute_Reference + and then Is_LHS (N) = No + and then not Is_Actual_Out_Or_In_Out_Parameter (N) + then + Fold (N); + end if; + end Eval_Selected_Component; + ---------------- -- Eval_Shift -- ---------------- @@ -4359,8 +4384,62 @@ package body Sem_Eval is -- processing is to check for a non-static context for the operand. procedure Eval_Unchecked_Conversion (N : Node_Id) is + Target_Type : constant Entity_Id := Etype (N); + Operand : constant Node_Id := Expression (N); + Operand_Type : constant Entity_Id := Etype (Operand); + begin - Check_Non_Static_Context (Expression (N)); + Check_Non_Static_Context (Operand); + + -- If we have a conversion of a compile time known value to a target + -- type and the value is in range of the target type, then we can simply + -- replace the construct by an integer literal of the correct type. We + -- only apply this to discrete types being converted. Possibly it may + -- apply in other cases, but it is too much trouble to worry about. + + -- Note that we do not do this transformation if the Kill_Range_Check + -- flag is set, since then the value may be outside the expected range. + -- This happens in the Normalize_Scalars case. + + -- We also skip this if either the target or operand type is biased + -- because in this case, the unchecked conversion is supposed to + -- preserve the bit pattern, not the integer value. + + if Is_Integer_Type (Target_Type) + and then not Has_Biased_Representation (Target_Type) + and then Is_Discrete_Type (Operand_Type) + and then not Has_Biased_Representation (Operand_Type) + and then Compile_Time_Known_Value (Operand) + and then not Kill_Range_Check (N) + then + declare + Val : constant Uint := Expr_Rep_Value (Operand); + + begin + if Compile_Time_Known_Value (Type_Low_Bound (Target_Type)) + and then + Compile_Time_Known_Value (Type_High_Bound (Target_Type)) + and then + Val >= Expr_Value (Type_Low_Bound (Target_Type)) + and then + Val <= Expr_Value (Type_High_Bound (Target_Type)) + then + Rewrite (N, Make_Integer_Literal (Sloc (N), Val)); + + -- If Address is the target type, just set the type to avoid a + -- spurious type error on the literal when Address is a visible + -- integer type. + + if Is_Descendant_Of_Address (Target_Type) then + Set_Etype (N, Target_Type); + else + Analyze_And_Resolve (N, Target_Type); + end if; + + return; + end if; + end; + end if; end Eval_Unchecked_Conversion; -------------------- @@ -4433,6 +4512,15 @@ package body Sem_Eval is elsif Kind = N_Unchecked_Type_Conversion then return Expr_Rep_Value (Expression (N)); + -- Static discriminant value + + elsif Is_Static_Discriminant_Component (N) then + return Expr_Rep_Value + (Get_Discriminant_Value + (Entity (Selector_Name (N)), + Etype (Prefix (N)), + Discriminant_Constraint (Etype (Prefix (N))))); + else raise Program_Error; end if; @@ -4520,6 +4608,15 @@ package body Sem_Eval is elsif Kind = N_Unchecked_Type_Conversion then Val := Expr_Value (Expression (N)); + -- Static discriminant value + + elsif Is_Static_Discriminant_Component (N) then + Val := Expr_Value + (Get_Discriminant_Value + (Entity (Selector_Name (N)), + Etype (Prefix (N)), + Discriminant_Constraint (Etype (Prefix (N))))); + else raise Program_Error; end if; @@ -4747,6 +4844,32 @@ package body Sem_Eval is end if; end Flag_Non_Static_Expr; + ---------- + -- Fold -- + ---------- + + procedure Fold (N : Node_Id) is + Typ : constant Entity_Id := Etype (N); + begin + -- If not known at compile time or if already a literal, nothing to do + + if Nkind (N) in N_Numeric_Or_String_Literal + or else not Compile_Time_Known_Value (N) + then + null; + + elsif Is_Discrete_Type (Typ) then + Fold_Uint (N, Expr_Value (N), Static => Is_Static_Expression (N)); + + elsif Is_Real_Type (Typ) then + Fold_Ureal (N, Expr_Value_R (N), Static => Is_Static_Expression (N)); + + elsif Is_String_Type (Typ) then + Fold_Str + (N, Strval (Expr_Value_S (N)), Static => Is_Static_Expression (N)); + end if; + end Fold; + ---------------- -- Fold_Dummy -- ---------------- @@ -4785,7 +4908,7 @@ package body Sem_Eval is Static : Boolean := False; Check_Elab : Boolean := False) is - Typ : constant Entity_Id := Etype (Left); + Typ : constant Entity_Id := Base_Type (Etype (Left)); procedure Check_Elab_Call; -- Add checks related to calls in elaboration code diff --git a/gcc/ada/sem_eval.ads b/gcc/ada/sem_eval.ads index 76e4bdf..972cee6 100644 --- a/gcc/ada/sem_eval.ads +++ b/gcc/ada/sem_eval.ads @@ -330,6 +330,7 @@ package Sem_Eval is procedure Eval_Op_Not (N : Node_Id); procedure Eval_Real_Literal (N : Node_Id); procedure Eval_Relational_Op (N : Node_Id); + procedure Eval_Selected_Component (N : Node_Id); procedure Eval_Shift (N : Node_Id); procedure Eval_Short_Circuit (N : Node_Id); procedure Eval_Slice (N : Node_Id); @@ -387,6 +388,10 @@ package Sem_Eval is -- The call has no effect if Raises_Constraint_Error (N) is True, since -- there is no point in folding if we have an error. + procedure Fold (N : Node_Id); + -- Rewrite N with the relevant value if Compile_Time_Known_Value (N) is + -- True, otherwise a no-op. + function Is_In_Range (N : Node_Id; Typ : Entity_Id; diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 1bcbb25..3ef5e82 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -466,7 +466,7 @@ package body Sem_Prag is if Nkind (Case_Guard) = N_Others_Choice then if Others_Seen then Error_Msg_N - ("only one others choice allowed in contract cases", + ("only one OTHERS choice allowed in contract cases", Case_Guard); else Others_Seen := True; @@ -474,7 +474,7 @@ package body Sem_Prag is elsif Others_Seen then Error_Msg_N - ("others must be the last choice in contract cases", N); + ("OTHERS must be the last choice in contract cases", N); end if; -- Preanalyze the case guard and consequence @@ -545,16 +545,31 @@ package body Sem_Prag is -- Single and multiple contract cases must appear in aggregate form. If -- this is not the case, then either the parser or the analysis of the - -- pragma failed to produce an aggregate. + -- pragma failed to produce an aggregate, e.g. when the contract is + -- "null" or a "(null record)". - pragma Assert (Nkind (CCases) = N_Aggregate); + pragma Assert + (if Nkind (CCases) = N_Aggregate + then Null_Record_Present (CCases) + xor (Present (Component_Associations (CCases)) + or + Present (Expressions (CCases))) + else Nkind (CCases) = N_Null); -- Only CASE_GUARD => CONSEQUENCE clauses are allowed - if Present (Component_Associations (CCases)) + if Nkind (CCases) = N_Aggregate + and then Present (Component_Associations (CCases)) and then No (Expressions (CCases)) then + -- Check that the expression is a proper aggregate (no parentheses) + + if Paren_Count (CCases) /= 0 then + Error_Msg -- CODEFIX + ("redundant parentheses", First_Sloc (CCases)); + end if; + -- Ensure that the formal parameters are visible when analyzing all -- clauses. This falls out of the general rule of aspects pertaining -- to subprogram declarations. @@ -1267,9 +1282,9 @@ package body Sem_Prag is (Item_Is_Input : out Boolean; Item_Is_Output : out Boolean) is - -- A constant or IN parameter of access type should be handled - -- like a variable, as the underlying memory pointed-to can be - -- modified. Use Adjusted_Kind to do this adjustment. + -- A constant or IN parameter of access-to-variable type should be + -- handled like a variable, as the underlying memory pointed-to + -- can be modified. Use Adjusted_Kind to do this adjustment. Adjusted_Kind : Entity_Kind := Ekind (Item_Id); @@ -1277,7 +1292,7 @@ package body Sem_Prag is if Ekind (Item_Id) in E_Constant | E_Generic_In_Parameter | E_In_Parameter - and then Is_Access_Type (Etype (Item_Id)) + and then Is_Access_Variable (Etype (Item_Id)) then Adjusted_Kind := E_Variable; end if; @@ -1975,7 +1990,7 @@ package body Sem_Prag is -- clause as this will lead to misleading errors. if Has_Extra_Parentheses (Deps) then - return; + goto Leave; end if; if Present (Component_Associations (Deps)) then @@ -2066,7 +2081,7 @@ package body Sem_Prag is else Error_Msg_N ("malformed dependency relation", Deps); - return; + goto Leave; end if; -- The top level dependency relation is malformed. This is a syntax @@ -8861,7 +8876,7 @@ package body Sem_Prag is Error_Pragma ("at least one parameter required for pragma%"); elsif Ekind (Formal) /= E_Out_Parameter then - Error_Pragma ("first parameter must have mode out for pragma%"); + Error_Pragma ("first parameter must have mode OUT for pragma%"); else Set_Is_Valued_Procedure (Ent); @@ -11747,7 +11762,7 @@ package body Sem_Prag is if Nkind (Prop) = N_Others_Choice then if Others_Seen then SPARK_Msg_N - ("only one others choice allowed in option External", + ("only one OTHERS choice allowed in option External", Prop); else Others_Seen := True; @@ -11755,7 +11770,7 @@ package body Sem_Prag is elsif Others_Seen then SPARK_Msg_N - ("others must be the last property in option External", + ("OTHERS must be the last property in option External", Prop); -- The only remaining legal options are the four predefined @@ -12903,30 +12918,31 @@ package body Sem_Prag is -- ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND - -- RM_ASSERTION_KIND ::= Assert | - -- Static_Predicate | - -- Dynamic_Predicate | - -- Pre | - -- Pre'Class | - -- Post | - -- Post'Class | - -- Type_Invariant | - -- Type_Invariant'Class - - -- ID_ASSERTION_KIND ::= Assert_And_Cut | - -- Assume | - -- Contract_Cases | - -- Debug | - -- Default_Initial_Condition | - -- Ghost | - -- Initial_Condition | - -- Loop_Invariant | - -- Loop_Variant | - -- Postcondition | - -- Precondition | - -- Predicate | - -- Refined_Post | - -- Statement_Assertions + -- RM_ASSERTION_KIND ::= Assert | + -- Static_Predicate | + -- Dynamic_Predicate | + -- Pre | + -- Pre'Class | + -- Post | + -- Post'Class | + -- Type_Invariant | + -- Type_Invariant'Class | + -- Default_Initial_Condition + + -- ID_ASSERTION_KIND ::= Assert_And_Cut | + -- Assume | + -- Contract_Cases | + -- Debug | + -- Ghost | + -- Initial_Condition | + -- Loop_Invariant | + -- Loop_Variant | + -- Postcondition | + -- Precondition | + -- Predicate | + -- Refined_Post | + -- Statement_Assertions | + -- Subprogram_Variant -- Note: The RM_ASSERTION_KIND list is language-defined, and the -- ID_ASSERTION_KIND list contains implementation-defined additions @@ -21363,16 +21379,11 @@ package body Sem_Prag is -- package does not trigger the required initialization of the -- run-time library. - declare - Discard : Entity_Id; - pragma Warnings (Off, Discard); - begin - if Restricted_Profile then - Discard := RTE (RE_Activate_Restricted_Tasks); - else - Discard := RTE (RE_Activate_Tasks); - end if; - end; + if Restricted_Profile then + Discard_Node (RTE (RE_Activate_Restricted_Tasks)); + else + Discard_Node (RTE (RE_Activate_Tasks)); + end if; -- Task or Protected, must be of type Integer @@ -28492,35 +28503,69 @@ package body Sem_Prag is Constit, Encapsulating_State (Constit_Id)); end if; - -- The only other source of legal constituents is the body - -- state space of the related package. - else - if Present (Body_States) then - State_Elmt := First_Elmt (Body_States); - while Present (State_Elmt) loop + declare + Pack_Id : Entity_Id; + Placement : State_Space_Kind; + begin + -- Find where the constituent lives with respect to the + -- state space. - -- Consume a valid constituent to signal that it has - -- been encountered. + Find_Placement_In_State_Space + (Item_Id => Constit_Id, + Placement => Placement, + Pack_Id => Pack_Id); - if Node (State_Elmt) = Constit_Id then - Remove_Elmt (Body_States, State_Elmt); - Collect_Constituent; - return; - end if; + -- The constituent is part of the visible state of a + -- private child package, but lacks a Part_Of indicator. - Next_Elmt (State_Elmt); - end loop; - end if; + if Placement = Visible_State_Space + and then Is_Child_Unit (Pack_Id) + and then not Is_Generic_Unit (Pack_Id) + and then Is_Private_Descendant (Pack_Id) + then + Error_Msg_Name_1 := Chars (State_Id); + SPARK_Msg_NE + ("& cannot act as constituent of state %", + Constit, Constit_Id); + Error_Msg_Sloc := + Sloc (Enclosing_Declaration (Constit_Id)); + SPARK_Msg_NE + ("\missing Part_Of indicator # should specify " + & "encapsulator &", + Constit, State_Id); - -- At this point it is known that the constituent is not - -- part of the package hidden state and cannot be used in - -- a refinement (SPARK RM 7.2.2(9)). + -- The only other source of legal constituents is the + -- body state space of the related package. - Error_Msg_Name_1 := Chars (Spec_Id); - SPARK_Msg_NE - ("cannot use & in refinement, constituent is not a hidden " - & "state of package %", Constit, Constit_Id); + else + if Present (Body_States) then + State_Elmt := First_Elmt (Body_States); + while Present (State_Elmt) loop + + -- Consume a valid constituent to signal that it + -- has been encountered. + + if Node (State_Elmt) = Constit_Id then + Remove_Elmt (Body_States, State_Elmt); + Collect_Constituent; + return; + end if; + + Next_Elmt (State_Elmt); + end loop; + end if; + + -- At this point it is known that the constituent is + -- not part of the package hidden state and cannot be + -- used in a refinement (SPARK RM 7.2.2(9)). + + Error_Msg_Name_1 := Chars (Spec_Id); + SPARK_Msg_NE + ("cannot use & in refinement, constituent is not a " + & "hidden state of package %", Constit, Constit_Id); + end if; + end; end if; end Match_Constituent; @@ -28942,6 +28987,20 @@ package body Sem_Prag is -- in the refinement clause. Report_Unused_Constituents (Part_Of_Constits); + + -- Avoid a cascading error reporting a missing refinement by adding a + -- dummy constituent. + + if No (Refinement_Constituents (State_Id)) then + Set_Refinement_Constituents (State_Id, New_Elmt_List (Any_Id)); + end if; + + -- At this point the refinement might be dummy, but must be + -- well-formed, to prevent cascaded errors. + + pragma Assert (Has_Null_Refinement (State_Id) + xor + Has_Non_Null_Refinement (State_Id)); end Analyze_Refinement_Clause; ----------------------------- @@ -29126,16 +29185,31 @@ package body Sem_Prag is -- Single and multiple contract cases must appear in aggregate form. If -- this is not the case, then either the parser of the analysis of the - -- pragma failed to produce an aggregate. + -- pragma failed to produce an aggregate, e.g. when the contract is + -- "null" or a "(null record)". - pragma Assert (Nkind (Variants) = N_Aggregate); + pragma Assert + (if Nkind (Variants) = N_Aggregate + then Null_Record_Present (Variants) + xor (Present (Component_Associations (Variants)) + or + Present (Expressions (Variants))) + else Nkind (Variants) = N_Null); -- Only "change_direction => discrete_expression" clauses are allowed - if Present (Component_Associations (Variants)) + if Nkind (Variants) = N_Aggregate + and then Present (Component_Associations (Variants)) and then No (Expressions (Variants)) then + -- Check that the expression is a proper aggregate (no parentheses) + + if Paren_Count (Variants) /= 0 then + Error_Msg -- CODEFIX + ("redundant parentheses", First_Sloc (Variants)); + end if; + -- Ensure that the formal parameters are visible when analyzing all -- clauses. This falls out of the general rule of aspects pertaining -- to subprogram declarations. @@ -30174,13 +30248,23 @@ package body Sem_Prag is Formal := First_Entity (Spec_Id); while Present (Formal) loop if Ekind (Formal) in E_In_Out_Parameter | E_In_Parameter then + + -- IN parameters can act as output when the related type is + -- access-to-variable. + + if Ekind (Formal) = E_In_Parameter + and then Is_Access_Variable (Etype (Formal)) + then + Append_New_Elmt (Formal, Subp_Outputs); + end if; + Append_New_Elmt (Formal, Subp_Inputs); end if; if Ekind (Formal) in E_In_Out_Parameter | E_Out_Parameter then Append_New_Elmt (Formal, Subp_Outputs); - -- Out parameters can act as inputs when the related type is + -- OUT parameters can act as inputs when the related type is -- tagged, unconstrained array, unconstrained record, or record -- with unconstrained components. @@ -30215,7 +30299,7 @@ package body Sem_Prag is Global := Get_Pragma (Subp_Id, Pragma_Refined_Global); -- Subprogram declaration or stand-alone body case, look for pragmas - -- Depends and Global + -- Depends and Global. else Depends := Get_Pragma (Spec_Id, Pragma_Depends); @@ -30459,11 +30543,11 @@ package body Sem_Prag is if From_Aspect_Specification (Prag) then Error_Msg_N - ("aspect % cannot apply to a stand alone expression function", + ("aspect % cannot apply to a standalone expression function", Prag); else Error_Msg_N - ("pragma % cannot apply to a stand alone expression function", + ("pragma % cannot apply to a standalone expression function", Prag); end if; end Expression_Function_Error; @@ -30597,8 +30681,10 @@ package body Sem_Prag is -- The pragma appears inside the statements of a subprogram body. This -- placement is the result of subprogram contract expansion. - elsif Nkind (Context) = N_Handled_Sequence_Of_Statements then - return Parent (Context); + elsif Is_Statement (Context) + and then Present (Enclosing_HSS (Context)) + then + return Parent (Enclosing_HSS (Context)); -- The pragma appears inside the declarative part of a package body diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index ed744ea..f6e0eab 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -2298,11 +2298,8 @@ package body Sem_Res is -- Declare_Expression and requires scope management. if Nkind (N) = N_Expression_With_Actions then - if Comes_From_Source (N) - and then N = Original_Node (N) - then + if Comes_From_Source (N) and then N = Original_Node (N) then Resolve_Declare_Expression (N, Typ); - else Resolve (Expression (N), Typ); end if; @@ -4683,7 +4680,7 @@ package body Sem_Res is elsif Ada_Version >= Ada_2005 then Apply_Compile_Time_Constraint_Error (N => A, - Msg => "(Ada 2005) null not allowed in " + Msg => "(Ada 2005) NULL not allowed in " & "null-excluding formal??", Reason => CE_Null_Not_Allowed); end if; @@ -5451,9 +5448,12 @@ package body Sem_Res is -- Do not apply Ada 2005 accessibility checks on a class-wide -- allocator if the type given in the allocator is a formal - -- type. A run-time check will be performed in the instance. + -- type or within a formal package. A run-time check will be + -- performed in the instance. - elsif not Is_Generic_Type (Exp_Typ) then + elsif not Is_Generic_Type (Exp_Typ) + and then not In_Generic_Formal_Package (Exp_Typ) + then Error_Msg_N ("type in allocator has deeper level than designated " & "class-wide type", E); @@ -7122,10 +7122,9 @@ package body Sem_Res is -- on expression functions. elsif In_Assertion_Expr /= 0 then - if Present (Body_Id) then - Cannot_Inline - ("cannot inline & (in assertion expression)?", N, Nam_UA); - end if; + Cannot_Inline + ("cannot inline & (in assertion expression)?", N, Nam_UA, + Suppress_Info => No (Body_Id)); -- Calls cannot be inlined inside default expressions @@ -7468,7 +7467,8 @@ package body Sem_Res is (N : Node_Id; Typ : Entity_Id) is - Decl : Node_Id; + Decl : Node_Id; + Need_Transient_Scope : Boolean := False; begin -- Install the scope created for local declarations, if -- any. The syntax allows a Declare_Expression with no @@ -7477,7 +7477,6 @@ package body Sem_Res is -- appears as the scope of all entities declared therein. Decl := First (Actions (N)); - while Present (Decl) loop exit when Nkind (Decl) in N_Object_Declaration | N_Object_Renaming_Declaration; @@ -7485,11 +7484,35 @@ package body Sem_Res is end loop; if Present (Decl) then - Push_Scope (Scope (Defining_Identifier (Decl))); + + -- Need to establish a transient scope in case Expression (N) + -- requires actions to be wrapped. declare - E : Entity_Id := First_Entity (Current_Scope); + Node : Node_Id; + begin + Node := First (Actions (N)); + while Present (Node) loop + if Nkind (Node) = N_Object_Declaration + and then Requires_Transient_Scope + (Etype (Defining_Identifier (Node))) + then + Need_Transient_Scope := True; + exit; + end if; + + Next (Node); + end loop; + end; + if Need_Transient_Scope then + Establish_Transient_Scope (Decl, True); + else + Push_Scope (Scope (Defining_Identifier (Decl))); + end if; + + declare + E : Entity_Id := First_Entity (Current_Scope); begin while Present (E) loop Set_Current_Entity (E); @@ -9822,13 +9845,13 @@ package body Sem_Res is if Nkind (Parent (N)) in N_Subprogram_Call then Error_Msg_N - ("null is not allowed as argument for an access parameter", N); + ("NULL is not allowed as argument for an access parameter", N); -- Standard message for all other cases (are there any?) else Error_Msg_N - ("null cannot be of an anonymous access type", N); + ("NULL cannot be of an anonymous access type", N); end if; end if; @@ -9875,7 +9898,7 @@ package body Sem_Res is else Insert_Action (Compile_Time_Constraint_Error (N, - "(Ada 2005) null not allowed in null-excluding objects??"), + "(Ada 2005) NULL not allowed in null-excluding objects??"), Make_Raise_Constraint_Error (Loc, Reason => CE_Access_Check_Failed)); end if; @@ -10276,7 +10299,7 @@ package body Sem_Res is elsif Typ = Universal_Integer or else Typ = Any_Modular then if Parent_Is_Boolean then Error_Msg_N - ("operand of not must be enclosed in parentheses", + ("operand of NOT must be enclosed in parentheses", Right_Opnd (N)); else Error_Msg_N @@ -10889,30 +10912,34 @@ package body Sem_Res is Set_Etype (N, Base_Type (Typ)); end if; - -- Note: No Eval processing is required, because the prefix is of a - -- record type, or protected type, and neither can possibly be static. + -- Eval_Selected_Component may e.g. fold statically known discriminants. - -- If the record type is atomic and the component is not, then this is - -- worth a warning before Ada 2020, since we have a situation where the - -- access to the component may cause extra read/writes of the atomic - -- object, or partial word accesses, both of which may be unexpected. + Eval_Selected_Component (N); - if Nkind (N) = N_Selected_Component - and then Is_Atomic_Ref_With_Address (N) - and then not Is_Atomic (Entity (S)) - and then not Is_Atomic (Etype (Entity (S))) - and then Ada_Version < Ada_2020 - then - Error_Msg_N - ("??access to non-atomic component of atomic record", - Prefix (N)); - Error_Msg_N - ("\??may cause unexpected accesses to atomic object", - Prefix (N)); - end if; + if Nkind (N) = N_Selected_Component then - Resolve_Implicit_Dereference (Prefix (N)); - Analyze_Dimension (N); + -- If the record type is atomic and the component is not, then this + -- is worth a warning before Ada 2020, since we have a situation + -- where the access to the component may cause extra read/writes of + -- the atomic object, or partial word accesses, both of which may be + -- unexpected. + + if Is_Atomic_Ref_With_Address (N) + and then not Is_Atomic (Entity (S)) + and then not Is_Atomic (Etype (Entity (S))) + and then Ada_Version < Ada_2020 + then + Error_Msg_N + ("??access to non-atomic component of atomic record", + Prefix (N)); + Error_Msg_N + ("\??may cause unexpected accesses to atomic object", + Prefix (N)); + end if; + + Resolve_Implicit_Dereference (Prefix (N)); + Analyze_Dimension (N); + end if; end Resolve_Selected_Component; ------------------- diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 72dbc68..1cf5c69 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -23,8 +23,6 @@ -- -- ------------------------------------------------------------------------------ -with Treepr; -- ???For debugging code below - with Casing; use Casing; with Checks; use Checks; with Debug; use Debug; @@ -170,24 +168,6 @@ package body Sem_Util is -- routine does not take simple flow diagnostics into account, it relies on -- static facts such as the presence of null exclusions. - function Old_Requires_Transient_Scope (Id : Entity_Id) return Boolean; - function New_Requires_Transient_Scope (Id : Entity_Id) return Boolean; - -- ???We retain the old and new algorithms for Requires_Transient_Scope for - -- the time being. New_Requires_Transient_Scope is used by default; the - -- debug switch -gnatdQ can be used to do Old_Requires_Transient_Scope - -- instead. The intent is to use this temporarily to measure before/after - -- efficiency. Note: when this temporary code is removed, the documentation - -- of dQ in debug.adb should be removed. - - procedure Results_Differ - (Id : Entity_Id; - Old_Val : Boolean; - New_Val : Boolean); - -- ???Debugging code. Called when the Old_Val and New_Val differ. This - -- routine will be removed eventially when New_Requires_Transient_Scope - -- becomes Requires_Transient_Scope and Old_Requires_Transient_Scope is - -- eliminated. - function Subprogram_Name (N : Node_Id) return String; -- Return the fully qualified name of the enclosing subprogram for the -- given node N, with file:line:col information appended, e.g. @@ -2492,7 +2472,7 @@ package body Sem_Util is function Build_Discriminal_Array_Constraint return List_Id; -- If one or more of the bounds of the component depends on - -- discriminants, build actual constraint using the discriminants + -- discriminants, build actual constraint using the discriminants -- of the prefix. function Build_Discriminal_Record_Constraint return List_Id; @@ -7931,6 +7911,34 @@ package body Sem_Util is return Empty; end Enclosing_Generic_Unit; + ------------------- + -- Enclosing_HSS -- + ------------------- + + function Enclosing_HSS (Stmt : Node_Id) return Node_Id is + Par : Node_Id; + begin + pragma Assert (Is_Statement (Stmt)); + + Par := Parent (Stmt); + while Present (Par) loop + + if Nkind (Par) = N_Handled_Sequence_Of_Statements then + return Par; + + -- Prevent the search from going too far + + elsif Is_Body_Or_Package_Declaration (Par) then + return Empty; + + end if; + + Par := Parent (Par); + end loop; + + return Par; + end Enclosing_HSS; + ------------------------------- -- Enclosing_Lib_Unit_Entity -- ------------------------------- @@ -9868,11 +9876,13 @@ package body Sem_Util is ----------------------- procedure Gather_Components - (Typ : Entity_Id; - Comp_List : Node_Id; - Governed_By : List_Id; - Into : Elist_Id; - Report_Errors : out Boolean) + (Typ : Entity_Id; + Comp_List : Node_Id; + Governed_By : List_Id; + Into : Elist_Id; + Report_Errors : out Boolean; + Allow_Compile_Time : Boolean := False; + Include_Interface_Tag : Boolean := False) is Assoc : Node_Id; Variant : Node_Id; @@ -9904,15 +9914,20 @@ package body Sem_Util is while Present (Comp_Item) loop - -- Skip the tag of a tagged record, the interface tags, as well - -- as all items that are not user components (anonymous types, - -- rep clauses, Parent field, controller field). + -- Skip the tag of a tagged record, as well as all items that are not + -- user components (anonymous types, rep clauses, Parent field, + -- controller field). if Nkind (Comp_Item) = N_Component_Declaration then declare Comp : constant Entity_Id := Defining_Identifier (Comp_Item); begin - if not Is_Tag (Comp) and then Chars (Comp) /= Name_uParent then + if not (Is_Tag (Comp) + and then not + (Include_Interface_Tag + and then Etype (Comp) = RTE (RE_Interface_Tag))) + and then Chars (Comp) /= Name_uParent + then Append_Elmt (Comp, Into); end if; end; @@ -10021,7 +10036,11 @@ package body Sem_Util is end loop Find_Constraint; Discrim_Value := Expression (Assoc); - if Is_OK_Static_Expression (Discrim_Value) then + + if Is_OK_Static_Expression (Discrim_Value) + or else (Allow_Compile_Time + and then Compile_Time_Known_Value (Discrim_Value)) + then Discrim_Value_Status := Static_Expr; else if Ada_Version >= Ada_2020 then @@ -10200,7 +10219,8 @@ package body Sem_Util is end if; Gather_Components - (Typ, Component_List (Variant), Governed_By, Into, Report_Errors); + (Typ, Component_List (Variant), Governed_By, Into, + Report_Errors, Allow_Compile_Time); end if; end Gather_Components; @@ -10435,7 +10455,7 @@ package body Sem_Util is then if Cursor /= Any_Type then Error_Msg_N - ("Operation First for iterable type must be unique", Aspect); + ("operation First for iterable type must be unique", Aspect); return Any_Type; else Cursor := Etype (Func); @@ -10553,7 +10573,7 @@ package body Sem_Util is -- Position in the enumeration type starts at 0 - if UI_To_Int (Pos) < 0 then + if Pos < 0 then raise Constraint_Error; end if; @@ -10589,6 +10609,12 @@ package body Sem_Util is function Get_Fullest_View (E : Entity_Id; Include_PAT : Boolean := True) return Entity_Id is begin + -- Prevent cascaded errors + + if No (E) then + return E; + end if; + -- Strictly speaking, the recursion below isn't necessary, but -- it's both simplest and safest. @@ -13827,6 +13853,52 @@ package body Sem_Util is and then Assertion_Expression_Pragma (Get_Pragma_Id (Prag)); end In_Assertion_Expression_Pragma; + ------------------- + -- In_Check_Node -- + ------------------- + + function In_Check_Node (N : Node_Id) return Boolean is + Par : Node_Id := Parent (N); + begin + while Present (Par) loop + if Nkind (Par) in N_Raise_xxx_Error then + return True; + + -- Prevent the search from going too far + + elsif Is_Body_Or_Package_Declaration (Par) then + return False; + + else + Par := Parent (Par); + end if; + end loop; + + return False; + end In_Check_Node; + + ------------------------------- + -- In_Generic_Formal_Package -- + ------------------------------- + + function In_Generic_Formal_Package (E : Entity_Id) return Boolean is + Par : Node_Id; + + begin + Par := Parent (E); + while Present (Par) loop + if Nkind (Par) = N_Formal_Package_Declaration + or else Nkind (Original_Node (Par)) = N_Formal_Package_Declaration + then + return True; + end if; + + Par := Parent (Par); + end loop; + + return False; + end In_Generic_Formal_Package; + ---------------------- -- In_Generic_Scope -- ---------------------- @@ -14569,7 +14641,9 @@ package body Sem_Util is procedure Inherit_Predicate_Flags (Subt, Par : Entity_Id) is begin - if Present (Predicate_Function (Subt)) then + if Ada_Version < Ada_2012 + or else Present (Predicate_Function (Subt)) + then return; end if; @@ -15152,6 +15226,19 @@ package body Sem_Util is return Present (Formal) and then Ekind (Formal) = E_In_Out_Parameter; end Is_Actual_In_Out_Parameter; + --------------------------------------- + -- Is_Actual_Out_Or_In_Out_Parameter -- + --------------------------------------- + + function Is_Actual_Out_Or_In_Out_Parameter (N : Node_Id) return Boolean is + Formal : Entity_Id; + Call : Node_Id; + begin + Find_Actual (N, Formal, Call); + return Present (Formal) + and then Ekind (Formal) in E_Out_Parameter | E_In_Out_Parameter; + end Is_Actual_Out_Or_In_Out_Parameter; + ------------------------- -- Is_Actual_Parameter -- ------------------------- @@ -16254,7 +16341,7 @@ package body Sem_Util is P_Aliased : Boolean := False; Comp : Entity_Id; - Deref : Node_Id := Object; + Deref : Node_Id := Original_Node (Object); -- Dereference node, in something like X.all.Y(2) -- Start of processing for Is_Dependent_Component_Of_Mutable_Object @@ -16265,11 +16352,9 @@ package body Sem_Util is while Nkind (Deref) in N_Indexed_Component | N_Selected_Component | N_Slice loop - Deref := Prefix (Deref); + Deref := Original_Node (Prefix (Deref)); end loop; - Deref := Original_Node (Deref); - -- If the prefix is a qualified expression of a variable, then function -- Is_Variable will return False for that because a qualified expression -- denotes a constant view, so we need to get the name being qualified @@ -16445,14 +16530,16 @@ package body Sem_Util is elsif Nkind (Object) = N_Indexed_Component or else Nkind (Object) = N_Slice then - return Is_Dependent_Component_Of_Mutable_Object (Prefix (Object)); + return Is_Dependent_Component_Of_Mutable_Object + (Original_Node (Prefix (Object))); -- A type conversion that Is_Variable is a view conversion: -- go back to the denoted object. elsif Nkind (Object) = N_Type_Conversion then return - Is_Dependent_Component_Of_Mutable_Object (Expression (Object)); + Is_Dependent_Component_Of_Mutable_Object + (Original_Node (Expression (Object))); end if; end if; @@ -18238,6 +18325,23 @@ package body Sem_Util is ------------------------- function Is_Object_Reference (N : Node_Id) return Boolean is + function Safe_Prefix (N : Node_Id) return Node_Id; + -- Return Prefix (N) unless it has been rewritten as an + -- N_Raise_xxx_Error node, in which case return its original node. + + ----------------- + -- Safe_Prefix -- + ----------------- + + function Safe_Prefix (N : Node_Id) return Node_Id is + begin + if Nkind (Prefix (N)) in N_Raise_xxx_Error then + return Original_Node (Prefix (N)); + else + return Prefix (N); + end if; + end Safe_Prefix; + begin -- AI12-0068: Note that a current instance reference in a type or -- subtype's aspect_specification is considered a value, not an object @@ -18253,8 +18357,8 @@ package body Sem_Util is | N_Slice => return - Is_Object_Reference (Prefix (N)) - or else Is_Access_Type (Etype (Prefix (N))); + Is_Object_Reference (Safe_Prefix (N)) + or else Is_Access_Type (Etype (Safe_Prefix (N))); -- In Ada 95, a function call is a constant object; a procedure -- call is not. @@ -18282,8 +18386,8 @@ package body Sem_Util is return Is_Object_Reference (Selector_Name (N)) and then - (Is_Object_Reference (Prefix (N)) - or else Is_Access_Type (Etype (Prefix (N)))); + (Is_Object_Reference (Safe_Prefix (N)) + or else Is_Access_Type (Etype (Safe_Prefix (N)))); -- An explicit dereference denotes an object, except that a -- conditional expression gets turned into an explicit dereference @@ -19896,6 +20000,22 @@ package body Sem_Util is or else Nkind (N) = N_Procedure_Call_Statement; end Is_Statement; + -------------------------------------- + -- Is_Static_Discriminant_Component -- + -------------------------------------- + + function Is_Static_Discriminant_Component (N : Node_Id) return Boolean is + begin + return Nkind (N) = N_Selected_Component + and then not Is_In_Discriminant_Check (N) + and then Present (Etype (Prefix (N))) + and then Ekind (Etype (Prefix (N))) = E_Record_Subtype + and then Has_Static_Discriminants (Etype (Prefix (N))) + and then Present (Entity (Selector_Name (N))) + and then Ekind (Entity (Selector_Name (N))) = E_Discriminant + and then not In_Check_Node (N); + end Is_Static_Discriminant_Component; + ------------------------ -- Is_Static_Function -- ------------------------ @@ -24280,228 +24400,6 @@ package body Sem_Util is Node := Next_Global (Node); end Next_Global; - ---------------------------------- - -- New_Requires_Transient_Scope -- - ---------------------------------- - - function New_Requires_Transient_Scope (Id : Entity_Id) return Boolean is - function Caller_Known_Size_Record (Typ : Entity_Id) return Boolean; - -- This is called for untagged records and protected types, with - -- nondefaulted discriminants. Returns True if the size of function - -- results is known at the call site, False otherwise. Returns False - -- if there is a variant part that depends on the discriminants of - -- this type, or if there is an array constrained by the discriminants - -- of this type. ???Currently, this is overly conservative (the array - -- could be nested inside some other record that is constrained by - -- nondiscriminants). That is, the recursive calls are too conservative. - - function Large_Max_Size_Mutable (Typ : Entity_Id) return Boolean; - -- Returns True if Typ is a nonlimited record with defaulted - -- discriminants whose max size makes it unsuitable for allocating on - -- the primary stack. - - ------------------------------ - -- Caller_Known_Size_Record -- - ------------------------------ - - function Caller_Known_Size_Record (Typ : Entity_Id) return Boolean is - pragma Assert (Typ = Underlying_Type (Typ)); - - begin - if Has_Variant_Part (Typ) and then not Is_Definite_Subtype (Typ) then - return False; - end if; - - declare - Comp : Entity_Id; - - begin - Comp := First_Component (Typ); - while Present (Comp) loop - - -- Only look at E_Component entities. No need to look at - -- E_Discriminant entities, and we must ignore internal - -- subtypes generated for constrained components. - - declare - Comp_Type : constant Entity_Id := - Underlying_Type (Etype (Comp)); - - begin - if Is_Record_Type (Comp_Type) - or else - Is_Protected_Type (Comp_Type) - then - if not Caller_Known_Size_Record (Comp_Type) then - return False; - end if; - - elsif Is_Array_Type (Comp_Type) then - if Size_Depends_On_Discriminant (Comp_Type) then - return False; - end if; - end if; - end; - - Next_Component (Comp); - end loop; - end; - - return True; - end Caller_Known_Size_Record; - - ------------------------------ - -- Large_Max_Size_Mutable -- - ------------------------------ - - function Large_Max_Size_Mutable (Typ : Entity_Id) return Boolean is - pragma Assert (Typ = Underlying_Type (Typ)); - - function Is_Large_Discrete_Type (T : Entity_Id) return Boolean; - -- Returns true if the discrete type T has a large range - - ---------------------------- - -- Is_Large_Discrete_Type -- - ---------------------------- - - function Is_Large_Discrete_Type (T : Entity_Id) return Boolean is - Threshold : constant Int := 16; - -- Arbitrary threshold above which we consider it "large". We want - -- a fairly large threshold, because these large types really - -- shouldn't have default discriminants in the first place, in - -- most cases. - - begin - return UI_To_Int (RM_Size (T)) > Threshold; - end Is_Large_Discrete_Type; - - -- Start of processing for Large_Max_Size_Mutable - - begin - if Is_Record_Type (Typ) - and then not Is_Limited_View (Typ) - and then Has_Defaulted_Discriminants (Typ) - then - -- Loop through the components, looking for an array whose upper - -- bound(s) depends on discriminants, where both the subtype of - -- the discriminant and the index subtype are too large. - - declare - Comp : Entity_Id; - - begin - Comp := First_Component (Typ); - while Present (Comp) loop - declare - Comp_Type : constant Entity_Id := - Underlying_Type (Etype (Comp)); - - Hi : Node_Id; - Indx : Node_Id; - Ityp : Entity_Id; - - begin - if Is_Array_Type (Comp_Type) then - Indx := First_Index (Comp_Type); - - while Present (Indx) loop - Ityp := Etype (Indx); - Hi := Type_High_Bound (Ityp); - - if Nkind (Hi) = N_Identifier - and then Ekind (Entity (Hi)) = E_Discriminant - and then Is_Large_Discrete_Type (Ityp) - and then Is_Large_Discrete_Type - (Etype (Entity (Hi))) - then - return True; - end if; - - Next_Index (Indx); - end loop; - end if; - end; - - Next_Component (Comp); - end loop; - end; - end if; - - return False; - end Large_Max_Size_Mutable; - - -- Local declarations - - Typ : constant Entity_Id := Underlying_Type (Id); - - -- Start of processing for New_Requires_Transient_Scope - - begin - -- This is a private type which is not completed yet. This can only - -- happen in a default expression (of a formal parameter or of a - -- record component). Do not expand transient scope in this case. - - if No (Typ) then - return False; - - -- Do not expand transient scope for non-existent procedure return or - -- string literal types. - - elsif Typ = Standard_Void_Type - or else Ekind (Typ) = E_String_Literal_Subtype - then - return False; - - -- If Typ is a generic formal incomplete type, then we want to look at - -- the actual type. - - elsif Ekind (Typ) = E_Record_Subtype - and then Present (Cloned_Subtype (Typ)) - then - return New_Requires_Transient_Scope (Cloned_Subtype (Typ)); - - -- Functions returning specific tagged types may dispatch on result, so - -- their returned value is allocated on the secondary stack, even in the - -- definite case. We must treat nondispatching functions the same way, - -- because access-to-function types can point at both, so the calling - -- conventions must be compatible. Is_Tagged_Type includes controlled - -- types and class-wide types. Controlled type temporaries need - -- finalization. - - -- ???It's not clear why we need to return noncontrolled types with - -- controlled components on the secondary stack. - - elsif Is_Tagged_Type (Typ) or else Has_Controlled_Component (Typ) then - return True; - - -- Untagged definite subtypes are known size. This includes all - -- elementary [sub]types. Tasks are known size even if they have - -- discriminants. So we return False here, with one exception: - -- For a type like: - -- type T (Last : Natural := 0) is - -- X : String (1 .. Last); - -- end record; - -- we return True. That's because for "P(F(...));", where F returns T, - -- we don't know the size of the result at the call site, so if we - -- allocated it on the primary stack, we would have to allocate the - -- maximum size, which is way too big. - - elsif Is_Definite_Subtype (Typ) or else Is_Task_Type (Typ) then - return Large_Max_Size_Mutable (Typ); - - -- Indefinite (discriminated) untagged record or protected type - - elsif Is_Record_Type (Typ) or else Is_Protected_Type (Typ) then - return not Caller_Known_Size_Record (Typ); - - -- Unconstrained array - - else - pragma Assert (Is_Array_Type (Typ) and not Is_Definite_Subtype (Typ)); - return True; - end if; - end New_Requires_Transient_Scope; - ------------------------ -- No_Caching_Enabled -- ------------------------ @@ -25376,105 +25274,6 @@ package body Sem_Util is return Num; end Number_Of_Elements_In_Array; - ---------------------------------- - -- Old_Requires_Transient_Scope -- - ---------------------------------- - - function Old_Requires_Transient_Scope (Id : Entity_Id) return Boolean is - Typ : constant Entity_Id := Underlying_Type (Id); - - begin - -- This is a private type which is not completed yet. This can only - -- happen in a default expression (of a formal parameter or of a - -- record component). Do not expand transient scope in this case. - - if No (Typ) then - return False; - - -- Do not expand transient scope for non-existent procedure return - - elsif Typ = Standard_Void_Type then - return False; - - -- Elementary types do not require a transient scope - - elsif Is_Elementary_Type (Typ) then - return False; - - -- Generally, indefinite subtypes require a transient scope, since the - -- back end cannot generate temporaries, since this is not a valid type - -- for declaring an object. It might be possible to relax this in the - -- future, e.g. by declaring the maximum possible space for the type. - - elsif not Is_Definite_Subtype (Typ) then - return True; - - -- Functions returning tagged types may dispatch on result so their - -- returned value is allocated on the secondary stack. Controlled - -- type temporaries need finalization. - - elsif Is_Tagged_Type (Typ) or else Has_Controlled_Component (Typ) then - return True; - - -- Record type - - elsif Is_Record_Type (Typ) then - declare - Comp : Entity_Id; - - begin - Comp := First_Entity (Typ); - while Present (Comp) loop - if Ekind (Comp) = E_Component then - - -- ???It's not clear we need a full recursive call to - -- Old_Requires_Transient_Scope here. Note that the - -- following can't happen. - - pragma Assert (Is_Definite_Subtype (Etype (Comp))); - pragma Assert (not Has_Controlled_Component (Etype (Comp))); - - if Old_Requires_Transient_Scope (Etype (Comp)) then - return True; - end if; - end if; - - Next_Entity (Comp); - end loop; - end; - - return False; - - -- String literal types never require transient scope - - elsif Ekind (Typ) = E_String_Literal_Subtype then - return False; - - -- Array type. Note that we already know that this is a constrained - -- array, since unconstrained arrays will fail the indefinite test. - - elsif Is_Array_Type (Typ) then - - -- If component type requires a transient scope, the array does too - - if Old_Requires_Transient_Scope (Component_Type (Typ)) then - return True; - - -- Otherwise, we only need a transient scope if the size depends on - -- the value of one or more discriminants. - - else - return Size_Depends_On_Discriminant (Typ); - end if; - - -- All other cases do not require a transient scope - - else - pragma Assert (Is_Concurrent_Type (Typ)); - return False; - end if; - end Old_Requires_Transient_Scope; - --------------------------------- -- Original_Aspect_Pragma_Name -- --------------------------------- @@ -26572,18 +26371,82 @@ package body Sem_Util is -- generated before the next instruction. function Requires_Transient_Scope (Id : Entity_Id) return Boolean is - Old_Result : constant Boolean := Old_Requires_Transient_Scope (Id); + function Caller_Known_Size_Record (Typ : Entity_Id) return Boolean; + -- This is called for untagged records and protected types, with + -- nondefaulted discriminants. Returns True if the size of function + -- results is known at the call site, False otherwise. Returns False + -- if there is a variant part that depends on the discriminants of + -- this type, or if there is an array constrained by the discriminants + -- of this type. ???Currently, this is overly conservative (the array + -- could be nested inside some other record that is constrained by + -- nondiscriminants). That is, the recursive calls are too conservative. procedure Ensure_Minimum_Decoration (Typ : Entity_Id); -- If Typ is not frozen then add to Typ the minimum decoration required -- by Requires_Transient_Scope to reliably provide its functionality; -- otherwise no action is performed. + function Large_Max_Size_Mutable (Typ : Entity_Id) return Boolean; + -- Returns True if Typ is a nonlimited record with defaulted + -- discriminants whose max size makes it unsuitable for allocating on + -- the primary stack. + + ------------------------------ + -- Caller_Known_Size_Record -- + ------------------------------ + + function Caller_Known_Size_Record (Typ : Entity_Id) return Boolean is + pragma Assert (Typ = Underlying_Type (Typ)); + + begin + if Has_Variant_Part (Typ) and then not Is_Definite_Subtype (Typ) then + return False; + end if; + + declare + Comp : Entity_Id; + + begin + Comp := First_Component (Typ); + while Present (Comp) loop + + -- Only look at E_Component entities. No need to look at + -- E_Discriminant entities, and we must ignore internal + -- subtypes generated for constrained components. + + declare + Comp_Type : constant Entity_Id := + Underlying_Type (Etype (Comp)); + + begin + if Is_Record_Type (Comp_Type) + or else + Is_Protected_Type (Comp_Type) + then + if not Caller_Known_Size_Record (Comp_Type) then + return False; + end if; + + elsif Is_Array_Type (Comp_Type) then + if Size_Depends_On_Discriminant (Comp_Type) then + return False; + end if; + end if; + end; + + Next_Component (Comp); + end loop; + end; + + return True; + end Caller_Known_Size_Record; + ------------------------------- -- Ensure_Minimum_Decoration -- ------------------------------- procedure Ensure_Minimum_Decoration (Typ : Entity_Id) is + Comp : Entity_Id; begin -- Do not set Has_Controlled_Component on a class-wide equivalent -- type. See Make_CW_Equivalent_Type. @@ -26595,82 +26458,182 @@ package body Sem_Util is or else Is_Incomplete_Or_Private_Type (Typ)) and then not Is_Class_Wide_Equivalent_Type (Typ) then + Comp := First_Component (Typ); + while Present (Comp) loop + if Has_Controlled_Component (Etype (Comp)) + or else + (Chars (Comp) /= Name_uParent + and then Is_Controlled (Etype (Comp))) + or else + (Is_Protected_Type (Etype (Comp)) + and then + Present (Corresponding_Record_Type (Etype (Comp))) + and then + Has_Controlled_Component + (Corresponding_Record_Type (Etype (Comp)))) + then + Set_Has_Controlled_Component (Typ); + exit; + end if; + + Next_Component (Comp); + end loop; + end if; + end Ensure_Minimum_Decoration; + + ------------------------------ + -- Large_Max_Size_Mutable -- + ------------------------------ + + function Large_Max_Size_Mutable (Typ : Entity_Id) return Boolean is + pragma Assert (Typ = Underlying_Type (Typ)); + + function Is_Large_Discrete_Type (T : Entity_Id) return Boolean; + -- Returns true if the discrete type T has a large range + + ---------------------------- + -- Is_Large_Discrete_Type -- + ---------------------------- + + function Is_Large_Discrete_Type (T : Entity_Id) return Boolean is + Threshold : constant Int := 16; + -- Arbitrary threshold above which we consider it "large". We want + -- a fairly large threshold, because these large types really + -- shouldn't have default discriminants in the first place, in + -- most cases. + + begin + return UI_To_Int (RM_Size (T)) > Threshold; + end Is_Large_Discrete_Type; + + -- Start of processing for Large_Max_Size_Mutable + + begin + if Is_Record_Type (Typ) + and then not Is_Limited_View (Typ) + and then Has_Defaulted_Discriminants (Typ) + then + -- Loop through the components, looking for an array whose upper + -- bound(s) depends on discriminants, where both the subtype of + -- the discriminant and the index subtype are too large. + declare Comp : Entity_Id; begin Comp := First_Component (Typ); while Present (Comp) loop - if Has_Controlled_Component (Etype (Comp)) - or else - (Chars (Comp) /= Name_uParent - and then Is_Controlled (Etype (Comp))) - or else - (Is_Protected_Type (Etype (Comp)) - and then - Present (Corresponding_Record_Type (Etype (Comp))) - and then - Has_Controlled_Component - (Corresponding_Record_Type (Etype (Comp)))) - then - Set_Has_Controlled_Component (Typ); - exit; - end if; + declare + Comp_Type : constant Entity_Id := + Underlying_Type (Etype (Comp)); + + Hi : Node_Id; + Indx : Node_Id; + Ityp : Entity_Id; + + begin + if Is_Array_Type (Comp_Type) then + Indx := First_Index (Comp_Type); + + while Present (Indx) loop + Ityp := Etype (Indx); + Hi := Type_High_Bound (Ityp); + + if Nkind (Hi) = N_Identifier + and then Ekind (Entity (Hi)) = E_Discriminant + and then Is_Large_Discrete_Type (Ityp) + and then Is_Large_Discrete_Type + (Etype (Entity (Hi))) + then + return True; + end if; + + Next_Index (Indx); + end loop; + end if; + end; Next_Component (Comp); end loop; end; end if; - end Ensure_Minimum_Decoration; + + return False; + end Large_Max_Size_Mutable; + + -- Local declarations + + Typ : constant Entity_Id := Underlying_Type (Id); -- Start of processing for Requires_Transient_Scope begin - if Debug_Flag_QQ then - return Old_Result; - end if; - Ensure_Minimum_Decoration (Id); - declare - New_Result : constant Boolean := New_Requires_Transient_Scope (Id); + -- This is a private type which is not completed yet. This can only + -- happen in a default expression (of a formal parameter or of a + -- record component). Do not expand transient scope in this case. - begin - -- Assert that we're not putting things on the secondary stack if we - -- didn't before; we are trying to AVOID secondary stack when - -- possible. + if No (Typ) then + return False; - if not Old_Result then - pragma Assert (not New_Result); - null; - end if; + -- Do not expand transient scope for non-existent procedure return or + -- string literal types. - if New_Result /= Old_Result then - Results_Differ (Id, Old_Result, New_Result); - end if; + elsif Typ = Standard_Void_Type + or else Ekind (Typ) = E_String_Literal_Subtype + then + return False; - return New_Result; - end; - end Requires_Transient_Scope; + -- If Typ is a generic formal incomplete type, then we want to look at + -- the actual type. - -------------------- - -- Results_Differ -- - -------------------- + elsif Ekind (Typ) = E_Record_Subtype + and then Present (Cloned_Subtype (Typ)) + then + return Requires_Transient_Scope (Cloned_Subtype (Typ)); - procedure Results_Differ - (Id : Entity_Id; - Old_Val : Boolean; - New_Val : Boolean) - is - begin - if False then -- False to disable; True for debugging - Treepr.Print_Tree_Node (Id); + -- Functions returning specific tagged types may dispatch on result, so + -- their returned value is allocated on the secondary stack, even in the + -- definite case. We must treat nondispatching functions the same way, + -- because access-to-function types can point at both, so the calling + -- conventions must be compatible. Is_Tagged_Type includes controlled + -- types and class-wide types. Controlled type temporaries need + -- finalization. - if Old_Val = New_Val then - raise Program_Error; - end if; + -- ???It's not clear why we need to return noncontrolled types with + -- controlled components on the secondary stack. + + elsif Is_Tagged_Type (Typ) or else Has_Controlled_Component (Typ) then + return True; + + -- Untagged definite subtypes are known size. This includes all + -- elementary [sub]types. Tasks are known size even if they have + -- discriminants. So we return False here, with one exception: + -- For a type like: + -- type T (Last : Natural := 0) is + -- X : String (1 .. Last); + -- end record; + -- we return True. That's because for "P(F(...));", where F returns T, + -- we don't know the size of the result at the call site, so if we + -- allocated it on the primary stack, we would have to allocate the + -- maximum size, which is way too big. + + elsif Is_Definite_Subtype (Typ) or else Is_Task_Type (Typ) then + return Large_Max_Size_Mutable (Typ); + + -- Indefinite (discriminated) untagged record or protected type + + elsif Is_Record_Type (Typ) or else Is_Protected_Type (Typ) then + return not Caller_Known_Size_Record (Typ); + + -- Unconstrained array + + else + pragma Assert (Is_Array_Type (Typ) and not Is_Definite_Subtype (Typ)); + return True; end if; - end Results_Differ; + end Requires_Transient_Scope; -------------------------- -- Reset_Analyzed_Flags -- @@ -29647,10 +29610,10 @@ package body Sem_Util is and then Covers (Designated_Type (Expec_Type), Designated_Type (Found_Type)) then - Error_Msg_N -- CODEFIX + Error_Msg_N ("result must be general access type!", Expr); Error_Msg_NE -- CODEFIX - ("add ALL to }!", Expr, Expec_Type); + ("\add ALL to }!", Expr, Expec_Type); -- Another special check, if the expected type is an integer type, -- but the expression is of type System.Address, and the parent is @@ -31098,7 +31061,7 @@ package body Sem_Util is -- -- See Large_Max_Size_Mutable function elsewhere in this -- file (currently declared inside of - -- New_Requires_Transient_Scope, so it would have to be + -- Requires_Transient_Scope, so it would have to be -- moved if we want it to be callable from here). end Indirect_Temp_Needed; @@ -31152,9 +31115,9 @@ package body Sem_Util is -- If the prefix is of an anonymous access type, then returns -- the designated type of that type. - ----------------------------- + ----------------------------- -- Designated_Subtype_Mark -- - ----------------------------- + ----------------------------- function Designated_Subtype_Mark return Node_Id is Typ : Entity_Id := Prefix_Type; @@ -31192,6 +31155,16 @@ package body Sem_Util is Append_Item (Temp_Decl, Is_Eval_Stmt => False); end if; + -- When a type associated with an indirect temporary gets + -- created for a 'Old attribute reference we need to mark + -- the type as such. This allows, for example, finalization + -- masters associated with them to be finalized in the correct + -- order after postcondition checks. + + if Attribute_Name (Parent (Attr_Prefix)) = Name_Old then + Set_Stores_Attribute_Old_Prefix (Access_Type_Id); + end if; + Analyze (Access_Type_Decl); Analyze (Temp_Decl); diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index b2af43a..6560180 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -765,6 +765,10 @@ package Sem_Util is -- Returns the Node_Id associated with the innermost enclosing generic -- unit, if any. If none, then returns Empty. + function Enclosing_HSS (Stmt : Node_Id) return Node_Id; + -- Returns the nearest handled sequence of statements that encloses a given + -- statement, or Empty. + function Enclosing_Lib_Unit_Entity (E : Entity_Id := Current_Scope) return Entity_Id; -- Returns the entity of enclosing library unit node which is the root of @@ -1045,11 +1049,13 @@ package Sem_Util is -- be installed on the scope stack to prevent spurious visibility errors. procedure Gather_Components - (Typ : Entity_Id; - Comp_List : Node_Id; - Governed_By : List_Id; - Into : Elist_Id; - Report_Errors : out Boolean); + (Typ : Entity_Id; + Comp_List : Node_Id; + Governed_By : List_Id; + Into : Elist_Id; + Report_Errors : out Boolean; + Allow_Compile_Time : Boolean := False; + Include_Interface_Tag : Boolean := False); -- The purpose of this procedure is to gather the valid components in a -- record type according to the values of its discriminants, in order to -- validate the components of a record aggregate. @@ -1072,6 +1078,12 @@ package Sem_Util is -- Report_Errors is set to True if the values of the discriminants are -- non-static. -- + -- Allow_Compile_Time if set to True, allows compile time known values in + -- Governed_By expressions in addition to static expressions. + -- + -- Include_Interface_Tag if set to True, gather any interface tag + -- component, otherwise exclude them. + -- -- This procedure is also used when building a record subtype. If the -- discriminant constraint of the subtype is static, the components of the -- subtype are only those of the variants selected by the values of the @@ -1538,6 +1550,12 @@ package Sem_Util is -- Returns True if node N appears within a pragma that acts as an assertion -- expression. See Sem_Prag for the list of qualifying pragmas. + function In_Check_Node (N : Node_Id) return Boolean; + -- Return True if N is part of a N_Raise_xxx_Error node + + function In_Generic_Formal_Package (E : Entity_Id) return Boolean; + -- Returns True if entity E is inside a generic formal package + function In_Generic_Scope (E : Entity_Id) return Boolean; -- Returns True if entity E is inside a generic scope @@ -1689,6 +1707,10 @@ package Sem_Util is function Is_Actual_Out_Parameter (N : Node_Id) return Boolean; -- Determines if N is an actual parameter of out mode in a subprogram call + function Is_Actual_Out_Or_In_Out_Parameter (N : Node_Id) return Boolean; + -- Determines if N is an actual parameter of out or in out mode in a + -- subprogram call. + function Is_Actual_Parameter (N : Node_Id) return Boolean; -- Determines if N is an actual parameter in a subprogram call @@ -2229,6 +2251,13 @@ package Sem_Util is -- the N_Statement_Other_Than_Procedure_Call subtype from Sinfo). -- Note that a label is *not* a statement, and will return False. + function Is_Static_Discriminant_Component (N : Node_Id) return Boolean; + -- Return True if N is guaranteed to a selected component containing a + -- statically known discriminant. + -- Note that this routine takes a conservative view and may return False + -- in some cases where N would match the criteria. In other words this + -- routine should be used to simplify or optimize the expanded code. + function Is_Static_Function (Subp : Entity_Id) return Boolean; -- Determine whether subprogram Subp denotes a static function, -- which is a function with the aspect Static with value True. @@ -2488,7 +2517,7 @@ package Sem_Util is -- entity E. If no such instance exits, return Empty. function Needs_Finalization (Typ : Entity_Id) return Boolean; - -- Determine whether type Typ is controlled and this requires finalization + -- Determine whether type Typ is controlled and thus requires finalization -- actions. function Needs_One_Actual (E : Entity_Id) return Boolean; diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb index 7289ea7..b5275a8 100644 --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -750,9 +750,7 @@ package body Sem_Warn is Fstm : constant Node_Id := Original_Node (First (Statements (Loop_Statement))); begin - if Nkind (Fstm) = N_Delay_Relative_Statement - or else Nkind (Fstm) = N_Delay_Until_Statement - then + if Nkind (Fstm) in N_Delay_Statement then return; end if; end; @@ -3077,14 +3075,14 @@ package body Sem_Warn is -- Here we generate the warning else - -- If -gnatwc is set then output message that we could be IN + -- If -gnatwk is set then output message that we could be IN if not Is_Trivial_Subprogram (Scope (E1)) then if Warn_On_Constant then Error_Msg_N - ("?u?formal parameter & is not modified!", E1); + ("?k?formal parameter & is not modified!", E1); Error_Msg_N - ("\?u?mode could be IN instead of `IN OUT`!", E1); + ("\?k?mode could be IN instead of `IN OUT`!", E1); -- We do not generate warnings for IN OUT parameters -- unless we have at least -gnatwu. This is deliberately diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index 647fb62..715a53a 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -168,6 +168,8 @@ package Snames is Name_uEntry_Bodies : constant Name_Id := N + $; Name_uExpunge : constant Name_Id := N + $; Name_uFinalizer : constant Name_Id := N + $; + Name_uFinalizer_Old : constant Name_Id := N + $; + Name_uFinalization_Controller : constant Name_Id := N + $; Name_uIdepth : constant Name_Id := N + $; Name_uInit : constant Name_Id := N + $; Name_uInit_Level : constant Name_Id := N + $; @@ -176,11 +178,14 @@ package Snames is Name_uObject : constant Name_Id := N + $; Name_uPost : constant Name_Id := N + $; Name_uPostconditions : constant Name_Id := N + $; + Name_uPostcond_Enabled : constant Name_Id := N + $; Name_uPre : constant Name_Id := N + $; Name_uPriority : constant Name_Id := N + $; Name_uProcess_ATSD : constant Name_Id := N + $; Name_uRelative_Deadline : constant Name_Id := N + $; Name_uResult : constant Name_Id := N + $; + Name_uResult_Object_For_Postcond : constant Name_Id := N + $; + Name_uReturn_Success_For_Postcond : constant Name_Id := N + $; Name_uSecondary_Stack : constant Name_Id := N + $; Name_uSecondary_Stack_Size : constant Name_Id := N + $; Name_uService : constant Name_Id := N + $; diff --git a/gcc/ada/symbols.adb b/gcc/ada/symbols.adb deleted file mode 100644 index d8d4992..0000000 --- a/gcc/ada/symbols.adb +++ /dev/null @@ -1,90 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT COMPILER COMPONENTS -- --- -- --- S Y M B O L S -- --- -- --- B o d y -- --- -- --- Copyright (C) 2003-2020, 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- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- --- for more details. You should have received a copy of the GNU General -- --- Public License distributed with GNAT; see file COPYING3. If not, go to -- --- http://www.gnu.org/licenses for a complete copy of the license. -- --- -- --- GNAT was originally developed by the GNAT team at New York University. -- --- Extensive contributions were provided by Ada Core Technologies Inc. -- --- -- ------------------------------------------------------------------------------- - --- This is the default version of this package, used when the creation --- of symbol files is not supported. - -with Ada.Text_IO; use Ada.Text_IO; - -package body Symbols is - - ---------------- - -- Initialize -- - ---------------- - - procedure Initialize - (Symbol_File : String; - Reference : String; - Symbol_Policy : Policy; - Quiet : Boolean; - Version : String; - Success : out Boolean) - is - pragma Unreferenced (Symbol_File); - pragma Unreferenced (Reference); - pragma Unreferenced (Symbol_Policy); - pragma Unreferenced (Quiet); - pragma Unreferenced (Version); - begin - Put_Line - ("creation of symbol files are not supported on this platform"); - Success := False; - end Initialize; - - ---------------- - -- Processing -- - ---------------- - - package body Processing is - - ------------- - -- Process -- - ------------- - - procedure Process - (Object_File : String; - Success : out Boolean) - is - pragma Unreferenced (Object_File); - begin - Success := False; - end Process; - - end Processing; - - -------------- - -- Finalize -- - -------------- - - procedure Finalize - (Quiet : Boolean; - Success : out Boolean) - is - pragma Unreferenced (Quiet); - begin - Success := False; - end Finalize; - -end Symbols; diff --git a/gcc/ada/symbols.ads b/gcc/ada/symbols.ads deleted file mode 100644 index 0193830..0000000 --- a/gcc/ada/symbols.ads +++ /dev/null @@ -1,115 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT COMPILER COMPONENTS -- --- -- --- S Y M B O L S -- --- -- --- S p e c -- --- -- --- Copyright (C) 2003-2020, 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- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- --- for more details. You should have received a copy of the GNU General -- --- Public License distributed with GNAT; see file COPYING3. If not, go to -- --- http://www.gnu.org/licenses for a complete copy of the license. -- --- -- --- GNAT was originally developed by the GNAT team at New York University. -- --- Extensive contributions were provided by Ada Core Technologies Inc. -- --- -- ------------------------------------------------------------------------------- - --- This package allows the creation of symbol files to be used for linking --- libraries. The format of symbol files depends on the platform, so there is --- several implementations of the body. - -with GNAT.Dynamic_Tables; - -with System.OS_Lib; use System.OS_Lib; - -package Symbols is - - type Policy is - -- Symbol policy - - (Autonomous, - -- Create a symbol file without considering any reference - - Compliant, - -- Either create a symbol file with the same major and minor IDs if - -- all symbols are already found in the reference file or with an - -- incremented minor ID, if not. - - Controlled, - -- Fail if symbols are not the same as those in the reference file - - Restricted, - -- Restrict the symbols to those in the symbol file. Fail if some - -- symbols in the symbol file are not exported from the object files. - - Direct); - -- The reference symbol file is copied to the symbol file - - type Symbol_Kind is (Data, Proc); - -- To distinguish between the different kinds of symbols - - type Symbol_Data is record - Name : String_Access; - Kind : Symbol_Kind := Data; - Present : Boolean := True; - end record; - -- Data (name and kind) for each of the symbols - - package Symbol_Table is new GNAT.Dynamic_Tables - (Table_Component_Type => Symbol_Data, - Table_Index_Type => Natural, - Table_Low_Bound => 0, - Table_Initial => 100, - Table_Increment => 100); - -- The symbol tables - - Original_Symbols : Symbol_Table.Instance; - -- The symbols, if any, found in the reference symbol table - - Complete_Symbols : Symbol_Table.Instance; - -- The symbols, if any, found in the objects files - - procedure Initialize - (Symbol_File : String; - Reference : String; - Symbol_Policy : Policy; - Quiet : Boolean; - Version : String; - Success : out Boolean); - -- Initialize a symbol file. This procedure must be called before - -- Processing any object file. Depending on the platforms and the - -- circumstances, additional messages may be issued if Quiet is False. - - package Processing is - - -- This package, containing a single visible procedure Process, exists - -- so that it can be a subunits, for some platforms, the body of package - -- Symbols is common, while the subunit Processing is not. - - procedure Process - (Object_File : String; - Success : out Boolean); - -- Get the symbols from an object file. Success is set to True if the - -- object file exists and has the expected format. - - end Processing; - - procedure Finalize - (Quiet : Boolean; - Success : out Boolean); - -- Finalize the symbol file. This procedure should be called after - -- Initialize (once) and Process (one or more times). If Success is - -- True, the symbol file is written and closed, ready to be used for - -- linking the library. Depending on the platforms and the circumstances, - -- additional messages may be issued if Quiet is False. - -end Symbols; diff --git a/gcc/ada/targparm.adb b/gcc/ada/targparm.adb index 0be05ae..cbc3f89 100644 --- a/gcc/ada/targparm.adb +++ b/gcc/ada/targparm.adb @@ -39,8 +39,7 @@ package body Targparm is -- The following array defines a tag name for each entry type Targparm_Tags is - (AAM, -- AAMP - ACR, -- Always_Compatible_Rep + (ACR, -- Always_Compatible_Rep ASD, -- Atomic_Sync_Default BDC, -- Backend_Divide_Checks BOC, -- Backend_Overflow_Checks @@ -49,9 +48,7 @@ package body Targparm is D32, -- Duration_32_Bits DEN, -- Denorm EXS, -- Exit_Status_Supported - FEL, -- Frontend_Layout FEX, -- Frontend_Exceptions - FFO, -- Fractional_Fixed_Ops MOV, -- Machine_Overflows MRN, -- Machine_Rounds PAS, -- Preallocated_Stacks @@ -73,7 +70,6 @@ package body Targparm is -- The following list of string constants gives the parameter names - AAM_Str : aliased constant Source_Buffer := "AAMP"; ACR_Str : aliased constant Source_Buffer := "Always_Compatible_Rep"; ASD_Str : aliased constant Source_Buffer := "Atomic_Sync_Default"; BDC_Str : aliased constant Source_Buffer := "Backend_Divide_Checks"; @@ -83,9 +79,7 @@ package body Targparm is D32_Str : aliased constant Source_Buffer := "Duration_32_Bits"; DEN_Str : aliased constant Source_Buffer := "Denorm"; EXS_Str : aliased constant Source_Buffer := "Exit_Status_Supported"; - FEL_Str : aliased constant Source_Buffer := "Frontend_Layout"; FEX_Str : aliased constant Source_Buffer := "Frontend_Exceptions"; - FFO_Str : aliased constant Source_Buffer := "Fractional_Fixed_Ops"; MOV_Str : aliased constant Source_Buffer := "Machine_Overflows"; MRN_Str : aliased constant Source_Buffer := "Machine_Rounds"; PAS_Str : aliased constant Source_Buffer := "Preallocated_Stacks"; @@ -107,8 +101,7 @@ package body Targparm is type Buffer_Ptr is access constant Source_Buffer; Targparm_Str : constant array (Targparm_Tags) of Buffer_Ptr := - (AAM => AAM_Str'Access, - ACR => ACR_Str'Access, + (ACR => ACR_Str'Access, ASD => ASD_Str'Access, BDC => BDC_Str'Access, BOC => BOC_Str'Access, @@ -117,9 +110,7 @@ package body Targparm is D32 => D32_Str'Access, DEN => DEN_Str'Access, EXS => EXS_Str'Access, - FEL => FEL_Str'Access, FEX => FEX_Str'Access, - FFO => FFO_Str'Access, MOV => MOV_Str'Access, MRN => MRN_Str'Access, PAS => PAS_Str'Access, @@ -803,7 +794,6 @@ package body Targparm is Result := (System_Text (P) = 'T'); case K is - when AAM => null; when ACR => Always_Compatible_Rep_On_Target := Result; when ASD => Atomic_Sync_Default_On_Target := Result; when BDC => Backend_Divide_Checks_On_Target := Result; @@ -813,9 +803,7 @@ package body Targparm is when D32 => Duration_32_Bits_On_Target := Result; when DEN => Denorm_On_Target := Result; when EXS => Exit_Status_Supported_On_Target := Result; - when FEL => null; when FEX => Frontend_Exceptions_On_Target := Result; - when FFO => Fractional_Fixed_Ops_On_Target := Result; when MOV => Machine_Overflows_On_Target := Result; when MRN => Machine_Rounds_On_Target := Result; when PAS => Preallocated_Stacks_On_Target := Result; diff --git a/gcc/ada/targparm.ads b/gcc/ada/targparm.ads index 60b2367..5195a39 100644 --- a/gcc/ada/targparm.ads +++ b/gcc/ada/targparm.ads @@ -544,16 +544,6 @@ package Targparm is -- WARNING: There is a matching C declaration of this variable in fe.h - ------------------------------------------- - -- Boolean-Valued Fixed-Point Attributes -- - ------------------------------------------- - - Fractional_Fixed_Ops_On_Target : Boolean := False; - -- Set to True for targets that support fixed-by-fixed multiplication - -- and division for fixed-point types with a small value equal to - -- 2 ** (-(T'Object_Size - 1)) and whose values have an absolute - -- value less than 1.0. - ----------------- -- Subprograms -- ----------------- diff --git a/gcc/ada/tracebak.c b/gcc/ada/tracebak.c index d643cfc..23ed8da 100644 --- a/gcc/ada/tracebak.c +++ b/gcc/ada/tracebak.c @@ -309,6 +309,13 @@ __gnat_backtrace (void **array, #define USING_ARM_UNWINDING 1 #endif +/*---------------------- ARM Linux ------------------------------------ -*/ +#elif (defined (__ARMEL__) && defined (__linux)) + +#define USE_GCC_UNWINDER +#define PC_ADJUST -2 +#define USING_ARM_UNWINDING 1 + /*---------------------- PPC AIX/PPC Lynx 178/Older Darwin --------------*/ #elif ((defined (_POWER) && defined (_AIX)) || \ (defined (__powerpc__) && defined (__Lynx__) && !defined(__ELF__)) || \ diff --git a/gcc/ada/validsw.adb b/gcc/ada/validsw.adb index dd3b6a0..2f8d769 100644 --- a/gcc/ada/validsw.adb +++ b/gcc/ada/validsw.adb @@ -47,56 +47,6 @@ package body Validsw is Validity_Check_Tests := False; end Reset_Validity_Check_Options; - --------------------------------- - -- Save_Validity_Check_Options -- - --------------------------------- - - procedure Save_Validity_Check_Options - (Options : out Validity_Check_Options) - is - P : Natural := 0; - - procedure Add (C : Character; S : Boolean); - -- Add given character C to string if switch S is true - - procedure Add (C : Character; S : Boolean) is - begin - if S then - P := P + 1; - Options (P) := C; - end if; - end Add; - - -- Start of processing for Save_Validity_Check_Options - - begin - for K in Options'Range loop - Options (K) := ' '; - end loop; - - Add ('e', Validity_Check_Components); - Add ('c', Validity_Check_Copies); - Add ('d', Validity_Check_Default); - Add ('f', Validity_Check_Floating_Point); - Add ('i', Validity_Check_In_Params); - Add ('m', Validity_Check_In_Out_Params); - Add ('o', Validity_Check_Operands); - Add ('p', Validity_Check_Parameters); - Add ('r', Validity_Check_Returns); - Add ('s', Validity_Check_Subscripts); - Add ('t', Validity_Check_Tests); - end Save_Validity_Check_Options; - - ---------------------------------------- - -- Set_Default_Validity_Check_Options -- - ---------------------------------------- - - procedure Set_Default_Validity_Check_Options is - begin - Reset_Validity_Check_Options; - Set_Validity_Check_Options ("d"); - end Set_Default_Validity_Check_Options; - -------------------------------- -- Set_Validity_Check_Options -- -------------------------------- diff --git a/gcc/ada/validsw.ads b/gcc/ada/validsw.ads index 4b2e4b7..6af95d4 100644 --- a/gcc/ada/validsw.ads +++ b/gcc/ada/validsw.ads @@ -126,10 +126,6 @@ package Validsw is -- Subprograms -- ----------------- - procedure Set_Default_Validity_Check_Options; - -- This procedure is called to set the default validity checking options - -- that apply if no Validity_Check switches or pragma is given. - procedure Set_Validity_Check_Options (Options : String; OK : out Boolean; @@ -146,8 +142,7 @@ package Validsw is procedure Set_Validity_Check_Options (Options : String); -- Like the above procedure, except that the call is simply ignored if -- there are any error conditions, this is for example appropriate for - -- calls where the string is known to be valid, e.g. because it was - -- obtained by Save_Validity_Check_Options. + -- calls where the string is known to be valid. procedure Reset_Validity_Check_Options; -- Sets all validity check options to off @@ -155,10 +150,4 @@ package Validsw is subtype Validity_Check_Options is String (1 .. 16); -- Long enough string to hold all options from Save call below - procedure Save_Validity_Check_Options - (Options : out Validity_Check_Options); - -- Sets Options to represent current selection of options. This - -- set can be restored by first calling Reset_Validity_Check_Options, - -- and then calling Set_Validity_Check_Options with the Options string. - end Validsw; |