This fixes a crash on the declaration of a private derived enumeration type
with the Default_Initial_Condition aspect and in the process makes a couple
of related adjustments: 1) removes the early freezing of implicit character
and numeric base types and 2) fixes an oversight in the implementation of
delayed representation aspects.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

        * aspects.ads (Delaying Evaluation of Aspect): Fix typos.
        * exp_ch3.adb (Freeze_Type): Do not generate Invariant and DIC
        procedures for internal types.
        * exp_util.adb (Build_DIC_Procedure_Body): Adjust comment.
        * freeze.adb (Freeze_Entity): Call Inherit_Delayed_Rep_Aspects for
        subtypes and derived types only after the base or parent type has
        been frozen.  Remove useless freezing for first subtype.
        (Freeze_Fixed_Point_Type): Call Inherit_Delayed_Rep_Aspects too.
        * layout.adb (Set_Elem_Alignment): Deal with private types.
        * sem_ch3.adb (Build_Derived_Enumeration_Type): Build the implicit
        base as an itype and do not insert its declaration in the tree.
        (Build_Derived_Numeric_Type): Do not freeze the implicit base.
        (Derived_Standard_Character): Likewise.
        (Constrain_Enumeration): Inherit the chain of representation items
        instead of replacing it.
        * sem_ch13.ads (Inherit_Aspects_At_Freeze_Point): Add ??? comment.
        (Inherit_Delayed_Rep_Aspects): Declare.
        * sem_ch13.adb (Analyze_Aspects_At_Freeze_Point): Do not invoke
        Inherit_Delayed_Rep_Aspects.
        (Inherit_Aspects_At_Freeze_Point): Deal with private types.
        (Inherit_Delayed_Rep_Aspects): Move to library level.

Attachment: patch.diff.gz
Description: application/gzip

Reply via email to