[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/certik/lpython/main/doc/src/progress.md [Back]  [Original]

# LFortran Development Status

This page documents what Fortran features are supported by LFortran. For each
feature we list a short description, the filename with the test and current
status for each parts of the compiler:

* AST: The code can be parsed to AST (`lfortran --show-ast test.f90`)
* ASR: The code can be transformed to ASR (`lfortran --show-asr test.f90`)
* LLVM: LFortran can generate LLVM IR (`lfortran --show-llvm test.f90`)
* BIN: The LLVM IR can compile to a binary
* RUN: The binary runs without errors

If all are green it means the feature fully works and you can use it in your
codes. Otherwise you can see what the status is of each feature.

This page is generated automatically using the [Compiler
Tester](https://gitlab.com/lfortran/compiler_tester) repository which contains
all the Fortran tests and scripts to run LFortran to produce the tables below.
We are looking for contributors to contribute more tests. Our goal is to have a
comprehensive Fortran testsuite that can be used to test any Fortran compiler.


Testing the LFortran compiler version:

```console
$ lfortran --version
LFortran version: 0.12.0-491-gaf48ff273
Platform: macOS
Default target: x86_64-apple-darwin20.3.0
```

# Topics

## Full programs that compute something interesting

### Basic Numerics

Directory: `tests/programs/numerics`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `Pure Fortran sin(x) implementation` |   |   |    |   |   | [t01_sin_implementation.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/programs/numerics/t01_sin_implementation.f90) |


## Modules

### Basic Usage

Directory: `tests/modules/basic`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `Basic modules` |   |   |    |   |   | [t01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/modules/basic/t01.f90) |


### Module Functions and Subroutines

Directory: `tests/modules/procedures`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `Module functions` |   |   |    |   |   | [t01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/modules/procedures/t01.f90) |
| `Module subroutines` |   |   |    |   |   | [t02.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/modules/procedures/t02.f90) |
| `Nested subroutines` |   |   |    |   |   | [t03.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/modules/procedures/t03.f90) |


## Expressions

### Arithmetic Operations

Directory: `tests/expressions/arit`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `+,-,*,/,**` |   |   |    |   |   | [basic_operations.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/arit/basic_operations.f90) |


### Integers

Directory: `tests/expressions/integers`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `integers` |   |   |    |   |   | [integer_kind.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/integers/integer_kind.f90) |
| `relational operations` |   |   |    |   |   | [t01_rel_operations.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/integers/t01_rel_operations.f90) |
| `logical operations` |   |   |    |   |   | [t02_logical_operations.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/integers/t02_logical_operations.f90) |


### Real Numbers

Directory: `tests/expressions/reals`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `single/double reals` |   |   |    |   |   | [real_kind.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/reals/real_kind.f90) |
| `defined operator` |   |   |    |   |   | [t01_def_op.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/reals/t01_def_op.f90) |


### Complex Numbers

Directory: `tests/expressions/complex`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `single/double complex` |   |   |    |   |   | [complex_kind.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/complex/complex_kind.f90) |


### Strings

Directory: `tests/expressions/character`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `character` |   |   |    |   |   | [t01_character.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/character/t01_character.f90) |
| `string concatenation` |   |   |    |   |   | [t02_concat_operation.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/character/t02_concat_operation.f90) |


### Derived Types

Directory: `tests/expressions/derived_type`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `basic derived types` |   |   |    |   |   | [t01_derived_type.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/expressions/derived_type/t01_derived_type.f90) |


## Statements

### Allocate Statement

Directory: `tests/statements/allocate`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `allocate statement` |   |   |    |   |   | [t01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/allocate/t01.f90) |


### Block Statement

Directory: `tests/statements/block`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `block statement` |   |   |    |   |   | [t01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/block/t01.f90) |


### Goto Statement

Directory: `tests/statements/goto`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `computed go-to statement` |   |   |    |   |   | [t01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/goto/t01.f90) |
| `go-to statement` |   |   |    |   |   | [t02.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/goto/t02.f90) |


### If Statement

Directory: `tests/statements/if`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `Test .false.` |   |   |    |   |   | [if_01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/if/if_01.f90) |
| `single line if statement` |   |   |    |   |   | [if_02.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/if/if_02.f90) |
| `multi line if statement` |   |   |    |   |   | [if_03.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/if/if_03.f90) |
| `nested if statements` |   |   |    |   |   | [if_04.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/if/if_04.f90) |


### While Statement

Directory: `tests/statements/while`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `Simple while loops` |   |   |    |   |   | [while_01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/while/while_01.f90) |
| `exit / cycle in while loops` |   |   |    |   |   | [while_02.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/while/while_02.f90) |


### Print Statement

Directory: `tests/statements/print`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `Basic print` |   |   |    |   |   | [t01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/print/t01.f90) |


### Open, Read, Write, Close Statement

Directory: `tests/statements/file_io`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `open/read/write/close` |   |   |    |   |   | [t01.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/statements/file_io/t01.f90) |


## Intrinsic Functions

### abs

Directory: `tests/intrinsic/abs`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/abs/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/abs/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/abs/t03_array1d_real.f90) |


### exp

Directory: `tests/intrinsic/exp`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/exp/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/exp/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/exp/t03_array1d_real.f90) |


### log

Directory: `tests/intrinsic/log`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/log/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/log/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/log/t03_array1d_real.f90) |


### sqrt

Directory: `tests/intrinsic/sqrt`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sqrt/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sqrt/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sqrt/t03_array1d_real.f90) |


### sin

Directory: `tests/intrinsic/sin`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sin/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sin/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sin/t03_array1d_real.f90) |


### cos

Directory: `tests/intrinsic/cos`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/cos/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/cos/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/cos/t03_array1d_real.f90) |


### tan

Directory: `tests/intrinsic/tan`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/tan/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/tan/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/tan/t03_array1d_real.f90) |


### sinh

Directory: `tests/intrinsic/sinh`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sinh/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sinh/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/sinh/t03_array1d_real.f90) |


### cosh

Directory: `tests/intrinsic/cosh`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/cosh/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/cosh/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/cosh/t03_array1d_real.f90) |


### tanh

Directory: `tests/intrinsic/tanh`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/tanh/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/tanh/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/tanh/t03_array1d_real.f90) |


### asin

Directory: `tests/intrinsic/asin`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/asin/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/asin/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/asin/t03_array1d_real.f90) |


### acos

Directory: `tests/intrinsic/acos`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/acos/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/acos/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/acos/t03_array1d_real.f90) |


### atan

Directory: `tests/intrinsic/atan`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/atan/t01_scalar_real.f90) |
| `scalar single/double complex` |   |   |    |   |   | [t02_scalar_complex.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/atan/t02_scalar_complex.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/atan/t03_array1d_real.f90) |


### modulo

Directory: `tests/intrinsic/modulo`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/modulo/t01_scalar_real.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/modulo/t03_array1d_real.f90) |


### mod

Directory: `tests/intrinsic/mod`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/mod/t01_scalar_real.f90) |
| `array 1D single/double real` |   |   |    |   |   | [t03_array1d_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/mod/t03_array1d_real.f90) |


### min

Directory: `tests/intrinsic/min`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/min/t01_scalar_real.f90) |


### max

Directory: `tests/intrinsic/max`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/max/t01_scalar_real.f90) |


### int

Directory: `tests/intrinsic/int`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/int/t01_scalar_real.f90) |


### real

Directory: `tests/intrinsic/real`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/real/t01_scalar_real.f90) |


### floor

Directory: `tests/intrinsic/floor`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/floor/t01_scalar_real.f90) |


### nint

Directory: `tests/intrinsic/nint`

| Description | AST | ASR | LLVM | BIN | RUN | Filename |
| ----------- | --- | --- | ---- | --- | --- | -------- |
| `scalar single/double real` |   |   |    |   |   | [t01_scalar_real.f90](https://gitlab.com/lfortran/compiler_tester/-/blob/master/tests/intrinsic/nint/t01_scalar_real.f90) |



Web Proxy Viewer  |  New URL  |  Original Page