Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29275 Discussions

INTENT(IN) attribute checking of pointer components in ASSOCIATE constructs

IanH
Honored Contributor III
924 Views

(This feels a bit familiar, so maybe I've seen or reported it before.)

ifort complains when the target of a pointer component of a base object with the INTENT(IN) attribute is used as the selector in an associate construct and the associate name is then is defined by argument association with an INTENT([IN]OUT) dummy argument.

PROGRAM p
  IMPLICIT NONE
  
  TYPE t
    INTEGER, POINTER :: ptr_comp
  END TYPE t
  
  INTEGER, TARGET :: a_pointer_target
  TYPE(t) :: a
  
  a%ptr_comp => a_pointer_target
  
  CALL proc(a)
CONTAINS
  SUBROUTINE proc(arg)
    TYPE(t), INTENT(IN) :: arg
    
    ! 6.4.2p5 A /data-ref/ with more than one /part-ref/ is a subobject of 
    ! its base object if non of the /part-name/s, except for possibly the 
    ! rightmost, are pointers.  If the rightmost /part-name/ is the only 
    ! pointer, then the /data-ref/ is a subobject of its base object in 
    ! context that pertain to its pointer association status but not in 
    ! any other contexts.
    !
    ! 16.5.1.6p3: The associate name is associated with the target of the 
    ! pointer...
    !
    ! See also note 5.16.
    !
    ! As x is associated with the target of the pointer, it is associated 
    ! with something that is not a subobject of arg, and hence that thing 
    ! does not have the INTENT(IN) attribute.
    ASSOCIATE(x => arg%ptr_comp)
      CALL define(x)    ! ifort 15.0.0 - error #6780: A dummy argument 
                        ! with the INTENT(IN) attribute shall not be 
                        ! defined nor become undefined.   
    END ASSOCIATE
  END SUBROUTINE proc
  
  SUBROUTINE define(i)
    INTEGER, INTENT(OUT) :: i
    i = 6
  END SUBROUTINE define
END PROGRAM p

 

>ifort /check:all /warn:all /standard-semantics "2014-10-13 associate-intent.f90"
Intel(R) Visual Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 15.0.0.108 Build 20140726
Copyright (C) 1985-2014 Intel Corporation.  All rights reserved.

2014-10-13 associate-intent.f90(34): error #6780: A dummy argument with the INTENT(IN) attribute shall not be defined nor become undefined.   
      CALL define(x)    ! ifort 15.0.0 - error #6780: A dummy argument
------------------^
compilation aborted for 2014-10-13 associate-intent.f90 (code 1)

 

0 Kudos
1 Reply
Steven_L_Intel1
Employee
924 Views

This is the same as https://software.intel.com/en-us/forums/topic/516612 and should be fixed in Update 1.

0 Kudos
Reply