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

Description

AST

ASR

LLVM

BIN

RUN

Filename

Pure Fortran sin(x) implementation

t01_sin_implementation.f90

Modules

Basic Usage

Directory: tests/modules/basic

Description

AST

ASR

LLVM

BIN

RUN

Filename

Basic modules

t01.f90

Module Functions and Subroutines

Directory: tests/modules/procedures

Description

AST

ASR

LLVM

BIN

RUN

Filename

Module functions

t01.f90

Module subroutines

t02.f90

Nested subroutines

t03.f90

Expressions

Arithmetic Operations

Directory: tests/expressions/arit

Description

AST

ASR

LLVM

BIN

RUN

Filename

+,-,*,/,**

basic_operations.f90

Integers

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

Real Numbers

Directory: tests/expressions/reals

Description

AST

ASR

LLVM

BIN

RUN

Filename

single/double reals

real_kind.f90

defined operator

t01_def_op.f90

Complex Numbers

Directory: tests/expressions/complex

Description

AST

ASR

LLVM

BIN

RUN

Filename

single/double complex

complex_kind.f90

Strings

Directory: tests/expressions/character

Description

AST

ASR

LLVM

BIN

RUN

Filename

character

t01_character.f90

string concatenation

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

Statements

Allocate Statement

Directory: tests/statements/allocate

Description

AST

ASR

LLVM

BIN

RUN

Filename

allocate statement

t01.f90

Block Statement

Directory: tests/statements/block

Description

AST

ASR

LLVM

BIN

RUN

Filename

block statement

t01.f90

Goto Statement

Directory: tests/statements/goto

Description

AST

ASR

LLVM

BIN

RUN

Filename

computed go-to statement

t01.f90

go-to statement

t02.f90

If Statement

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

While Statement

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

Open, Read, Write, Close Statement

Directory: tests/statements/file_io

Description

AST

ASR

LLVM

BIN

RUN

Filename

open/read/write/close

t01.f90

Intrinsic Functions

abs

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

exp

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

log

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

sqrt

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

sin

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

cos

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

tan

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

sinh

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

cosh

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

tanh

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

asin

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

acos

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

atan

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

modulo

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

mod

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

min

Directory: tests/intrinsic/min

Description

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

t01_scalar_real.f90

max

Directory: tests/intrinsic/max

Description

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

t01_scalar_real.f90

int

Directory: tests/intrinsic/int

Description

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

t01_scalar_real.f90

real

Directory: tests/intrinsic/real

Description

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double 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

nint

Directory: tests/intrinsic/nint

Description

AST

ASR

LLVM

BIN

RUN

Filename

scalar single/double real

t01_scalar_real.f90