caf_register_t (The GNU Fortran Compiler)

#### 7.1.2 `caf_register_t` ¶

Indicates which kind of coarray variable should be registered.

    typedef enum caf_register_t {
      CAF_REGTYPE_COARRAY_STATIC,
      CAF_REGTYPE_COARRAY_ALLOC,
      CAF_REGTYPE_LOCK_STATIC,
      CAF_REGTYPE_LOCK_ALLOC,
      CAF_REGTYPE_CRITICAL,
      CAF_REGTYPE_EVENT_STATIC,
      CAF_REGTYPE_EVENT_ALLOC,
      CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY,
      CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY
    }
    caf_register_t;

The values `CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY` and `CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY` are for allocatable components in derived type coarrays only. The first one sets up the token without allocating memory for allocatable component. The latter one only allocates the memory for an allocatable component in a derived type coarray. The token needs to be set up previously by the REGISTER_ONLY. This allows having allocatable components unallocated on some images. The status of whether an allocatable component is allocated on a remote image can be queried by `_caf_is_present` which used internally by the `ALLOCATED` intrinsic.