ISO/IEC 1539-1:2018/Cor 2:2023
(Corrigendum)Information technology - Programming languages - Fortran - Part 1: Base language - Technical Corrigendum 2
Information technology - Programming languages - Fortran - Part 1: Base language - Technical Corrigendum 2
Technologies de l'information — Langages de programmation — Fortran — Partie 1: Langage de base — Technical Corrigendum 2
General Information
- Status
- Published
- Publication Date
- 08-Mar-2023
- Current Stage
- 9599 - Withdrawal of International Standard
- Start Date
- 17-Nov-2023
- Completion Date
- 30-Oct-2025
Relations
- Effective Date
- 03-Sep-2022
- Effective Date
- 11-Feb-2023
Overview
ISO/IEC 1539-1:2018/Cor.2:2023 is Technical Corrigendum 2 to the ISO/IEC 1539-1:2018 Fortran base language standard. It provides corrections, clarifications and small normative changes to the Fortran language definition-covering coarray semantics, intrinsic procedures, interoperability with C, formatted I/O syntax, constraints for pure procedures, and several intrinsic-procedure and descriptor behaviors. This corrigendum is intended to tighten language rules to improve portability, compiler conformance, and predictable behavior for parallel and interoperable Fortran code.
Key Topics and Technical Requirements
- Coarray semantics and constraints
- Clarifies correspondence of coarrays when passed as dummy arguments, ultimate components, or unsaved local variables in recursive procedures.
- Adds rules for ALLOCATE on coarrays and cross-image definitions/references.
- Interoperability with C (ISO_C_BINDING)
- Adds C_F_PROCPOINTER to lists of interoperable procedures.
- Restricts use of C_FUNLOC in pure subprograms when argument is impure.
- Adjusts requirements for C descriptors (elem_len, base_addr) for character pointers.
- Pure and elemental procedure restrictions
- New constraints on types with default initialization and pointer-to-target defaults for pure subprogram entities.
- Changes labeling of elemental classes to “pure elemental” where applicable.
- Formatted I/O and lexical syntax
- Updates format-token tables (E/D/EN/ES forms) to refine allowed forms (e.g., Ew.d with w > 0, new D0.d row).
- Adds constraint prohibiting SIZE= specifier in list-directed or namelist input.
- Intrinsic procedures and argument constraints
- Tightens argument type/kind and allocatable/coarray/pointer restrictions for several intrinsics (e.g., noncoarray/nonpointer requirements).
- Examples and normative text updates
- Replaces sample program in Annex C illustrating recoverable-simulation usage.
Applications
- Fortran compiler implementers: apply the corrigendum to update parser, semantic checks, code generation, and conformance test suites.
- Static analysis and tooling vendors: adjust diagnostics for coarray, descriptor and pure-procedure constraints.
- HPC developers and library authors: rely on clarified coarray and interoperability rules to write portable parallel code.
- Language standards bodies and educators: use updated normative text for teaching and for drafting further amendments.
Who should use this standard
- Compiler and toolchain developers
- High-performance computing (HPC) application engineers using coarrays
- Developers of Fortran–C interoperable libraries
- QA teams producing conformance tests and certification
Related standards
- ISO/IEC 1539-1:2018 (Fortran - Part 1: Base language) and other parts of the ISO/IEC 1539 Fortran series (refer to main standard for full context).
ISO/IEC 1539-1:2018/Cor 2:2023 - Information technology — Programming languages — Fortran — Part 1: Base language — Technical Corrigendum 2 Released:9. 03. 2023
REDLINE ISO/IEC 1539-1:2018/Cor 2:2023 - Information technology — Programming languages — Fortran — Part 1: Base language — Technical Corrigendum 2 Released:9. 03. 2023
Frequently Asked Questions
ISO/IEC 1539-1:2018/Cor 2:2023 is a standard published by the International Organization for Standardization (ISO). Its full title is "Information technology - Programming languages - Fortran - Part 1: Base language - Technical Corrigendum 2". This standard covers: Information technology - Programming languages - Fortran - Part 1: Base language - Technical Corrigendum 2
Information technology - Programming languages - Fortran - Part 1: Base language - Technical Corrigendum 2
ISO/IEC 1539-1:2018/Cor 2:2023 is classified under the following ICS (International Classification for Standards) categories: 35.060 - Languages used in information technology. The ICS classification helps identify the subject area and facilitates finding related standards.
ISO/IEC 1539-1:2018/Cor 2:2023 has the following relationships with other standards: It is inter standard links to ISO/IEC 1539-1:2018, ISO/IEC 1539-1:2023. Understanding these relationships helps ensure you are using the most current and applicable version of the standard.
You can purchase ISO/IEC 1539-1:2018/Cor 2:2023 directly from iTeh Standards. The document is available in PDF format and is delivered instantly after payment. Add the standard to your cart and complete the secure checkout process. iTeh Standards is an authorized distributor of ISO standards.
Standards Content (Sample)
ISO/IEC 1539-1:2018/Cor.2:2023(E)
INTERNATIONAL STANDARD ISO/IEC 1539-1:2018
TECHNICAL CORRIGENDUM 2
Published 2023-03
INTERNATIONAL ORGANIZATION FOR STANDARDIZATION • МЕЖДУНАРОДНАЯ ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦИИ • ORGANISATION INTERNATIONALE DE NORMALISATION
INTERNATIONAL ELECTROTECHNICAL COMMISSION • МЕЖДУНАРОДНАЯ ЭЛЕКТРОТЕХНИЧЕСКАЯ КОМИССИЯ • COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE
Information technology — Programming languages — Fortran —
Part 1: Base language
TECHNICAL CORRIGENDUM 2
Technologies de l'information — Langages de programmation — Fortran — Partie 1: Langage de
base
RECTIFICATIF TECHNIQUE 2
Technical Corrigendum 2 to ISO/IEC 1539-1:2018 was prepared by Joint Technical Committee
ISO/IEC JTC 1, Information technology, Subcommittee SC 22, Programming languages, their environments
and system software interfaces.
ICS 35.060 Ref. No. ISO/IEC 1539-1:2018/Cor.2:2023(E)
© ISO/IEC 2023 – All rights reserved
Published in Switzerland
ISO/IEC 1539-1:2018/Cor.2:2023(E)
Blank page
ii © ISO/IEC 2023 – All rights reserved
ISO/IEC 1539-1:2018/Cor.2:2023(E)
Information technology — Programming languages — Fortran —
Part 1: Base language
TECHNICAL CORRIGENDUM 2
Introduction
In the second paragraph, in the tenth sentence of bullet point “Intrinsic procedures and modules”, after
“C_F_POINTER” add “and C_F_PROCPOINTER”.
In the second paragraph, in the last sentence of bullet point “Program units and procedures”, after
“dummy argument” add “, or a coarray ultimate component of a dummy argument,”.
5.4.7
Append a new sentence to the second paragraph:
“If a coarray is an unsaved local variable of a recursive procedure, its corresponding
coarrays are the ones at the same depth of recursion of that procedure on each image.”
9.7.1.2
Delete the last sentence in the third paragraph, that is “If the coarray … on those images.”, and
insert the following three sentences:
“If the coarray is a dummy argument, the ultimate arguments (15.5.2.3) on those images
shall be corresponding coarrays. If the coarray is an ultimate component of a dummy
argument, the ultimate arguments on those images shall be declared with the same
name in the same scoping unit. If the coarray is an unsaved local variable of a recursive
procedure, the execution of the ALLOCATE statement shall be at the same depth of
recursion of that procedure on every active image in the current team.”
10.1.11
At the end of the sixth paragraph, add the sentence:
“If a specification inquiry depends on the type of an object of derived type, that type
shall be previously defined.”
11.1.7.2
In the first sentence of constraint C1128, after “of finalizable type,” insert “shall not have an
allocatable ultimate component,”
12.6.2.1
After constraint C1213 insert a new constraint:
“C1213a A SIZE= specifier shall not appear in a list-directed or namelist input
statement.”
13.7.2.3.3
In table 13.1:
change row 1, column 1 from “Ew.d” to “Ew.d with w > 0”;
change row 3, column 1 from “Ew.d E0” to “Ew.d E0 or E0.d”;
© ISO/IEC 2023 – All rights reserved 1
ISO/IEC 1539-1:2018/Cor.2:2023(E)
change row 4, column 1 from “Dw.d” to “Dw.d with w > 0”;
add new row 5 with cells:
column 1: “D0.d”
column 2: “any”
column 3: “D±z z z or E±z z z ”
1 2… s 1 2… s
13.7.2.3.4
In Table 13.2:
change row 1, column 1 from “ENw.d” to “ENw.d with w > 0”;
change row 3, column 1 from “ENw.d E0” to “ENw.d E0 or EN0.d”;
13.7.2.3.5
In Table 13.3:
change row 1, column 1 from “ESw.d” to “ESw.d with w > 0”;
change row 3, column 1 from “ESw.d E0” to “ESw.d E0 or ES0.d”;
15.4.3.4.2
In the final sentence of the first paragraph, after “(10.1.5)” insert “, treating a CLASS(*) dummy
argument as not differing in type or kind”.
15.5.2.11
In the second paragraph of the subclause delete the second and third sentences, that is “If the
dummy argument … array element order”. Insert a new (third) paragraph:
“If the dummy argument is not of type character with default or C character kind:
• if the actual argument is an array expression, the element sequence consists of the
elements in array element order;
• if the actual argument is an array element designator of a simply contiguous array, the
element sequence consists of that array element and each element that follows it in array
element order;
• otherwise, if the actual argument is scalar, the element sequence consists of that scalar.”
In the second bullet point of the third (now fourth) paragraph, after “substring designator”
insert “of a simply contiguous array”. In the third bullet point change “if the actual” to
“otherwise, if the actual” and delete “and not an array . designator”.
15.5.2.13
In the first paragraph, at the end of item (3) (c) delete “or”.
At the end of item (3) (d) replace “image.” by “image, or
(e) the dummy argument has a coarray ultimate component and the action is a coindexed
definition of the corresponding coarray by a different image.”.
In the first paragraph, at the end of item (4) (c) delete “or”.
At the end of item (4) (d) replace “image.” by “image, or
(e) the dummy argument has a coarray ultimate component and the reference is a
coindexed reference of the corresponding coarray by a different image.”.
2 © ISO/IEC 2023 – All rights reserved
ISO/IEC 1539-1:2018/Cor.2:2023(E)
Replace the first sentence of NOTE 5 by:
“The exceptions to the aliasing restrictions for dummy arguments that are coarrays or
have coarray ultimate components enable cross-image access while the procedure is
executing.”
15.7
In the second paragraph, following NOTE 1 and before constraint C1590, add a new constraint:
C1589a A named local entity or construct entity of a pure subprogram shall not be of a
type that has default initialization of a data pointer component to a target at
any level of component selection.
In the second paragraph, following constraint C1599, add a new constraint:
C1599a A reference to the function C_FUNLOC from the intrinsic module
ISO_C_BINDING shall not appear in a pure subprogram if its argument is
impure.
16.9.46
In paragraph 3, Arguments, in the first sentence of the description for argument A delete
“dynamic”.
In the second sentence, after “It shall not be” insert “polymorphic or”.
In the third paragraph, at the end of the final sentence of the description for argument A add:
“, including (re)allocation of any allocatable ultimate component, and setting the dynamic type
of any polymorphic allocatable ultimate component”.
16.9.49
In paragraph 3, Arguments, after the first sentence of the description for argument A add the
new sentence:
“It shall not be of a type with an ultimate component that is allocatable or a pointer.”
In the same paragraph, in the first sentence of the description for argument OPERATION after
“nonallocatable, ” add “noncoarray, ”.
...
ISO/IEC 1539-1:2018/Cor.2:2023(E)
ISO/IEC/JTC1/SC22/WG5-N2210
ISO/IEC 1539-1:2018 - TECHNICAL CORRIGENDUM 2
INTERNATIONAL STANDARD ISO/IEC 1539-1:2018
TECHNICAL CORRIGENDUM 2
Published 2023-03
INTERNATIONAL ORGANIZATION FOR STANDARDIZATION • МЕЖДУНАРОДНАЯ ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦИИ • ORGANISATION INTERNATIONALE DE NORMALISATION
INTERNATIONAL ELECTROTECHNICAL COMMISSION • МЕЖДУНАРОДНАЯ ЭЛЕКТРОТЕХНИЧЕСКАЯ КОМИССИЯ • COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE
Information technology — Programming languages — Fortran —
Part 1: Base language
TECHNICAL CORRIGENDUM 2
Technologies de l'information — Langages de programmation — Fortran — Partie 1: Langage de
base
RECTIFICATIF TECHNIQUE 2
Technical Corrigendum 2 to ISO/IEC 1539-1:2018 was prepared by Joint Technical Committee
ISO/IEC JTC 1, Information technology, Subcommittee SC 22, Programming languages, their environments
and system software interfaces.
ICS 35.060 Ref. No. ISO/IEC 1539-1:2018/Cor.2:2023(E)
© ISO/IEC 2023 – All rights reserved
Published in Switzerland
ISO/IEC 1539-1:2018/Cor.2:2023(E)
Blank page
ii © ISO/IEC 2023 – All rights reserved
ISO/IEC 1539-1:2018/Cor.2:2023(E)
Information technology — Programming languages — Fortran —
Part 1: Base language
TECHNICAL CORRIGENDUM 2
Introduction
In the second paragraph, in the tenth sentence of bullet point “Intrinsic procedures and modules”, after
“C_F_POINTER” add “and C_F_PROCPOINTER”.
In the second paragraph, in the last sentence of bullet point “Program units and procedures”, after
“dummy argument” add “, or a coarray ultimate component of a dummy argument,”.
Subclause 5.4.7
Append a new sentence to the second paragraph:
“If a coarray is an unsaved local variable of a recursive procedure, its corresponding
coarrays are the ones at the same depth of recursion of that procedure on each image.”
Subclause 9.7.1.2
Delete the last sentence in the third paragraph, that is “If the coarray … on those images.”, and
insert the following three sentences:
“If the coarray is a dummy argument, the ultimate arguments (15.5.2.3) on those images
shall be corresponding coarrays. If the coarray is an ultimate component of a dummy
argument, the ultimate arguments on those images shall be declared with the same
name in the same scoping unit. If the coarray is an unsaved local variable of a recursive
procedure, the execution of the ALLOCATE statement shall be at the same depth of
recursion of that procedure on every active image in the current team.”
Subclause 10.1.11
At the end of the sixth paragraph, add the sentence:
“If a specification inquiry depends on the type of an object of derived type, that type
shall be previously defined.”
Subclause 11.1.7.2
In the first sentence of constraint C1128, after “of finalizable type,” insert “shall not have an
allocatable ultimate component,”
Subclause 12.6.2.1
After constraint C1213 insert a new constraint:
“C1213a A SIZE= specifier shall not appear in a list-directed or namelist input
statement.”
Subclause 13.7.2.3.3
In table 13.1:
change row 1, column 1 from “Ew.d” to “Ew.d with w > 0”;
change row 3, column 1 from “Ew.d E0” to “Ew.d E0 or E0.d”;
© ISO/IEC 2023 – All rights reserved 1
ISO/IEC 1539-1:2018/Cor.2:2023(E)
change row 4, column 1 from “Dw.d” to “Dw.d with w > 0”;
add new row 5 with cells:
column 1: “D0.d”
column 2: “any”
column 3: “D±z z z or E±z z z ”
1 2… s 1 2… s
Subclause 13.7.2.3.4
In Table 13.2:
change row 1, column 1 from “ENw.d” to “ENw.d with w > 0”;
change row 3, column 1 from “ENw.d E0” to “ENw.d E0 or EN0.d”;
Subclause 13.7.2.3.5
In Table 13.3:
change row 1, column 1 from “ESw.d” to “ESw.d with w > 0”;
change row 3, column 1 from “ESw.d E0” to “ESw.d E0 or ES0.d”;
Subclause 15.4.3.4.2
In the final sentence of the first paragraph, after “(10.1.5)” insert “, treating a CLASS(*) dummy
argument as not differing in type or kind”.
Subclause 15.5.2.11
In the second paragraph of the subclause delete the second and third sentences, that is “If the
dummy argument … array element order”. Insert a new (third) paragraph:
“If the dummy argument is not of type character with default or C character kind:
• if the actual argument is an array expression, the element sequence consists of the
elements in array element order;
• if the actual argument is an array element designator of a simply contiguous array, the
element sequence consists of that array element and each element that follows it in array
element order;
• otherwise, if the actual argument is scalar, the element sequence consists of that scalar.”
In the second bullet point of the third (now fourth) paragraph, after “substring designator”
insert “of a simply contiguous array”. In the third bullet point change “if the actual” to
“otherwise, if the actual” and delete “and not an array . designator”.
Subclause 15.5.2.13
In the first paragraph, at the end of item (3) (c) delete “or”.
At the end of item (3) (d) replace “image.” by “image, or
(e) the dummy argument has a coarray ultimate component and the action is a coindexed
definition of the corresponding coarray by a different image.”.
In the first paragraph, at the end of item (4) (c) delete “or”.
At the end of item (4) (d) replace “image.” by “image, or
(e) the dummy argument has a coarray ultimate component and the reference is a
coindexed reference of the corresponding coarray by a different image.”.
2 © ISO/IEC 2023 – All rights reserved
ISO/IEC 1539-1:2018/Cor.2:2023(E)
Replace the first sentence of NOTE 5 by:
“The exceptions to the aliasing restrictions for dummy arguments that are coarrays or
have coarray ultimate components enable cross-image access while the procedure is
executing.”
Subclause 15.7
In the second paragraph, following NOTE 1 and before constraint C1590, add a new constraint:
C1589a A named local entity or construct entity of a pure subprogram shall not be of a
type that has default initialization of a data pointer component to a target at
any level of component selection.
In the second paragraph, following constraint C1599, add a new constraint:
C1599a A reference to the function C_FUNLOC from the intrinsic module
ISO_C_BINDING shall not appear in a pure subprogram if its argument is
impure.
Subclause 16.9.46
In paragraph 3, Arguments, in the first sentence of the description for argument A delete
“dynamic”.
In the second sentence, after “It shall not be” insert “polymorphic or”.
In the third paragraph, at the end of the final sentence of the description for argument A add:
“, including (re)allocation of any allocatable ultimate component, and setting the dynamic type
of any polymorphic allocatable ultimate component”.
Subclause 16.9.49
In paragraph 3, Arguments, after the first sentence of the description for argument A add the
new sentence:
“It shall not be of a type with an ultimate component that is allocatable or a pointer.”
In the same paragraph, in the first sentence of the description for argument OPERATION after
“nonallocatable, ” add “noncoarray, ”.
Subclause
...














Questions, Comments and Discussion
Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.
Loading comments...