http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60322
--- Comment #3 from janus at gcc dot gnu.org --- Here is a closely-related variant of comment 1: program main implicit none type Foo end type type(foo), dimension(2:2) :: arg call copyFromArray(arg) contains subroutine copyFromArray(array) class (Foo), intent(in) :: array(:) print*,'lbound should be 1: ', lbound(array) end subroutine end This one also yields '1' for a TYPE argument (as expected), but '2' for a CLASS argument. So, we clearly need to add code to reset the bounds inside of 'copyFromArray' (but having the temporary in comment 1 start from 1 won't hurt either, I guess, though I'm not sure if there is a way to detect the difference).