aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
AgeCommit message (Collapse)AuthorFilesLines
2022-09-06[Ada] Fix missing name for access type in generic instantiationEric Botcazou1-12/+16
Pointer types aren't named types in C so we need to take extra care in Ada to make sure that the name of access types is preserved. gcc/ada/ * gcc-interface/utils.cc (gnat_pushdecl): Preserve named TYPE_DECLs consistently for all kind of pointer types.
2022-09-06[Ada] Extend No_Dependence restriction to code generation (continued)Eric Botcazou1-0/+25
gcc/ada/ * gcc-interface/trans.cc (gnat_to_gnu) <N_Op_Divide>: Report a violation of No_Dependence on System.GCC if the result type is larger than a word. <N_Op_Shift>: Likewise. <N_Op_Mod>: Likewise. <N_Op_Rem>: Likewise. (convert_with_check): Report a violation of No_Dependence on System.GCC for a conversion between an integer type larger than a word and a floating-point type.
2022-09-06[Ada] Disable lock free protected implementation if target lacks supportSteve Baird1-0/+5
Do not select a lock free implementation if Targparm.Support_Atomic_Primitives is False (which indicates that the target cannot support it). gcc/ada/ * sem_ch9.adb (Allows_Lock_Free_Implementation): Return False if Support_Atomic_Primitives is False.
2022-09-06[Ada] Enable lock free protected implementation by defaultSteve Baird9-746/+679
In the past, the Lock_Free aspect of a protected type (including an anonymous type) defaulted to False. In the case where an explicit "Lock_Free => True" aspect specification would be legal, the aspect now defaults to True (which means that a lock-free implementation is used to implement the type's protected operations); this is like the previous behavior of the compiler with the -gnatd9 switch specified. Support for the Lock_Free attribute (which should not be confused with the Lock_Free aspect) is removed. gcc/ada/ * debug.adb: Remove comment regarding the -gnatd9 switch. * doc/gnat_rm/implementation_defined_attributes.rst: Remove all mention of the Lock_Free attribute. * gnat_rm.texi, gnat_ugn.texi: Regenerate. * exp_attr.adb, sem_attr.adb: Remove all mention of the former Attribute_Lock_Free enumeration element of the Attribute_Id type. * sem_ch9.adb (Allows_Lock_Free_Implementation): Remove the Debug_Flag_9 test. Return False in the case of a protected function whose result type requires use of the secondary stack. (Satisfies_Lock_Free_Requirements): This functions checks for certain constructs and returns False if one is found. In the case of a protected function, there is no need to check to see if the protected object is being modified. So it is ok to omit *some* checks in the case of a protected function. But other checks which are required (e.g., the test for a reference to a variable that is not part of the protected object) were being incorrectly omitted. This could result in accepting "Lock_Free => True" aspect specifications that should be rejected. * snames.adb-tmpl: Name_Lock_Free no longer requires special treatment in Get_Pragma_Id or Is_Pragma_Name (because it is no longer an attribute name). * snames.ads-tmpl: Move the declaration of Name_Lock_Free to reflect the fact that it is no longer the name of an attribute. Delete Attribute_Lock_Free from the Attribute_Id enumeration type.
2022-09-06[Ada] Restore missing Aggregate aspect for Ada.Containers.Ordered_Sets.SetSteve Baird1-3/+3
Ada RM A.18.9 includes a specification of the Aggregate aspect for the type Ada.Containers.Ordered_Sets. That aspect specification was deliberately commented out in a-coorse.ads at one time, but that workaround is no longer needed. gcc/ada/ * libgnat/a-coorse.ads: Restore Aggregate aspect specification for type Set.
2022-09-06[Ada] Fix formal parameters list for secondary stack allocation procedureMarc Poulhiès1-1/+2
The introduction of the Alignment parameter for the secondary stack allocator in previous change was missing the corresponding change in the Build_Allocate_Deallocate_Proc when creating the formal parameters list. gcc/ada/ * exp_util.adb (Build_Allocate_Deallocate_Proc): Add Alignment_Param in the formal list for calls to SS_Allocate.
2022-09-06[Ada] Retain Has_Private_View flag for actuals of inlined subprogramsPiotr Trojanek1-0/+10
When instantiating a body to inline (either because frontend inlining is enabled with switch -gnatN or because of inlining-for-proof in GNATprove mode) we rewrite occurrences of formal parameters into the corresponding actual parameters. Then we switch type views, so that if the formal had a full view in the body to inline then the corresponding actual will have a full view in the particular inlined body. However, when rewriting occurrences of the formal parameter we were losing information about whether the formal had a private view. gcc/ada/ * inline.adb (Process_Formals): Preserve Has_Private_View flag while rewriting formal into actual parameters.
2022-09-06[Ada] Enforce matching of extra formalsJavier Miranda12-438/+1148
This patch enforces matching of extra formals in overridden subprograms, subprogram renamings, and subprograms to which attributes 'Access, 'Unchecked_Access, or 'Unrestricted_Access is applied (for these access cases the subprogram is checked against its corresponding subprogram type). gcc/ada/ * debug.adb (Debug_Flag_Underscore_X): Switch added temporarily to allow disabling extra formal checks. * exp_attr.adb (Expand_N_Attribute_Reference [access types]): Add extra formals to the subprogram referenced in the prefix of 'Unchecked_Access, 'Unrestricted_Access or 'Access; required to check that its extra formals match the extra formals of the corresponding subprogram type. * exp_ch3.adb (Stream_Operation_OK): Declaration moved to the public part of the package. (Validate_Tagged_Type_Extra_Formals): New subprogram. (Expand_Freeze_Record_Type): Improve the code that takes care of adding the extra formals of dispatching primitives; extended to add also the extra formals to renamings of dispatching primitives. * exp_ch3.ads (Stream_Operation_OK): Declaration moved from the package body. * exp_ch6.adb (Has_BIP_Extra_Formal): Subprogram declaration moved to the public part of the package. In addition, a parameter has been added to disable an assertion that requires its use with frozen entities. (Expand_Call_Helper): Enforce assertion checking extra formals on thunks. (Is_Build_In_Place_Function): Return False for entities with foreign convention. (Make_Build_In_Place_Call_In_Object_Declaration): Occurrences of Is_Return_Object replaced by the local variable Is_OK_Return_Object that evaluates to False for scopes with foreign convention. (Might_Have_Tasks): Fix check of class-wide limited record types. (Needs_BIP_Task_Actuals): Remove assertion to allow calling this function in more contexts; in addition it returns False for functions returning objects with foreign convention. (Needs_BIP_Finalization_Master): Likewise. (Needs_BIP_Alloc_Form): Likewise. * exp_ch6.ads (Stream_Operation_OK): Declaration moved from the package body. In addition, a parameter has been added to disable assertion that requires its use with frozen entities. * freeze.adb (Check_Itype): Add extra formals to anonymous access subprogram itypes. (Freeze_Expression): Improve code that disables the addition of extra formals to functions with foreign convention. (Check_Extra_Formals): Moved to package Sem_Ch6 as Extra_Formals_OK. (Freeze_Subprogram): Add extra formals to non-dispatching subprograms. * sem_ch3.adb (Access_Subprogram_Declaration): Defer the addition of extra formals to the freezing point so that we know the convention. (Check_Anonymous_Access_Component): Likewise. (Derive_Subprogram): Fix documentation. * sem_ch6.adb (Check_Anonymous_Return): Fix check of access to class-wide limited record types. (Check_Untagged_Equality): Placed in alphabetical order. (Extra_Formals_OK): Subprogram moved from freeze.adb. (Extra_Formals_Match_OK): New subprogram. (Has_BIP_Formals): New subprogram. (Has_Extra_Formals): New subprograms. (Needs_Accessibility_Check_Extra): New subprogram. (Needs_Constrained_Extra): New subprogram. (Parent_Subprogram): New subprogram. (Add_Extra_Formal): Minor code cleanup. (Create_Extra_Formals): Enforce matching extra formals on overridden and aliased entities. (Has_Reliable_Extra_Formals): New subprogram. * sem_ch6.ads (Extra_Formals_OK): Subprogram moved from freeze.adb. (Extra_Formals_Match_OK): New subprogram. * sem_eval.adb (Compile_Time_Known_Value): Improve predicate to avoid assertion failure; found working on this ticket; this change does not affect the behavior of the compiler because this subprogram has an exception handler that returns False when the assertion fails. * sem_util.adb (Needs_Result_Accessibility_Level): Do not return False for dispatching operations compiled with Ada_Version < 2012 since they they may be overridden by primitives compiled with Ada_Version >= Ada_2012.
2022-09-06[Ada] Disable if expression optimization for LLVMArnaud Charlet1-0/+5
gcc/ada/ * exp_ch4.adb (Expand_N_If_Expression): Disable optimization for LLVM.
2022-09-06[Ada] Report error in non-legal class-wide conditionsJavier Miranda1-5/+3
gcc/ada/ * sem_prag.adb (Analyze_Pre_Post_Condition_In_Decl_Part): Improve check to report an error in non-legal class-wide conditions.
2022-09-06[Ada] Slice length computation bug in Generic_Bounded_Length genericsSteve Baird3-21/+16
In some cases involving null slices, the Slice subprograms (both the function and the procedure) in each of the three Generic_Bounded_Length generic packages (for String, Wide_String, and Wide_Wide_String) could raise Constraint_Error in cases where this is incorrect. gcc/ada/ * libgnat/a-strsup.adb, libgnat/a-stwisu.adb, libgnat/a-stzsup.adb (Super_Slice function and procedure): fix slice length computation.
2022-09-06[Ada] Improve documentation of validation checking control switchesSteve Baird2-72/+88
Correct incorrect text and clarify unclear text that has been identified in the "Validity Checking" section of the GNAT UG. gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Improve -gnatVa, -gnatVc, -gnatVd, -gnatVe, -gnatVf, -gnatVo, -gnatVp, -gnatVr, and -gnatVs switch descriptions. * gnat_ugn.texi: Regenerate.
2022-09-06[Ada] Handle new At_End expansion during unnestingJustin Squirek1-1/+10
This patch modifies the marking of nested subprograms requiring static links, so that the changes made to "At end" procedures get handled properly. gcc/ada/ * exp_unst.adb (Visit_Node): Add N_Block_Statement to the enclosing construct case since they can now have "At end" procedures. Also, recognize calls from "At end" procedures when recording subprograms.
2022-09-06[Ada] Fix comment about mapping of parameters and inlining static funcsPiotr Trojanek1-2/+3
Fix glitch in a cross-reference in comment. gcc/ada/ * inline.adb (Replace_Formal): Fix name of the referenced routine.
2022-09-06[Ada] Cleanup unnecessary shadowing in expansion of attribute OldPiotr Trojanek1-1/+0
Code cleanup; semantics is unaffected. gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference [Attribute_Old]): Remove unnecessary local constant that was shadowing another constant with the same initial value.
2022-09-06[Ada] Fix a bug in the contract of formal ordered setsJulien Bortolussi1-3/+4
There are 2 main issues in the postcondition of the function Replace of the formal ordered sets, in the sub package Generic_Keys. One is related to the fact that when the element is changed, the key is also changed. The second one is due to the fact that the arrival of the new element might modify the ordering of the set and thus the Positions might be modified. As a consequence, the postcondition might be false and thus fail at runtime. gcc/ada/ * libgnat/a-cforse.ads (Replace): Fix the postcondition.
2022-09-06[Ada] Cope with scalar subtypes that have a non-scalar basetype.Steve Baird2-2/+6
In some cases, the compiler builds a subtype entity Typ such that Is_Scalar (Typ) is True and Is_Scalar (Base_Type (Typ)) is False. This comes up in some cases involving a subtype of a private type, where the full view of the private type is a scalar type. In such a situation, it may also be the case that Is_Enumeration_Type (Typ) is True and Is_Enumeration_Type (Base_Type (Typ)) is False. Some code incorrectly assumed that if a subtype is known to be a scalar (respectively, enumeration) type, then the same must be true of the base type of that subtype. Fix that code to handle the case where that assumption does not hold. gcc/ada/ * exp_attr.adb (Attribute_Valid): Ensure that PBtyp is initialized to a value for which Is_Scalar_Type is True. * checks.adb (Determine_Range): Call Implemention_Base_Type instead of Base_Type in order to ensure that result is suitable for passing to Enum_Pos_To_Rep.
2022-09-06[Ada] Place "at end" on body nodesBob Duff16-404/+237
This patch fixes a bug where finalization code might refer to variables outside their lifetime. The previous version moved declarations into the Handled_Statement_Sequence (HSS), so that the "at end" handler of the HSS could handle exceptions raised by those declarations. The First_Real_Statement field was used to find the first statement after the moved declarations. In addition, if the HSS already had exception handlers, it was wrapped in another layer of block_statement. This doesn't work if there are variable-sized objects allocated on the (primary) stack, because the stack will be popped before the "at end" is invoked. In the new version, we allow "at end" on nodes such as N_Subprogram_Body, in addition to HSS. We modify gigi so that such an "at end" applies to the whole body (declarations and HSS) by extending support for At_End_Proc mechanism to N_Block_Statement and N_*_Body nodes. This also removes the support for First_Real_Statement. In particular, an exception raised by the declarations will trigger the "at end". We no longer move declarations into the HSS, we no longer have a First_Real_Statement field, and we no longer do the wrapping mentioned above. This change requires various other changes, in cases where we depended on the First_Real_Statement and the moving/wrapping mentioned above. gcc/ada/ * gen_il-fields.ads (First_Real_Statement): Remove this field. * gen_il-gen-gen_nodes.adb: Remove the First_Real_Statement field. Add the At_End_Proc field to nodes that have both Declarations and HSS. * sinfo.ads (At_End_Proc): Document new semantics. (First_Real_Statement): Remove comment. * exp_ch11.adb (Expand_N_Handled_Sequence_Of_Statements): Remove First_Real_Statement. * exp_ch7.adb (Build_Cleanup_Statements): Remove "Historical note"; it doesn't seem useful, and we have revision history. (Create_Finalizer): Insert the finalizer later, typically in the statement list, in some cases. (Build_Finalizer_Call): Attach the "at end" handler to the parent of the HSS node in most cases, so it applies to declarations. (Expand_Cleanup_Actions): Remove Wrap_HSS_In_Block and the call to it. Remove the code that moves declarations. Remove some redundant code. * exp_ch9.adb (Build_Protected_Entry): Copy the At_End_Proc. (Build_Protected_Subprogram_Body): Reverse the sense of Exc_Safe, to avoid double negatives. Remove "Historical note" as in exp_ch7.adb. (Build_Unprotected_Subprogram_Body): Copy the At_End_Proc from the protected version. (Expand_N_Conditional_Entry_Call): Use First (Statements(...)) instead of First_Real_Statement(...). (Expand_N_Task_Body): Put the Abort_Undefer call at the beginning of the declarations, rather than in the HSS. Use First (Statements(...)) instead of First_Real_Statement(...). Copy the At_End_Proc. * inline.adb (Has_Initialized_Type): Return False if the declaration does not come from source. * libgnarl/s-tpoben.ads (Lock_Entries, Lock_Entries_With_Status): Document when these things raise Program_Error. It's not clear that Lock_Entries_With_Status ought to be raising exceptions, but at least it's documented now. * sem.ads: Minor comment fixes. * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use First (Statements(...)) instead of First_Real_Statement(...). (Analyze_Null_Procedure): Minor comment fix. * sem_util.adb (Might_Raise): Return True for N_Raise_Expression. Adjust the part about exceptions generated by the back end to match the reality of what the back end generates. (Update_First_Real_Statement): Remove. * sem_util.ads: Remove First_Real_Statement from comment. * sinfo-utils.ads (First_Real_Statement): New function that always returns Empty. This should be removed once gnat-llvm and codepeer have been updated to not refer to First_Real_Statement. * sprint.adb (Sprint_At_End_Proc): Deal with printing At_End_Proc. * sem_prag.adb: Minor comment fixes. * gcc-interface/trans.cc (At_End_Proc_to_gnu): New function. (Subprogram_Body_to_gnu): Call it to handle an At_End_Proc. (Handled_Sequence_Of_Statements_to_gnu): Likewise. Remove the support for First_Real_Statement and clean up the rest. (Exception_Handler_to_gnu): Do not push binding levels. (Compilation_Unit_to_gnu): Adjust call to process_decls. (gnat_to_gnu) <N_Package_Specification>: Likewise. <N_Entry_Body>: Likewise. <N_Freeze_Entity>: Likewise. <N_Block_Statement>: Likewise and call At_End_Proc_to_gnu to handle an At_End_Proc. <N_Package_Body>: Likewise. (process_decls): Remove GNAT_END_LIST parameter and adjust recursive calls. Co-authored-by: Eric Botcazou <ebotcazou@adacore.com>
2022-09-06[Ada] Document change to legality checks for Inox case statementsSteve Baird2-2/+4
INOX (which is enabled via -gnatX) supports composite case-statement selectors. As a temporary measure, simplify the coverage-related compile-time checks for such case statements via two changes: an others choice is always required for such a case statement, and no legality checks relating to overlapping of case choices are performed. gcc/ada/ * doc/gnat_rm/implementation_defined_pragmas.rst: Document new temporary rule that a "when others =>" case choice must be given when casing on a composite selector. * gnat_rm.texi: Regenerate.
2022-09-06[Ada] Temporarily simplify legality checks for Inox case statementsSteve Baird1-4/+23
INOX (which is enabled via -gnatX) supports composite case-statement selectors. As a temporary measure, simplify the coverage-related compile-time checks for such case statements via two changes: an others choice is always required for such a case statement, and no legality checks relating to overlapping of case choices are performed. gcc/ada/ * sem_case.adb: Define a new Boolean constant, Simplified_Composite_Coverage_Rules, initialized to True. Setting this constant to True has two effects: 1- Representative value sets are not fully initialized - this is done to avoid capacity problems, as well as for performance. 2- In Check_Case_Pattern_Choices, the only legality check performed is a check that a "when others =>" choice is present.
2022-09-06[Ada] Tune message for illegal aspect Relaxed_InitializationPiotr Trojanek1-1/+1
Error message about illegal aspect Relaxed_Initialization was lacking a whitespace character. gcc/ada/ * sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Fix error template.
2022-09-06[Ada] Bad Valid_Scalars result if signed int component type signed has ↵Steve Baird1-24/+24
partial view. For an object X of a composite type, the attribute X'Valid_Scalars should return False if and only if there exists at least one invalid scalar subcomponent of X. The validity test for a scalar part may include a range test. In some cases involving a private type that is implemented as a signed integer type, this range test was incorrectly implemented using unsigned comparisons. For an enclosing object X, this could result in X'Valid_Scalars yielding the wrong Boolean result. Such an incorrect result would almost always be False, although an incorrect True result is theoretically possible (this would require that both bounds of the component subtype are negative and that the invalid component has a positive value). gcc/ada/ * exp_attr.adb (Make_Range_Test): In determining which subtype's First and Last attributes are to be queried as part of a range test, call Validated_View in order to get a scalar (as opposed to private) subtype. (Attribute_Valid): In determining whether to perform a signed or unsigned comparison for a range test, call Validated_View in order to get a scalar (as opposed to private) type. Also correct a typo which, by itself, is the source of the problem reported for this ticket.
2022-09-06[Ada] ICE handling discriminant-dependent index constraint for access componentSteve Baird1-0/+85
The compiler would fail with an internal error in some cases involving a discriminated record type that provides a discriminant-dependent index constraint for the subtype of a component of an access-to-array type when a dereference of that component of some object is mentioned in a pre- or postcondition expression. gcc/ada/ * sem_ch4.adb (Analyze_Selected_Component): Define new Boolean-valued function, Constraint_Has_Unprefixed_Discriminant_Reference, which takes a subtype that is subject to a discriminant-dependent constraint and returns True if any of the constraint values are unprefixed discriminant names. Usually, the Etype of a selected component node is set to Etype of the component. However, in the case of an access-to-array component for which this predicate returns True, we instead use the base type of the Etype of the component. Normally such problematic discriminant references are addressed by calling Build_Actual_Subtype_Of_Component, but that doesn't work if Full_Analyze is False.
2022-09-06[Ada] Add formal verification dependencies to libgnatPiotr Trojanek1-0/+2
Spec units for verification of the GNAT standard library with GNATprove must be listed as part of the libgnat package, as otherwise libadalang will complain about missing dependencies. gcc/ada/ * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Include System.Value_U_Spec and System.Value_I_Spec units.
2022-09-06[Ada] Correctly round Value attribute for floating point in more casesEric Botcazou8-54/+304
This provides correct rounding in the IEEE 754 sense for the Value attribute of floating-point types in more cases, by switching from tables of powers of 10 to tables of powers of 5 for precomputed values, thus making it possible to use a single divide for denormals and normalized numbers just above them. Although this significantly increases the size of the tables, object files for them are still quite small (1, 2 and 4 KB respectively on x86-64). gcc/ada/ * libgnat/s-powflt.ads (Powfive): New constant array. * libgnat/s-powlfl.ads (Powfive): Likewise. (Powfive_100): New constant. (Powfive_200): Likewise. (Powfive_300): Likewise. * libgnat/s-powllf.ads (Powfive): New constant array. (Powfive_100): New constant. (Powfive_200): Likewise. (Powfive_300): Likewise. * libgnat/s-valflt.ads (Impl): Replace Powten with Powfive and pass Null_Address for the address of large constants. * libgnat/s-vallfl.ads (Impl): Replace Powten with Powfive and pass the address of large constants. * libgnat/s-valllf.ads (Impl): Likewise. * libgnat/s-valrea.ads (System.Val_Real): Replace Powten_Address with Powfive_Address and add Powfive_{1,2,3}00_Address parameters. * libgnat/s-valrea.adb (Is_Large_Type): New boolean constant. (Is_Very_Large_Type): Likewise. (Maxexp32): Change value of 10 to that of 5. (Maxexp64): Likewise. (Maxexp80): Likewise. (Integer_to_Real): Use a combination of tables of powers of 5 and scaling if the base is 10. (Large_Powten): Rename into... (Large_Powfive): ...this. Add support for large constants. (Large_Powfive): New overloaded function for very large exponents.
2022-09-06[Ada] Improve detection of illegal Iterable aspectsPiotr Trojanek6-41/+71
Handling of aspect Iterable was lacking guards against illegal code, so the compiler either crashed or emitted cryptic errors while expanding loops that rely on this aspect. gcc/ada/ * doc/gnat_rm/implementation_defined_aspects.rst (Aspect Iterable): Include Last and Previous primitives in syntactic and semantic description. * exp_attr.adb (Expand_N_Attribute_Reference): Don't expect attributes like Iterable that can only appear in attribute definition clauses. * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Prevent crash on non-aggregate Iterable attribute; improve basic diagnosis of attribute values. (Resolve_Iterable_Operation): Improve checks for illegal primitives in aspect Iterable, e.g. with wrong number of formal parameters. (Validate_Iterable_Aspect): Prevent crashes on syntactically illegal aspect expression. * sem_util.adb (Get_Cursor_Type): Fix style. * gnat_ugn.texi, gnat_rm.texi: Regenerate.
2022-09-06[Ada] Correctly round Value attribute for floating point in more casesEric Botcazou5-218/+253
This provides correct rounding in the IEEE 754 sense for the Value attribute of floating-point types in more cases, by bumping the number of significant bits used in the initial integer mantissa obtained from parsing. gcc/ada/ * libgnat/s-valuer.ads (System.Value_R): Add Parts formal parameter as well as Data_Index, Scale_Array and Value_Array types. (Scan_Raw_Real): Change type of Scale and return type. (Value_Raw_Real): Likewise. * libgnat/s-valuer.adb (Round_Extra): Reorder parameters and adjust recursive call. (Scan_Decimal_Digits): Reorder parameters, add N parameter and deal with multi-part scale and value. (Scan_Integral_Digits): Likewise. (Scan_Raw_Real): Change type of Scale and return type and deal with multi-part scale and value. (Value_Raw_Real): Change type of Scale and return type and tidy up. * libgnat/s-valued.adb (Impl): Pass 1 as Parts actual parameter. (Scan_Decimal): Adjust to type changes. (Value_Decimal): Likewise. * libgnat/s-valuef.adb (Impl): Pass 1 as Parts actual parameter. (Scan_Fixed): Adjust to type changes. (Value_Fixed): Likewise. * libgnat/s-valrea.adb (Need_Extra): Delete. (Precision_Limit): Always use the precision of the mantissa. (Impl): Pass 2 as Parts actual parameter. (Exact_Log2): New expression function. (Integer_to_Real): Change type of Scale and Val and deal with a 2-part integer mantissa. (Scan_Real): Adjust to type changes. (Value_Real): Likewise.
2022-09-06Daily bump.GCC Administrator1-0/+239
2022-09-05rename DBX_REGISTER_NUMBER to DEBUGGER_REGNOMartin Liska1-1/+1
gcc/ada/ChangeLog: * sigtramp-vxworks-target.h: Rename DBX_REGISTER_NUMBER to DEBUGGER_REGNO. gcc/ChangeLog: * config/aarch64/aarch64-protos.h (aarch64_dbx_regno): Rename DBX_REGISTER_NUMBER to DEBUGGER_REGNO. (aarch64_debugger_regno): Likewise. * config/aarch64/aarch64.cc (aarch64_dbx_regno): Likewise. (aarch64_debugger_regno): Likewise. * config/aarch64/aarch64.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (DWARF_FRAME_REGNUM): Likewise. * config/alpha/alpha.h (DWARF_FRAME_REGNUM): Likewise. * config/arc/arc.cc (arc_init_reg_tables): Likewise. * config/arc/arc.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/arm/arm-protos.h (arm_dbx_regno): Likewise. (arm_debugger_regno): Likewise. * config/arm/arm.cc (arm_dbx_regno): Likewise. (arm_debugger_regno): Likewise. * config/arm/arm.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/bfin/bfin.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/c6x/c6x.cc: Likewise. * config/c6x/c6x.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/cris/cris.h (enum reg_class): Likewise. (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/csky/csky.cc (enum reg_class): Likewise. * config/csky/csky.h (DWARF_FRAME_REGNUM): Likewise. (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/frv/frv.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/gcn/gcn-hsa.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/gcn/gcn.cc (print_operand): Likewise. * config/i386/bsd.h (ASM_QUAD): Likewise. * config/i386/cygming.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (DWARF_FRAME_REGNUM): Likewise. * config/i386/darwin.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/djgpp.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/dragonfly.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/freebsd.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/gas.h: Likewise. * config/i386/gnu-user.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/i386.cc (enum reg_class): Likewise. * config/i386/i386.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/i386elf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/iamcu.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/lynx.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/netbsd-elf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/nto.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/openbsdelf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/sysv4.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/vxworks.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/x86-64.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/ia64/ia64-protos.h (ia64_dbx_regno): Likewise. (ia64_debugger_regno): Likewise. * config/ia64/ia64.cc (ia64_output_function_prologue): Likewise. (ia64_dbx_regno): Likewise. (ia64_debugger_regno): Likewise. (process_cfa_adjust_cfa): Likewise. (process_cfa_register): Likewise. (ia64_asm_unwind_emit): Likewise. * config/ia64/ia64.h: Likewise. * config/ia64/sysv4.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/lm32/lm32.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/m32c/m32c.cc (m32c_eh_return_stackadj_rtx): Likewise. * config/m32c/m32c.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/m68k/linux.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/m68k/m68k.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (__transfer_from_trampoline): Likewise. * config/m68k/m68kelf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/m68k/netbsd-elf.h (M68K_STATIC_CHAIN_REG_NAME): Likewise. (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/microblaze/microblaze.cc (microblaze_option_override): Likewise. * config/microblaze/microblaze.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (GP_DBX_FIRST): Likewise. (GP_DEBUGGER_FIRST): Likewise. * config/mips/vxworks.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/mmix/mmix-protos.h (mmix_dbx_regno): Likewise. (mmix_debugger_regno): Likewise. * config/mmix/mmix.cc (mmix_dbx_regno): Likewise. (mmix_debugger_regno): Likewise. * config/mmix/mmix.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/nds32/nds32-protos.h (nds32_dbx_regno): Likewise. (nds32_debugger_regno): Likewise. * config/nds32/nds32.cc (nds32_dbx_regno): Likewise. (nds32_debugger_regno): Likewise. (nds32_use_blocks_for_constant_p): Likewise. * config/nds32/nds32.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/nvptx/nvptx.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/or1k/or1k.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/pa/pa32-regs.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/pa/pa64-regs.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/rs6000/rs6000-protos.h (rs6000_dbx_regno): Likewise. (rs6000_debugger_regno): Likewise. * config/rs6000/rs6000.cc (rs6000_dbx_regno): Likewise. (rs6000_debugger_regno): Likewise. * config/rs6000/rs6000.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (DWARF2_FRAME_REG_OUT): Likewise. * config/s390/s390.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/sh/elf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/sh/linux.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/sh/sh.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (SH_DBX_REGISTER_NUMBER): Likewise. (SH_DEBUGGER_REGNO): Likewise. * config/visium/visium.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/xtensa/elf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/xtensa/linux.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/xtensa/uclinux.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/xtensa/xtensa-protos.h (xtensa_dbx_regno): Likewise. (xtensa_debugger_regno): Likewise. * config/xtensa/xtensa.cc (xtensa_dbx_regno): Likewise. (xtensa_debugger_regno): Likewise. * config/xtensa/xtensa.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * defaults.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (DWARF_FRAME_REGNUM): Likewise. * doc/tm.texi: Likewise. * doc/tm.texi.in: Likewise. * dwarf2out.cc (dbx_reg_number): Likewise. (debugger_reg_number): Likewise. (reg_loc_descriptor): Likewise. (multiple_reg_loc_descriptor): Likewise. (mem_loc_descriptor): Likewise. * except.cc: Likewise.
2022-09-05[Ada] Move check for null array aggregates to expansionPiotr Trojanek3-21/+22
Despite recent changes to runtime checks for null array aggregates, GNATprove still struggles with N_Raise_Constraint_Error nodes inserted into AST by aggregate resolution. The ultimate fix is to move these checks to expansion (which is disabled in GNATprove mode) and explicitly emit a proof check in the GNATprove backend. gcc/ada/ * exp_aggr.adb (Check_Bounds): Move code and comment related to check for null array aggregate from Resolve_Null_Array_Aggregate. * sem_aggr.ads (Is_Null_Aggregate): Move spec from unit body. * sem_aggr.adb (Resolve_Null_Array_Aggregate): Move check to expansion.
2022-09-05[Ada] Fix inconsistent building of itypes for null array aggregatesPiotr Trojanek1-23/+31
To analyze Ada 2022 null array aggregates we introduced a dedicated routine and bypassed the code for ordinary array aggregates. However, the types for the array indexes created by this dedicated routine differed from the types created for ordinary array aggregates, i.e. itypes for null array aggregates were associated with the array subtype declaration, while itypes for ordinary array aggregates were associated with the aggregate itself. These differences cause trouble for various routines in GNATprove. This patch reduces the special handling of null array aggregates and reuses the building of itypes for ordinary array aggregates. gcc/ada/ * sem_aggr.adb (Array_Aggr_Subtype): Bypass call to Collect_Aggr_Bound with dedicated code for null array aggregates. (Resolve_Array_Aggregate): Remove special handling of null array aggregates. (Resolve_Array_Aggregate): Create bounds, but let Array_Aggr_Subtype create itype entities.
2022-09-05[Ada] Fix insertion of a runtime check for null array aggregatePiotr Trojanek1-4/+2
A null array aggregate of Ada 2022 requires a conditional runtime check that was inserted as an if-statement. While gigi can handle statements inserted into a list of declarations, in GNATprove such a statement will cause a crash. It is better to insert a conditional raise node, which is properly handled by both gigi and GNATprove. gcc/ada/ * sem_aggr.adb (Resolve_Null_Array_Aggregate): Insert check as a Raise_Constraint_Error node and not an If_Statement.
2022-09-05[Ada] Cleanup iteration over aggregate component associationsPiotr Trojanek1-4/+2
Code cleanup related to fixes for iterated component associations in GNATprove ; semantics is unaffected. gcc/ada/ * sem_aggr.adb (Resolve_Container_Aggregate): Style cleanup. (Resolve_Record_Aggregate): Remove redundant guard.
2022-09-05[Ada] Remove VMS specific routine that is no longer referencedPiotr Trojanek2-18/+0
Code cleanup related to resctrition No_Local_Allocators. gcc/ada/ * exp_util.ads (Entry_Names_OK): Remove spec. * exp_util.adb (Entry_Names_OK): Remove body.
2022-09-05[Ada] Single-element Append performance improvementSteve Baird2-39/+49
Ada.Containers.Vectors has two Append procedures that take an Element value; one takes a Count parameter and one does not (the count is implicitly one for the latter). For the former version, there was code that took a faster path if certain conditions were met and otherwise took a slower path; one of the prerequisite conditions for this was Count = 1. For the latter version, no such special-case detection was performed; the more general code was always executed. Move the special-case detection/handling code from the former version into the latter and change the former version to simply call the latter version if Count = 1. Also apply same change to Ada.Containers.Indefinite_Vectors. gcc/ada/ * libgnat/a-coinve.adb, libgnat/a-convec.adb (Append): If the Append that takes an Element and a Count is called with Count = 1, then call the Append that does not take a Count parameter; otherwise call the code that handles the general case. Move the special case detection/handling code that was formerly in that version of Append into the version that does not take a Count parameter, so that now both versions get the performance benefit.
2022-09-05[Ada] Create internal type for null array aggregate as an itypePiotr Trojanek1-2/+4
Internal type created for the null array aggregate of Ada 2022 was created as a temporary entity and then flagged as internal, but it is better to create this type directly as an itype. In particular, when the null array aggregate appears in a spec expression, its type declaration will not be attached to the AST. An itype will have Associated_Node_For_Itype, so that the context of the type can be recovered, which is what GNATprove does. gcc/ada/ * sem_aggr.adb (Resolve_Null_Array_Aggregate): Create internal type for the aggregate as an itype.
2022-09-05[Ada] Remove no longer referenced GNATprove utility routine for itypesPiotr Trojanek2-18/+0
Code cleanup related to itypes for Ada 2022 null array aggregates. Remove routine that was added in 2011 but is not referenced by GNATprove since 2015. gcc/ada/ * sem_util.ads (Itype_Has_Declaration): Remove spec. * sem_util.adb (Itype_Has_Declaration): Remove body.
2022-09-05[Ada] Bad Default_Initial_Condition check for a not-default-initialized objectSteve Baird1-0/+1
No Default_Initial_Condition check should be generated for an object declaration that has an explicit initial value. Previously this was implemented by testing the Has_Init_Expression flag, but this only works if the object declaration was created by the parser (since only the parser sets that attribute, at least currently). gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration): In deciding whether to emit a DIC check, we were previously testing the Has_Init_Expression flag. Continue to test that flag as before, but add a test for the syntactic presence of an initial value in the object declaration. This new test would not supersede the old test in the case where an explicit initial value has been eliminated as part of some tree transformation.
2022-09-05[Ada] Fix detection of unused warning suppressionPiotr Trojanek2-3/+5
The comment for Warnings_Off says: "clients should generally not test this flag directly, but instead use function Has_Warnings_Off". Primarily a code cleanup, as this only affects minor a corner case. gcc/ada/ * sem_ch13.adb (Validate_Unchecked_Conversions): Use Has_Warnings_Off. * sem_elab.adb (Check_Internal_Call_Continue): Likewise.
2022-09-05[Ada] Small cleanup in body of System.Value_REric Botcazou1-9/+20
This is mostly stylistic but also adds a couple of missing comments. gcc/ada/ * libgnat/s-valuer.adb (Scan_Decimal_Digits): Consistently avoid initializing local variables. (Scan_Integral_Digits): Likewise. (Scan_Raw_Real): Likewise and add a couple of comments.
2022-09-05[Ada] Fix bogus discriminant check failure for type with predicateEric Botcazou1-133/+134
This reorders the processing in Freeze_Entity_Checks so that building the predicate functions, which first requires building discriminated checking functions for record types with a variant part, is done after processing and checking this variant part. gcc/ada/ * sem_ch13.adb (Freeze_Entity_Checks): Build predicate functions only after checking the variant part of a record type, if any.
2022-09-05[Ada] Detect expansion of iterated component associations into loopsPiotr Trojanek1-3/+3
Iterated component associations are expanded into loops, which GNAT should detect as violating restriction No_Implicit_Loops; same for iterated element associations and delta array aggregates. Part of cleanups for correct handling of iterated component associations in SPARK. gcc/ada/ * exp_aggr.adb (Two_Pass_Aggregate_Expansion): Expand into implicit rather than ordinary loops, to detect violations of restriction No_Implicit_Loops. (Generate_Loop): Likewise for delta array aggregates.
2022-09-05[Ada] Fix double identifiers in iterated component associationPiotr Trojanek7-13/+41
The iterated_component_association grammar construct appears in Ada RM in two syntactic forms: with iterator_specification and with defining_identifier. This is now properly reflected in the GNAT AST, while previously we had two defining_identifiers regardless of the syntactic form. Cleanup related to handling of iterated_component_association in SPARK. Behavior of the compiler itself should not be affected. gcc/ada/ * exp_aggr.adb (Two_Pass_Aggregate_Expansion): Expand iterated component association with an unanalyzed copy of iterated expression. The previous code worked only because the expanded loop used both an analyzed copy of the iterator_specification and an analyzed copy of the iterated expression. Now the iterated expression is reanalyzed in the context of the expanded loop. * par-ch4.adb (Build_Iterated_Component_Association): Don't set defining identifier when iterator specification is present. * sem_aggr.adb (Resolve_Iterated_Association): Pick index name from the iterator specification. * sem_elab.adb (Traverse_Potential_Scenario): Handle iterated element association just like iterated component association. Not strictly part of this fix, but still worth for the completeness. * sem_res.adb (Resolve): Pick index name from the iterator specification, when present. * sem_util.adb (Traverse_More): For completeness, just like the change in Traverse_Potential_Scenario. * sinfo.ads (ITERATED_COMPONENT_ASSOCIATION): Fix and complete description. (ITERATED_ELEMENT_ASSOCIATION): Likewise.
2022-09-05[Ada] Suppress warnings in trivial subprograms with finalizationBob Duff1-3/+9
There are heuristics for suppressing warnings about unused objects in trivial cases. In particular, we try to suppress warnings here: function F (A : Integer) return Some_Type; X : Some_Type; begin raise Not_Yet_Implemented; return X; end F; But it doesn't work if Some_Type is controlled. This patch fixes that bug. gcc/ada/ * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use First_Real_Statement to deal with this case. Note that First_Real_Statement is likely to be removed as part of this ticket, so this is a temporary fix.
2022-09-05[Ada] Secondary stack and i-c*Arnaud Charlet1-5/+14
Extend the previous changes related to Ada.Tags trigerring a dependency on the secondary stack to various i-c* packages. gcc/ada/ * ali.adb (Scan_ALI): Special case i-c*.ali when setting Sec_Stack_Used.
2022-09-05[Ada] Enable Error_Msg_GNAT_Extension for mixed decl/stmtsBob Duff1-17/+8
Enable mixing of declarative items and statements under the -gnatX switch. The previous version used the -gnat2022 switch. In addition, change the error message so that it advertises the new feature when it is disabled. Instead of: declarations must come before "begin" we now say (without -gnatX): declarations mixed with statements is a GNAT-specific extension unit must be compiled with -gnatX or use pragma Extensions_Allowed (On) gcc/ada/ * par-ch5.adb (P_Sequence_Of_Statements): Call Error_Msg_GNAT_Extension to give the error message.
2022-09-05[Ada] Fix resolution of iterated component associationPiotr Trojanek1-45/+23
For iterator specification appearing inside an iterated component association, we just did ad-hoc, incomplete checks and delayed a proper analysis until the iterated component association is expanded into loop (and then reanalyzed). However, when the iterated component association is not expanded, e.g. because we are in semantic checking mode, GNATprove mode or inside a generic, then the AST lacked any processing or error reporting. This is fixed by reusing the existing analysis of iterator specifications, as they also appear in other constructs, e.g. in quantified expressions. gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Split processing of cases with and without iterator specification; reuse analysis of iterator specification; improve diagnostics for premature usage of iterator index in discrete choices.
2022-09-05[Ada] Cleanup analysis of iterator specificationsPiotr Trojanek1-5/+4
Code cleanup; semantics is unaffected. gcc/ada/ * sem_ch5.adb (Check_Subtype_Definition): Remove redundant call to Present; style cleanup.
2022-09-05[Ada] Cleanup resolution of aggregates with mixed component associationsPiotr Trojanek1-3/+3
Code cleanup only; semantics is unaffected. gcc/ada/ * sem_aggr.adb (Resolve_Array_Aggregate): Change an inconsistent use of False into its local equivalent Failure.
2022-09-05[Ada] Cleanup resolution of iterated component associationPiotr Trojanek1-11/+11
Tune names of local entities. gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Change generic name Ent to a more intuitive Scop; rename Remove_Ref to Remove_Reference, so it can be instantiated as a traversal routine with plural name.