Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit

When the return value of the function is a structure, the ABI might require
that the caller pass the structure into the function call as an implicit
input argument; in such cases the generated IR for the argument will
have the sret attribute. Similarly, pass-by-value arguments are given
the byval attribute in the IR. Since the adoption of opaque pointers,
such attributes are required to be accompanied with the pointee type. This
patch fixes flang2 to generate correct IR for such argument/return types.

Co-authored-by: Liuyunlong <>

Git stats


Failed to load latest commit information.


Flang (also known as "Classic Flang") is an out-of-tree Fortran compiler targeting LLVM. It is an open-sourced version of pgfortran, a commercial Fortran compiler from PGI/NVIDIA. It is different from the new Flang (formerly known as "F18"; see, which has been part of the LLVM project since 2020, although both are developed by the same community. It is also unrelated to other projects of the same name, such as and

Classic Flang is used in several downstream commercial projects like the AMD, Arm and Huawei compilers, and continues to be maintained, but the plan is to replace Classic Flang with the new Flang in the future.

Visit the Flang wiki for more information:

To sign up for the developer mailing lists for announcements and discussions, visit:

We have a flang-compiler channel on Slack. Slack is invitation-only but anyone can join with the invitation link below:

Building Flang

Instructions for building Flang can be found on the Flang wiki:

Compiler Options

For a list of compiler options, enter:

% flang -help

Flang accepts all Clang compiler options and supports many, as well as the following Fortran-specific compiler options:

-noFlangLibs          Do not link against Flang libraries
-mp                   Enable OpenMP and link with with OpenMP library libomp
-nomp                 Do not link with OpenMP library libomp
-Mbackslash           Treat backslash in quoted strings like any other character
-Mnobackslash         Treat backslash in quoted strings like a C-style escape character (Default)
-Mbyteswapio          Swap byte-order for unformatted input/output
-Mfixed               Assume fixed-format source
-Mextend              Allow source lines up to 132 characters
-Mfreeform            Assume free-format source
-Mpreprocess          Run preprocessor for Fortran files
-Mrecursive           Generate code to allow recursive subprograms
-Mstandard            Check standard conformance
-Msave                Assume all variables have SAVE attribute
-module               path to module file (-I also works)
-Mallocatable=95      Select Fortran 95 semantics for assignments to allocatable objects
-Mallocatable=03      Select Fortran 03 semantics for assignments to allocatable objects (Default)
-static-flang-libs    Link using static Flang libraries
-M[no]daz             Treat denormalized numbers as zero
-M[no]flushz          Set SSE to flush-to-zero mode
-Mcache_align         Align large objects on cache-line boundaries
-M[no]fprelaxed       This option is ignored
-fdefault-integer-8   Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8
-fdefault-real-8      Treat REAL as REAL*8
-i8                   Treat INTEGER and LOGICAL as INTEGER*8 and LOGICAL*8
-r8                   Treat REAL as REAL*8
-fno-fortran-main     Don't link in Fortran main