H.6 Pragma Partition_Elaboration_Policy
Syntax
  pragma Partition_Elaboration_Policy 
(
policy_identifier);
 
The 
policy_identifier 
shall be either Sequential, Concurrent or an implementation-defined identifier. 
Implementation defined: Implementation-defined 
policy_identifiers 
allowed in a 
pragma 
Partition_Elaboration_Policy.
 
Ramification: Note that the Ravenscar 
profile (see 
D.13) has nothing to say about 
which Partition_Elaboration_Policy is used. This was intentionally omitted 
from the profile, as there was no agreement as to whether the Sequential 
policy should be required for Ravenscar programs. As such it was defined 
separately. 
 
Post-Compilation Rules
{
AI95-00265-01} 
A 
pragma 
Partition_Elaboration_Policy is a configuration pragma. It specifies 
the elaboration policy for a partition. At most one elaboration policy 
shall be specified for a partition.
{
AI95-00265-01} 
{
AI05-0264-1} 
If the Sequential policy is specified for a partition, then pragma Restrictions 
(No_Task_Hierarchy) shall also be specified for the partition. 
Dynamic Semantics
{
AI95-00265-01} 
Notwithstanding
 what this document says elsewhere, 
this 
pragma 
allows partition elaboration rules concerning task activation and interrupt 
attachment to be changed. If the 
policy_identifier 
is Concurrent, or if there is no pragma Partition_Elaboration_Policy 
defined for the partition, then the rules defined elsewhere in this Reference 
Manual apply.
{
AI95-00265-01} 
{
AI95-00421-01} 
If the partition elaboration policy is Sequential, then task activation 
and interrupt attachment are performed in the following sequence of steps:
The activation of all library-level tasks and the 
attachment of interrupt handlers are deferred until all library units 
are elaborated.
The interrupt handlers are attached by the environment 
task.
The environment task is suspended while the library-level 
tasks are activated.
The environment task executes the main subprogram 
(if any) concurrently with these executing tasks. 
{
AI95-00265-01} 
{
AI95-00421-01} 
If several dynamic interrupt handler attachments for the same interrupt 
are deferred, then the most recent call of Attach_Handler or Exchange_Handler 
determines which handler is attached.
{
AI95-00265-01} 
{
AI95-00421-01} 
If any deferred task activation fails, Tasking_Error is raised at the 
beginning of the sequence of statements of the body of the environment 
task prior to calling the main subprogram.
Implementation Advice
{
AI95-00265-01} 
{
AI05-0264-1} 
If the partition elaboration policy is Sequential and the Environment 
task becomes permanently blocked during elaboration, then the partition 
is deadlocked and it is recommended that the partition be immediately 
terminated. 
Implementation Advice: If the partition 
elaboration policy is Sequential and the Environment task becomes permanently 
blocked during elaboration, then the partition should be immediately 
terminated.
Implementation Permissions
{
AI95-00265-01} 
{
AI05-0264-1} 
If the partition elaboration policy is Sequential and any task activation 
fails, then an implementation may immediately terminate the active partition 
to mitigate the hazard posed by continuing to execute with a subset of 
the tasks being active. 
NOTE   {
AI95-00421-01} 
{
AI12-0440-1} 
If any deferred task activation fails, the environment task is unable 
to handle the Tasking_Error exception and completes immediately. By contrast, 
if the partition elaboration policy is Concurrent, then this exception 
can be handled within a library unit. 
Extensions to Ada 95
 Ada 2005 and 2012 Editions sponsored in part by Ada-Europe
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe