E.2.1 Shared Passive Library Units
A shared passive library unit is used for managing 
global data shared between active partitions. The restrictions on shared 
passive library units prevent the data or tasks of one active partition 
from being accessible to another active partition through references 
implicit in objects declared in the shared passive library unit. 
Syntax
The 
form of a 
pragma 
Shared_Passive is as follows: 
 
  pragma Shared_Passive[(
library_unit_name)];
 
Legality Rules
A 
pragma Shared_Passive 
is used to specify that a library unit is a 
shared passive library 
unit, namely that the Shared_Passive aspect
 
of the library unit is True. The following restrictions apply to such 
a library unit:
 
it shall be preelaborable (see 
10.2.1); 
 
it shall depend semantically only upon declared 
pure or shared passive 
library_items; 
 
it shall not contain a library-level declaration 
of an access type that designates a class-wide type, nor a type with 
a part that is of a task type or protected type with 
entry_declarations; 
 
it shall not contain a library-level declaration 
that contains a name that denotes a type declared within a declared-pure 
package, if that type has a part that is of an access type; for the purposes 
of this rule, the parts considered include those of the full views of 
any private types or private extensions.
Notwithstanding 
the definition of accessibility given in 
3.10.2, 
the declaration of a library unit P1 is not accessible from within the 
declarative region of a shared passive library unit P2, unless the shared 
passive library unit P2 depends semantically on P1. 
 
Static Semantics
A shared passive library unit 
is preelaborated.
 
Post-Compilation Rules
A shared passive library unit shall be assigned to 
at most one partition within a given program.
Notwithstanding 
the rule given in 
10.2, a compilation unit 
in a given partition does not 
need (in the sense of 
10.2) 
the shared passive library units on which it depends semantically to 
be included in that same partition; they will typically reside in separate 
passive partitions.
 
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe