Błąd programu podczas kopiowania tablicy za pomocą ifort

Ten program ulega awarii zIllegal instruction: 4 na MacOSX Lion i ifort (IFORT) 12.1.0 20111011

program foo
      real, pointer :: a(:,:), b(:,:)
      allocate(a(5400, 5400))
      allocate(b(5400, 3600))
      a=1.0
      b(:, 1:3600) = a(:, 1:3600)

      print *, a
      print *, b

      deallocate(a)
      deallocate(b)

end program 

Ten sam program działa z gfortranem. Nie widzę żadnego problemu. Jakieś pomysły ? Rozwinięcie kopii i wykonanie jawnej pętli nad kolumnami działa w obu kompilatorach.

Zauważ, że z allocatable zamiast pointer nie mam problemów.

Zachowanie jest takie samo, jeśli instrukcja znajduje się wewnątrz modułu lub nie. Potwierdzam to samo zachowanie na ifort (IFORT) 12.1.3 20120130.

Najwyraźniej nie ma problemu z Linuksem i ifortem 12.1.5

Próbowałem zwiększyć rozmiar stosu za pomocą następujących opcji łączenia

ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90

ale wciąż mam ten sam błąd. Zwiększenie ulimitów do trudnego problemu.

Edytuj 2: Zrobiłem więcej debugowania i najwyraźniej problem występuje, gdy operacja łączenia tablicy

      b(:, 1:3600) = a(:, 1:3600)

obejmuje wartość podejrzanie zbliżoną do 16 M danych.

Porównuję wyprodukowane opkody, ale jeśli istnieje sposób, aby zobaczyć pośrednią formę kodu, która jest bardziej komunikatywna, chętnie bym to docenił.

questionAnswers(2)

yourAnswerToTheQuestion