Skip to content
Merged
119 changes: 119 additions & 0 deletions flang/docs/FortranStandardsSupport.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
<!--===- docs/FortranStandardsSupport.md

Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
See https://llvm.org/LICENSE.txt for license information.
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

-->

# Flang Fortran Standards Support

```{contents}
---
local:
---
```

This document summarizes Fortran standards support in Flang. The information is only provided as a guideline. The
TODOs/Not Yet Implemented messages emitted by the compiler for unimplemented features should be treated as authoritative.

The standards support information is provided as a table with three columns that are self explanatory. No distinction is
made between the support in the Parser/Semantics and MLIR or Lowering support. The Status column uses
the letters **P**, **Y**, **N** for the implementation status:
- **P** : When the implementation is incomplete for a few cases
- **Y** : When the implementation is complete
- **N** : When the implementation is absent
Copy link
Contributor

@h-vetinari h-vetinari Apr 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still think we should make this easier for readers (explain the letters, order them by degree of completion)

Suggested change
the letters **P**, **Y**, **N** for the implementation status:
- **P** : When the implementation is incomplete for a few cases
- **Y** : When the implementation is complete
- **N** : When the implementation is absent
the letters **Y**, **P**, **N** for the implementation status:
- **Y** (Yes): When the implementation is complete
- **P** (Partial): When the implementation is incomplete
- **N** (No): When the implementation is absent

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. The following format was used.

- **Y** : Yes. When the implementation is complete


There is no distinction made between support in the Parser/Semantics and the MLIR or Lowering stages.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This sentence is now repeated (just above the P/Y/N there's an equivalent one).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Removed the former occurence.


Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since all the contents in the first three sections are the same, I suggest to consolidate to the FORTRAN77, Fortran 90 and Fortran 95 section. In addition, if we take Michael's suggestion to populate the Fortran 2018 and Fortran 2023 sections, I suggest to re-order the sections to start with Fortran 2023 first. I think people are more interested in which newer features that flang support nowadays.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have reorganized in descending order of standards. I do not have entries for 2018 and 2023 now. If it is OK, we can add that in subsequent PRs.
I have not consolidated FORTRAN77, Fortran 90 and Fortran 95. I can do so before submitting if there are no reports of unsupported features in this review.

Note: The two major missing features in Flang at present are coarrays and parameterized derived types (PDTs) with length type parameters.


## Fortran 2023
See [document](F202X.md) for a brief discussion about the new features in Fortran 2023. The following table summarizes the
status of all important Fortran 2023 features. The table entries are based on the document [The new features in Fortran 2023](https://wg5-fortran.org/N2201-N2250/N2212.pdf).

| Feature | Status | Comments |
|------------------------------------------------------------|--------|---------------------------------------------------------|
| Allow longer statement lines and overall statement length | Y | |
| Automatic allocation of lengths of character variables | N | |
| The specifiers typeof and classof | N | |
| Conditional expressions and arguments | N | |
| More use of boz constants | P | All usages other than enum are supported |
| Intrinsics for extracting tokens from a string | N | |
| Intrinsics for Trig functions that work in degrees | N | |
| Intrinsics for Trig functions that work in half revolutions| N | |
| Changes to system_clock | N | |
| Changes for conformance with the new IEEE standard | Y | |
| Additional named constants to specify kinds | Y | |
| Extensions for c_f_pointer intrinsic | N | |
| Procedures for converting between fortran and c strings | N | |
| The at edit descriptor | N | |
| Control over leading zeros in output of real values | N | |
| Extensions for Namelist | N | |
| Allow an object of a type with a coarray ultimate component to be an array or allocatable | N | |
| Put with Notify | N | |
| Error conditions in collectives | N | |
| Simple procedures | N | |
| Using integer arrays to specify subscripts | N | |
| Using integer arrays to specify rank and bound of an array | N | |
| Using an integer constant to specify rank | N | |
| Reduction specifier for do concurrent | P | Syntax is accepted |
| Enumerations | N | |

## Fortran 2018
All features except those listed in the following table are supported. Almost all of the unsupported features are related to
the multi-image execution. The table entries are based on the document [The new features in Fortran 2018](https://wg5-fortran.org/N2151-N2200/ISO-IECJTC1-SC22-WG5_N2161_The_New_Features_of_Fortran_2018.pdf).

| Feature | Status | Comments |
|------------------------------------------------------------|--------|---------------------------------------------------------|
| Asynchronous communication | P | Syntax is accepted |
| Teams | N | Multi-image/Coarray feature |
| Image failure | P | Multi-image/Coarray feature. stat_failed_image is added |
| Form team statement | N | Multi-image/Coarray feature |
| Change team construct | N | Multi-image/Coarray feature |
| Coarrays allocated in teams | N | Multi-image/Coarray feature |
| Critical construct | N | Multi-image/Coarray feature |
| Lock and unlock statements | N | Multi-image/Coarray feature |
| Events | N | Multi-image/Coarray feature |
| Sync team construct | N | Multi-image/Coarray feature |
| Image selectors | N | Multi-image/Coarray feature |
| Intrinsic functions get_team and team_number | N | Multi-image/Coarray feature |
| Intrinsic function image_index | N | Multi-image/Coarray feature |
| Intrinsic function num_images | N | Multi-image/Coarray feature |
| Intrinsic function this_image | N | Multi-image/Coarray feature |
| Intrinsic move_alloc extensions | P | Multi-image/Coarray feature |
| Detecting failed and stopped images | N | Multi-image/Coarray feature |
| Collective subroutines | N | Multi-image/Coarray feature |
| New and enhanced atomic subroutines | N | Multi-image/Coarray feature |
| Failed images and stat= specifiers | N | Multi-image/Coarray feature |
| Intrinsic function coshape | N | Multi-image/Coarray feature |

## Fortran 2008
All features except those listed in the following table are supported.

| Feature | Status | Comments |
|------------------------------------------------------------|--------|---------------------------------------------------------|
| Coarrays | N | Lowering and runtime support is not implemented |
| do concurrent | P | Sequential execution works. Parallel support in progress|
| Internal procedure as an actual argument or pointer target | Y | Current implementation requires stack to be executable. See [Proposal](InternalProcedureTrampolines.md) |

## Fortran 2003
All features except those listed in the following table are supported.

| Feature | Status | Comments |
|------------------------------------------------------------|--------|---------------------------------------------------------|
| Parameterized Derived Types | P | PDT with length type parameters is not supported. See [Proposal](ParameterizedDerivedTypes.md) |
| Assignment to allocatable | P | Assignment to whole allocatable in FORALL is not implemented |
| The VOLATILE attribute | P | VOLATILE in procedure interfaces is not implemented |
| Asynchronous input/output | P | IO will happen synchronously |
| MIN/MAX extensions for CHARACTER | P | Some variants are not supported |

## Fortran 95
All features are supported.

## Fortran 90
All features are supported.

## FORTRAN 77
All features are supported.
1 change: 1 addition & 0 deletions flang/docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ on how to get in touch with us and to learn more about the current status.
C++style
DesignGuideline
FortranForCProgrammers
FortranStandardsSupport
GettingInvolved
GettingStarted
ImplementingASemanticCheck
Expand Down
Loading