The compiler blows up processing a constructor function that returns a
limited private tagged type that implements an interface type whose full
view has a task type component.

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

2020-06-15  Javier Miranda  <mira...@adacore.com>

gcc/ada/

        * 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.

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

Reply via email to