As has been discussed in many forums,
target, intent(in) is not a reliable library solution, particularly due to automatic targeting semantics in the standard.
Fortranners may consider
pointer, intent(in) instead with such use cases. The actual objects (e.g.,
b in the OP’s latest example) can thus be
ALLOCATABLE (or nonallocatable) but with the
TARGET attribute and that is a safer approach.