J3/14-161 To: J3 From: Van Snyder Subject: C1296 concerning pure procedures Date: 2014 May 29 Reference: 14-139r1 Issues ====== Item (4) in C1296 uses "pointer component at any level of component selection". Item (5) uses "has an ultimate pointer component". These should be the same. Item (5) in C1296 uses "SOURCE= clause". It should be "SOURCE= specifier". C1296 needs an additional item to prevent getting a pointer associated with a prohibited item by using C interop: (7) as the actual argument to the function C_LOC from the intrinsic module ISO_C_BINDING. We need a paragraph (can't be a constraint) that prohibits invoking the C_F_POINTER subroutine if the value of the CPTR argument is the C address of an object specified in the introductory paragraph of C1296, for the same reason. 14-139r1 explicitly references pointer association context in C1296 because it changes variable association context so as not to include pointer association context. Edits with respect to 14-007r1 ============================== [25:8-10] Replace "Except for ... 1539" with "Except as identified in this subclause, any standard-conforming Fortran 2008 program remains standard-conforming under this part of ISO/IEC 1539". [25:10+] Insert paragraphs: " Several features of Fortran 2003 have been deleted. These features are noted in Annex B.2. Use of these features is not permitted by this part of ISO/IEC 1539. " Fortran 2003 prohibited several objects from appearing in variable definition and related contexts in a pure subprogram, but did not prohibit them from being the argument to the C_LOC function from the ISO_C_BINDING intrinsic module, or prohibit the value of the CPTR argument to the C_F_POINTER subroutine from the ISO_C_BINDING intrinsic module to be the C address of one of those objects; these are not permitted by this part of ISO/IEC 1539. " [314:37 C1296(4)] Replace "clause" with "specifier" [314:37-38 C1296(4)] Replace "an ultimate pointer component" with "a pointer component at any level of component selection". [314:38 C1296(5)] Delete "or" [315:1-2 C1296(6)] Delete "with INTENT (OUT) or INTENT (INOUT)" because it's covered by 16.6.7 "Variable definition context" in C1296(1). [315:2 C1296(6)] Replace the full stop with ", or" [315:2+ C1296(6)+] Insert a list item " (7) as the actual argument to the function C_LOC from the ISO_C_BINDING intrinsic module. " [315:11+] Add a paragraph " In a pure subprogram, the value of the CPTR argument to the C_F_POINTER subroutine from the ISO_C_BINDING intrinsic module shall not be the C address of an object that is \obs{in common} or accessed by host or use association, is a dummy argument with the INTENT(IN) attribute, is a coindexed object, or is an object that is storage associated with any such object. "