------- Comment #2 from burnus at gcc dot gnu dot org 2008-05-20 15:26 ------- > Works for me with 4.4.0. Well, it also "works" for me with 4.3.1 and 4.4.0 (in the sense that _no_ error is shown).
However, I would claim that the program is valid as neither obs nor objs(n)%x itself is changed, but only the target to which objs(n)%x points to. For completeness, the program is also accepted by NAG f95, g95. However, it is rejected by ifort, openf95 and sunf95. gfortran changed when my pointer intent patch was checked in around January 2007. (see PR29624) * * * If a dummy argument is a derived-type object with a pointer component, then the pointer as a pointer is a subobject of the dummy argument, but the target of the pointer is not. Therefore, the restrictions on subobjects of the dummy object apply to the pointer in contexts where it is used as a pointer, but not in contexts where it is dereferenced to indicate its target. Similarly, the INTENT restrictions on pointer dummy arguments apply only to the association of the dummy argument; they do not restrict the operations allowed on its target. A pointer object with the INTENT (IN) attribute shall not appear as (1) A pointer-object in a nullify-stmt, (2) A data-pointer-object or proc-pointer-object in a pointer-assignment-stmt, (3) An allocate-object in an allocate-stmt or deallocate-stmt, or (4) An actual argument in a reference to a procedure if the associated dummy argument is a pointer with the INTENT (OUT) or INTENT (INOUT) attribute. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36271