1! This gives incorrect results when compiled with
2! the intel and pgf90 compilers
3Program Strange
4
5 Implicit None
6
7 Type Link
8 Integer, Dimension(2) :: Next
9 End Type Link
10
11 Integer, Parameter :: N = 2
12 Integer, dimension (2, 4) :: results
13 Integer :: i, j
14
15 Type(Link), Dimension(:,:), Pointer :: Perm
16 Integer, Dimension(2) :: Current
17
18 Allocate (Perm(N,N))
19
20! Print*, 'Spanned by indices'
21 Do i = 1, N**2
22    Perm(mod(i-1,N)+1, (i-1)/N+1)%Next = (/ Mod(i,N) + 1, Mod(i/N+1,N)+1/)
23!    Write(*,100) mod(i-1,N)+1, (i-1)/N+1, Perm(mod(i-1,N)+1, (i-1)/N+1)%Next
24! Expected output:
25!  Spanned by indices
26!  1 1---> 2 2
27!  2 1---> 1 1
28!  1 2---> 2 1
29!  2 2---> 1 2
30 End Do
31
32! Print*, 'Spanned as a cycle'
33 Current = (/1,1/)
34 Do i = 1, n**2
35   results (:, i) = Perm(Current(1), Current(2))%Next
36!    Write(*,100) Current, Perm(Current(1), Current(2))%Next
37! Expected output:
38!  1 1---> 2 2
39!  2 2---> 1 2
40!  1 2---> 2 1
41!  2 1---> 1 1
42   Current = Perm(Current(1), Current(2))%Next
43 End Do
44
45 if (any(results .ne. reshape ((/2,2,1,2,2,1,1,1/), (/2, 4/)))) STOP 1
46
47! 100 Format( 2I3, '--->', 2I3)
48 DeAllocate (Perm)
49
50End Program Strange
51