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 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.0

Topics

Full programs that compute something interesting

Basic Numerics

Directory: tests/programs/numerics

Описание

AST

ASR

LLVM

BIN

RUN

Filename

Pure Fortran sin(x) implementation

✅

✅

✅

✅

✅

t01_sin_implementation.f90

Модули

Basic Usage

Directory: tests/modules/basic

Описание

AST

ASR

LLVM

BIN

RUN

Filename

Basic modules

✅

✅

✅

✅

✅

t01.f90

Module Functions and Subroutines

Directory: tests/modules/procedures

Описание

AST

ASR

LLVM

BIN

RUN

Filename

Module functions

✅

✅

✅

✅

✅

t01.f90

Module subroutines

✅

✅

✅

✅

✅

t02.f90

Nested subroutines

✅

✅

✅

✅

✅

t03.f90

Выражения

Arithmetic Operations

Directory: tests/expressions/arit

Описание

AST

ASR

LLVM

BIN

RUN

Filename

+,-,*,/,**

✅

✅

✅

✅

✅

basic_operations.f90

Integers

Directory: tests/expressions/integers

Описание

AST

ASR

LLVM

BIN

RUN

Filename

integers

✅

✅

✅

✅

✅

integer_kind.f90

relational operations

✅

✅

✅

✅

✅

t01_rel_operations.f90

logical operations

✅

✅

✅

✅

✅

t02_logical_operations.f90

Real Numbers

Directory: tests/expressions/reals

Описание

AST

ASR

LLVM

BIN

RUN

Filename

single/double reals

✅

✅

✅

✅

✅

real_kind.f90

defined operator

✅

❌

❌

❌

❌

t01_def_op.f90

Complex Numbers

Directory: tests/expressions/complex

Описание

AST

ASR

LLVM

BIN

RUN

Filename

single/double complex

✅

✅

✅

✅

✅

complex_kind.f90

Strings

Directory: tests/expressions/character

Описание

AST

ASR

LLVM

BIN

RUN

Filename

character

✅

✅

✅

✅

✅

t01_character.f90

string concatenation

✅

✅

✅

✅

✅

t02_concat_operation.f90

Производные типы данных

Directory: tests/expressions/derived_type

Описание

AST

ASR

LLVM

BIN

RUN

Filename

basic derived types

✅

✅

✅

✅

✅

t01_derived_type.f90

Statements

Allocate Statement

Directory: tests/statements/allocate

Описание

AST

ASR

LLVM

BIN

RUN

Filename

allocate statement

✅

✅

✅

✅

✅

t01.f90

Block Statement

Directory: tests/statements/block

Описание

AST

ASR

LLVM

BIN

RUN

Filename

block statement

✅

❌

❌

❌

❌

t01.f90

Goto Statement

Directory: tests/statements/goto

Описание

AST

ASR

LLVM

BIN

RUN

Filename

computed go-to statement

✅

❌

❌

❌

❌

t01.f90

go-to statement

✅

❌

❌

❌

❌

t02.f90

If Statement

Directory: tests/statements/if

Описание

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

While Statement

Directory: tests/statements/while

Описание

AST

ASR

LLVM

BIN

RUN

Filename

Simple while loops

✅

✅

✅

✅

✅

while_01.f90

exit / cycle in while loops

✅

✅

✅

✅

✅

while_02.f90

Open, Read, Write, Close Statement

Directory: tests/statements/file_io

Описание

AST

ASR

LLVM

BIN

RUN

Filename

open/read/write/close

✅

✅

❌

❌

❌

t01.f90

Intrinsic Functions

abs

Directory: tests/intrinsic/abs

Описание

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

exp

Directory: tests/intrinsic/exp

Описание

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

log

Directory: tests/intrinsic/log

Описание

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

sqrt

Directory: tests/intrinsic/sqrt

Описание

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

sin

Directory: tests/intrinsic/sin

Описание

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

cos

Directory: tests/intrinsic/cos

Описание

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

tan

Directory: tests/intrinsic/tan

Описание

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

sinh

Directory: tests/intrinsic/sinh

Описание

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

cosh

Directory: tests/intrinsic/cosh

Описание

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

tanh

Directory: tests/intrinsic/tanh

Описание

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

asin

Directory: tests/intrinsic/asin

Описание

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

acos

Directory: tests/intrinsic/acos

Описание

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

atan

Directory: tests/intrinsic/atan

Описание

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

modulo

Directory: tests/intrinsic/modulo

Описание

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

✅

❌

❌

❌

❌

t01_scalar_real.f90

array 1D single/double real

✅

✅

❌

❌

❌

t03_array1d_real.f90

mod

Directory: tests/intrinsic/mod

Описание

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

✅

❌

❌

❌

❌

t01_scalar_real.f90

array 1D single/double real

✅

❌

❌

❌

❌

t03_array1d_real.f90

min

Directory: tests/intrinsic/min

Описание

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

✅

✅

❌

❌

❌

t01_scalar_real.f90

max

Directory: tests/intrinsic/max

Описание

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

✅

✅

❌

❌

❌

t01_scalar_real.f90

int

Directory: tests/intrinsic/int

Описание

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

✅

❌

❌

❌

❌

t01_scalar_real.f90

real

Directory: tests/intrinsic/real

Описание

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

✅

✅

✅

✅

✅

t01_scalar_real.f90

floor

Directory: tests/intrinsic/floor

Описание

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

✅

❌

❌

❌

❌

t01_scalar_real.f90

nint

Directory: tests/intrinsic/nint

Описание

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

✅

❌

❌

❌

❌

t01_scalar_real.f90