2015-09-01 3 views
1

я заметил странное поведение с gfortran, версия я использую этоGfortran демонстрирует странное поведение, это ошибка?

GNU Fortran (MacPorts gcc5 5.2.0_0) 5.2.0

моя ОС OS X YOSEMITE 10.10.3 (14D136)

я запустить следующий код

program test 
implicit none 
    type :: mytype 
     real(kind=8),dimension(:,:,:),allocatable :: f 
    end type 

    type(mytype),dimension(:,:),allocatable :: tab 

    integer i,j 
    allocate(tab(3,8)) 

    do i=1,3 
     do j=1,8 
      allocate(tab(i,j)%f(i,i,i)) 
     enddo 
    enddo 
    call check_shapes(tab(:,1)) 

contains 
    subroutine check_shapes(arg) 
     integer :: n,k 
     type(mytype),dimension(:) :: arg 
     n=size(arg) 
     do k=1,n 
      print*,shape(arg(k)%f) 
     enddo 
    end subroutine 


end program 

выход, как ожидается

 1   1   1 
     2   2   2 
     3   3   3 

однако, изменить способ я определить фиктивные аргументы в подпрограмме

type(mytype),dimension(:) :: arg 

в

class(mytype),dimension(:) :: arg 

вводящего класс вместо типа для фиктивного аргумента, я следующий вывод

 2   2   2 
     3   3   3 
     1   1   1 

Это ошибка? или я чего-то не хватает?

отмечают, что она отлично работает с ifort версии Intel (R) 64, версия 15.0.3.187 сборки 20150408

+0

Те же ошибки, что и этот? https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61337 –

+0

Или, скорее, этот, см. последний комментарий и его код https://gcc.gnu.org/bugzilla/show_bug.cgi?id = 58043 Определенно ошибка. –

+0

Я воспроизвел gfortran 4.8.3. Кажется, исправлено на багажнике. – francescalus

ответ

2

я проверил уже сообщенные ошибки

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61337

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58043

и оба они (почти полностью) зафиксированы на соединительной линии GCC с помощью недавнего фиксации (вероятно, https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58043). Ваша ошибка - это просто вариант этих отчетов.

Я добавил информацию о недавнем изменении существующих отчетов. Вы можете ожидать, что GCC 6 будет содержать исправление.

+0

Спасибо за быстрый ответ, он действительно исправлен в gcc6 –