Bug 29624

Summary: Fortran 2003: Support intent for pointers
Product: gcc Reporter: Tobias Burnus <burnus>
Component: fortranAssignee: Not yet assigned to anyone <unassigned>
Severity: enhancement CC: gcc-bugs
Priority: P3    
Version: 4.3.0   
Target Milestone: 4.3.0   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2006-10-31 05:44:27
Bug Depends on:    
Bug Blocks: 20585    

Description Tobias Burnus 2006-10-27 22:54:55 UTC
(Belongs to the features already implemented in several compilers, including
ifort, g95, NAG f95, absoft)

The INTENT applies to the value of the pointer, not the thing being pointed to.

Main points (from

The INTENT (IN) attribute for a pointer dummy argument specifies that during the execution of the procedure its association shall not be changed except that it may become undefined if the target is deallocated other than through the pointer.

The INTENT (OUT) attribute for a pointer dummy argument specifies that on invocation of the procedure the pointer association status of the dummy argument becomes undefined. Any actual argument associated with such a pointer dummy shall be a pointer variable.

The INTENT (INOUT) attribute for a pointer dummy argument specifies that it is intended for use both to receive a pointer association from and to return a pointer association to the invoking scoping unit. Any actual argument associated with such a pointer dummy shall be a pointer variable.

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.
Comment 1 Paul Thomas 2006-10-31 05:43:44 UTC

Comment 2 Paul Thomas 2006-10-31 05:44:27 UTC
It would help to confirm it!

Comment 3 patchapp@dberlin.org 2006-12-12 11:25:45 UTC
Subject: Bug number PR29624

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2006-12/msg00827.html
Comment 4 Tobias Burnus 2007-01-05 09:08:49 UTC
Subject: Bug 29624

Author: burnus
Date: Fri Jan  5 09:08:37 2007
New Revision: 120472

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=120472
2007-01-05  Tobias Burnus  <burnus@net-b.de>

        PR fortran/29624
        * interface.c (compare_parameter_intent): New function.
          (check_intents): Support pointer intents.
        * symbol.c (check_conflict): Support pointer intents,
          better conflict_std message.
        * expr.c (gfc_check_assign,gfc_check_pointer_assign):
          Support pointer intents.
        * resolve.c (resolve_deallocate_expr,resolve_allocate_expr):
          Support pointer intents.

2006-01-05  Tobias Burnus  <burnus@net-b.de>

        PR fortran/29624
        * gfortran.dg/alloc_alloc_expr_1.f90: Add check for
          invalid deallocate.
        * gfortran.dg/allocatable_dummy_2.f90: Update dg-error.
        * gfortran.dg/protected_4.f90: Add pointer intent check.
        * gfortran.dg/protected_6.f90: Add pointer intent check.
        * gfortran.dg/pointer_intent_1.f90: New test.
        * gfortran.dg/pointer_intent_2.f90: New test.
        * gfortran.dg/pointer_intent_3.f90: New test.


Comment 5 Tobias Burnus 2007-01-05 09:20:06 UTC
Fixed in 4.3.