Passing a shared variable to a non-intrinsic procedure may result in the value of the shared variable being copied into temporary storage before the procedure reference, and back out of the temporary storage into the actual argument storage after the procedure reference. This copying into and out of temporary storage can occur only if conditions a, b, and c in OpenMP 3.0 Specification, section 2.9.3.2 on p. 88 hold,namely: .
The actual argument is one of the following:
A shared variable
A subobject of a shared variable
An object associated with a shared variable
An object associated with a subobject of a shared variable
The actual argument is also one of the following:
An array section
An array section with a vector subscript
An assumed-shape array
A pointer array
The associated dummy argument for this actual argument is an explicit-shape array or an assumed-size array.