To: J3 Members J3/16-271 From: Van Snyder Subject: Comments on Clause 15 References: 16-007r2 Date: 2016 September 30 1. Edits -------- [299:20+ 15.2.2.2p0+] Would be easier to understand if p4 were first. Move [299:28-29 15.2.2.2p4] to [299+20+] [302:22+ R1506+] Insert a blank line between syntax rules R1506 and R1507. Probably remove \\ after final } in R1506. [302:34-39 R1502] Could be significantly simplified. Replace C1502: "C1502 (R1501) If the inlcudes a , the shall specify exactly the same , except if one is .LT., .LE., .GT., .GE., .EQ., or .NE., the other is permitted to be the corresponding operator <, <=, >, >=, --, or /=, respectively." [303:5-6 C1505] C1505 does not specify the same requirements as 15.7. Replace C1505: "C1505 (R1505) An for a pure procedure shall specify an interface that meets the requirements of 15.7." [311:16,31 C1527, 15.4.3.7p5] We usually use the form "NAME=" or "a NAME= specifier" (for various values of "NAME". Remove "a" before "NAME=" twice. [313:6 C1530] C1530 cannot constrain a in a to designate a function. All it can do is constrain against it designating a subroutine. Replace C1530: "C1530 (R1521) The shall not designate a procedure known to be a subroutine." [131:9 C1532] C1530 cannot constrain a in a to designate a subroutine. All it can do is constrain against it designating a function. Replace C1532: "C1532 (R1522) The shall not designate a procedure known to be a function." [313:16+ C1536+] To replace the requirement lost by revising C1530 and C1532, replace their original text here as ordinary normative text (not constraints) in a new paragraph: "The in a shall designate a function. The in a shall designate a subroutine." [314:1 C1540] Delete "used as" or replace "be used" with "appear". [317:14-15 15.5.2.4p4] Replace the comma after kind with "and". After "dummy argument" insert "is not assumed, ". [321:1-2 15.5.2.7p5] Append 15.5.2.7p5 to the end of 15.5.2.7p2. [322:7,14 15.5.2.9p2,3] Insert "effective" after "corresponding" twice. [322:7-8 15.5.2.9p2] After "shall be a function" replace the comma with "or". Delete ", or dummy procedure" {simplification possible because of the insertion of "effective" above}. [322:14 15.5.2.9p3] After "shall be a subroutine" replace the comma with "or". Delete ", or dummy procedure" {simplification possible because of the insertion of "effective" above}. [322:29-30 15.5.2.11p1] Delete ", a default character scalar,". Replace "with the C" with "with default or C" {simplification}. [322:34 15.5.2.11p2] Delete "default character or". Replace "with the C" with "with default or C" {simplification}. [322:39 15.5.2.11p3] Delete "default character or". Replace "with the C" with "with default or C" {simplification}. [325 NOTE 15.37] Normative text appears in both paragraphs. Editor's choice how to reword it. [325 NOTE 15.38] Replace "This restriction" with "The restriction described in NOTE 15.37" (or combine the two notes). [328:6 15.5.5.3p1] Append "then" after the comma {If A then if B... reads better than If A if B...}. [331:3-4 C1564] C1564 is entirely subsumed by C1562. Delete C1564. [330:34-331:6 R1531,C1561-C1563,C1565] R1531, C1561-C1563, and C1565 would be clearer if they appeared after R1533. Move them to [331:10+ R1533+] [335:21 C1581] Insert "function" after "intrinsic". [337:end-2 NOTE 15.52] In the penultimate line, replace "used" with "possible". 2. Questions and comments without edits --------------------------------------- [317:30 - 318:10 15.5.2.4p9-10] A description of the case of both being contiguous seems to be needed here. [330:40 C1562] C1562 is ambiguous. Does the requirement "or that has the ALLOCATABLE or POINTER attribute apply to any argument, or just to CHARACTER arguments? [336:21,26 C1589,C1592] Function results are very much like INTENT(OUT) dummy arguments. Why is a polymorphic allocatable result prohibited, but a polymorphic allocatable INTENT(OUT) dummy argument is permitted. They both get finalized, and a polymorphic allocatable one might result in invoking an impure final subroutine. Should "allocatable" be inserted before "polymorphic" at [336:26 C1592]? [336:35 C1597] It seems that a variable updated by an atomic subroutine ought to have the VOLATILE attribute, else some image might be holding it in a cache while another one is trying to do an atomic operation on it. Does C1597 effectively prohibit the use of atomic subroutines in pure procedures? [337:21 C15101] Is there really a problem to allow an INQUIRE statement in a pure procedure? How about just prohibiting the PENDING= specifier in INQUIRE statements in pure procedures, so as not to cause a wait operation?