program associate_01
implicit none
real, allocatable :: a(:), b(:,:), c(:,:,:)
real, pointer :: x(:), y(:,:,:)
real :: a_1, c_234, c_121
integer :: n
a_1 = 0
n = 10
allocate(a(5))
allocate(b(n, n), c(n, 5, n))
1 loop: associate (x => a, y => c, z => c(:, 2, :))
    x(1) = a_1 + 5
    y(2, 3, 4) = 3
    z(1, 1) = 17
    if (size(z) /= 100) then
        error stop
    end if
end associate loop
a_1 = a(1)
if (a(1) == 5) then
    go to 1
end if
c_234 = c(2, 3, 4)
c_121 = c(1, 2, 1)
if (a_1 /= 10.) then
    error stop
end if
if (c_234 /= 3.) then
    error stop
end if
if (c_121 /= 17.) then
    error stop
end if
end program associate_01
