|
| 1 | +<!--===- docs/FortranStandardsSupport.md |
| 2 | + |
| 3 | + Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | + See https://llvm.org/LICENSE.txt for license information. |
| 5 | + SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 6 | + |
| 7 | +--> |
| 8 | + |
| 9 | +# Flang's Fortran standards support |
| 10 | + |
| 11 | +```{contents} |
| 12 | +--- |
| 13 | +local: |
| 14 | +--- |
| 15 | +``` |
| 16 | + |
| 17 | +This document summarizes Flang's Fortran standards support. The information is only provided as a guideline. The compiler emits |
| 18 | +TODOs/Not Yet Implemented messages for unimplemented features and that should be treated as the authoratative information. |
| 19 | +Standards support is provided upto Fortran 2008 for now. It will be later extended for Fortran 2018 and Fortran 2023. |
| 20 | + |
| 21 | +The standards support information is provided as a table with three columns that are self explanatory. The Status column uses |
| 22 | +the letters **P**, **Y**, **N** for the various implementation status. |
| 23 | +- **P** : When the implementation is incomplete for a few cases |
| 24 | +- **Y** : When the implementation is complete |
| 25 | +- **N** : When the implementation is absent |
| 26 | + |
| 27 | +Note 1 : No distinction is made between the support in the Parser/Semantics and MLIR or Lowering support. |
| 28 | +Note 2 : Besides the features listed below a few intrinsics like MIN/MAX are not supported for a few cases with CHARACTER type. |
| 29 | + |
| 30 | +## Fortran 77 |
| 31 | +All features are supported. |
| 32 | + |
| 33 | +## Fortran 90 |
| 34 | +All features are supported. |
| 35 | + |
| 36 | +## Fortran 95 |
| 37 | +All features are supported. |
| 38 | + |
| 39 | +## Fortran 2003 |
| 40 | +All features except those listed in the following table are supported. |
| 41 | + |
| 42 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 43 | +| Feature | Status | Comments | |
| 44 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 45 | +| Parameterized Derived Types | P | PDT with length type is not supported. | |
| 46 | +| | | See [Proposal](ParameterizedDerivedTypes.md) | |
| 47 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 48 | +| Assignment to allocatable | P | Assignment to whole allocatable in FORALL is not | |
| 49 | +| | | implemented. | |
| 50 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 51 | +| Pointer Assignment | P | Polymorphic assignment in FORALL is not implemented | |
| 52 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 53 | +| The VOLATILE attribute | P | Volatile in procedure interfaces is not implemented | |
| 54 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 55 | +| Asynchronous input/output | P | IO will happen synchronously | |
| 56 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 57 | + |
| 58 | +## Fortran 2008 |
| 59 | +All features except those listed in the following table are supported. |
| 60 | + |
| 61 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 62 | +| Feature | Status | Comments | |
| 63 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 64 | +| Coarrays | N | Lowering and runtime support is not implemented | |
| 65 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 66 | +| do concurrent | P | Sequential execution works. Parallel support in progress| |
| 67 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 68 | +| Internal procedure as an actual argument or pointer target | Y | Current implementation requires stack to be executable. | |
| 69 | +| | | See [Proposal](InternalProcedureTrampolines.md) | |
| 70 | +|------------------------------------------------------------|--------|---------------------------------------------------------| |
| 71 | + |
| 72 | +## Fortran 2018 |
| 73 | +TBD |
| 74 | + |
| 75 | +## Fortran 2023 |
| 76 | +TBD |
0 commit comments