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 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:
$ lfortran --version
LFortran version: 0.12.0-491-gaf48ff273
Platform: macOS
Default target: x86_64-apple-darwin20.3.0Directory: tests/programs/numerics
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
Pure Fortran sin(x) implementation |
✅ | ✅ | ✅ | ✅ | ✅ | t01_sin_implementation.f90 |
Directory: tests/modules/basic
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
Basic modules |
✅ | ✅ | ✅ | ✅ | ✅ | t01.f90 |
Directory: tests/modules/procedures
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
Module functions |
✅ | ✅ | ✅ | ✅ | ✅ | t01.f90 |
Module subroutines |
✅ | ✅ | ✅ | ✅ | ✅ | t02.f90 |
Nested subroutines |
✅ | ✅ | ✅ | ✅ | ✅ | t03.f90 |
Directory: tests/expressions/arit
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
+,-,*,/,** |
✅ | ✅ | ✅ | ✅ | ✅ | basic_operations.f90 |
Directory: tests/expressions/integers
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
integers |
✅ | ✅ | ✅ | ✅ | ✅ | integer_kind.f90 |
relational operations |
✅ | ✅ | ✅ | ✅ | ✅ | t01_rel_operations.f90 |
logical operations |
✅ | ✅ | ✅ | ✅ | ✅ | t02_logical_operations.f90 |
Directory: tests/expressions/reals
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
single/double reals |
✅ | ✅ | ✅ | ✅ | ✅ | real_kind.f90 |
defined operator |
✅ | ❌ | ❌ | ❌ | ❌ | t01_def_op.f90 |
Directory: tests/expressions/complex
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | complex_kind.f90 |
Directory: tests/expressions/character
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
character |
✅ | ✅ | ✅ | ✅ | ✅ | t01_character.f90 |
string concatenation |
✅ | ✅ | ✅ | ✅ | ✅ | t02_concat_operation.f90 |
Directory: tests/expressions/derived_type
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
basic derived types |
✅ | ✅ | ✅ | ✅ | ✅ | t01_derived_type.f90 |
Directory: tests/statements/allocate
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
allocate statement |
✅ | ✅ | ✅ | ✅ | ✅ | t01.f90 |
Directory: tests/statements/block
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
block statement |
✅ | ❌ | ❌ | ❌ | ❌ | t01.f90 |
Directory: tests/statements/goto
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
computed go-to statement |
✅ | ❌ | ❌ | ❌ | ❌ | t01.f90 |
go-to statement |
✅ | ❌ | ❌ | ❌ | ❌ | t02.f90 |
Directory: tests/statements/if
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
Test .false. |
✅ | ✅ | ✅ | ✅ | ✅ | if_01.f90 |
single line if statement |
✅ | ✅ | ✅ | ✅ | ✅ | if_02.f90 |
multi line if statement |
✅ | ✅ | ✅ | ✅ | ✅ | if_03.f90 |
nested if statements |
✅ | ✅ | ✅ | ✅ | ✅ | if_04.f90 |
Directory: tests/statements/while
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
Simple while loops |
✅ | ✅ | ✅ | ✅ | ✅ | while_01.f90 |
exit / cycle in while loops |
✅ | ✅ | ✅ | ✅ | ✅ | while_02.f90 |
Directory: tests/statements/print
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
Basic print |
✅ | ✅ | ✅ | ✅ | ✅ | t01.f90 |
Directory: tests/statements/file_io
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
open/read/write/close |
✅ | ✅ | ❌ | ❌ | ❌ | t01.f90 |
Directory: tests/intrinsic/abs
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ❌ | ❌ | ❌ | ❌ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/exp
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/log
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/sqrt
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ❌ | ❌ | ❌ | ❌ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/sin
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ❌ | ❌ | ❌ | ❌ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/cos
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/tan
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/sinh
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/cosh
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/tanh
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/asin
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/acos
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/atan
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
scalar single/double complex |
✅ | ✅ | ✅ | ✅ | ✅ | t02_scalar_complex.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/modulo
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ❌ | ❌ | ❌ | ❌ | t01_scalar_real.f90 |
array 1D single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/mod
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ❌ | ❌ | ❌ | ❌ | t01_scalar_real.f90 |
array 1D single/double real |
✅ | ❌ | ❌ | ❌ | ❌ | t03_array1d_real.f90 |
Directory: tests/intrinsic/min
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t01_scalar_real.f90 |
Directory: tests/intrinsic/max
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ❌ | ❌ | ❌ | t01_scalar_real.f90 |
Directory: tests/intrinsic/int
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ❌ | ❌ | ❌ | ❌ | t01_scalar_real.f90 |
Directory: tests/intrinsic/real
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ✅ | ✅ | ✅ | ✅ | t01_scalar_real.f90 |
Directory: tests/intrinsic/floor
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ❌ | ❌ | ❌ | ❌ | t01_scalar_real.f90 |
Directory: tests/intrinsic/nint
| Description | AST | ASR | LLVM | BIN | RUN | Filename |
|---|---|---|---|---|---|---|
scalar single/double real |
✅ | ❌ | ❌ | ❌ | ❌ | t01_scalar_real.f90 |