http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50684
--- Comment #7 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-10-12 21:53:28 UTC --- (In reply to comment #5) > I can't give any hard evidence right now, but naively I would say it should > indeed be rejected. Shouldn't the allocation status of the components be > protected by the "intent(in)"? > > The following (equivalent) variant is at least rejected by gfortran 4.5 on > upwards: > > TYPE MY_TYPE > INTEGER, ALLOCATABLE :: VALUE > END TYPE > CONTAINS > SUBROUTINE sub (dt) > type(MY_TYPE), intent(in) :: dt > deallocate(dt%VALUE) No, that version is *not* equivalent. In the previous example you have a *pointer intent*. Those only protect the association status of the dummy - not the value. -- Pointer intents are a Fortran 2003 feature. In this example, you have a nonpointer variable. For those, the value (and hence allocation status) is preserved - including nonpointer components. Pointer components of intent(in) nonpointer variables may be modified as (or rather: if) one changes the pointer target and not the pointer itself. -- Nonpointer intents are a Fortran 90 feature. In any case, the example of comment 5 is clearly invalid. Cf. also (F2008): "C539 (R523) A nonpointer object with the INTENT (IN) attribute shall not appear in a variable definition context (16.6.7)." "C540 A pointer with the INTENT (IN) attribute shall not appear in a pointer association context (16.6.8)."