]> git.ipfire.org Git - thirdparty/gcc.git/commit
ada: Internal compiler error for Sequential Partition_Elaboration_Policy
authorSteve Baird <baird@adacore.com>
Wed, 16 Nov 2022 17:28:22 +0000 (09:28 -0800)
committerMarc Poulhiès <poulhies@adacore.com>
Mon, 21 Nov 2022 10:10:33 +0000 (11:10 +0100)
commit24dde337d8bf3f971dd7abc643bb7f1703eaf022
tree62be5f94a1a918e04b349cba30be560951f2dbfb
parentdee004a9681049a55269dfae1506f17229be83c9
ada: Internal compiler error for Sequential Partition_Elaboration_Policy

In some cases, compilation of a function with a limited class-wide result
type could fail with an internal error if a Sequential
Partition_Elaboration_Policy is specified. To prevent this, we want specifying
a Sequential Partition_Elaboration_Policy to have the side effect of
imposing a No_Task_Hierarchy restriction. But doing that in a straightforward
way leads to problems with incorrectly accepting violations of H.6(6). So
a new restriction, No_Task_Hierarchy_Implicit, is introduced.

gcc/ada/

* libgnat/s-rident.ads: Define a new restriction,
No_Task_Hierarchy_Implicit. This is like the No_Task_Hierarchy
restriction, but with the difference that setting this restriction
does not mean the H.6(6) post-compilation check is satisified.
* exp_ch6.adb (Add_Task_Actuals_To_Build_In_Place_Call): If it is
known that the function result cannot have tasks, then pass in a
null literal for the activation chain actual parameter. This
avoids generating a reference to an entity that
Build_Activation_Chain_Entity may have chosen not to generate a
declaration for.
* gnatbind.adb (List_Applicable_Restrictions): Do not list the
No_Task_Hierarchy_Implicit restriction.
* restrict.adb: Special treatment for the
No_Task_Hierarchy_Implicit restriction in functions
Get_Restriction_Id and Restriction_Active. The former is needed to
disallow the (unlikely) case that a user tries to explicitly
reference the No_Task_Hierarchy_Implicit restriction.
* sem_prag.adb (Analyze_Pragma): If a Sequential
Partition_Elaboration_Policy is specified (and the
No_Task_Hierarchy restriction is not already enabled), then enable
the No_Task_Hierarchy_Implicit restriction.
gcc/ada/exp_ch6.adb
gcc/ada/gnatbind.adb
gcc/ada/libgnat/s-rident.ads
gcc/ada/restrict.adb
gcc/ada/sem_prag.adb