llvm-project/flang
Tim Keith ed94af4c47 [flang] More name resolution for construct entities
Push a new scope for constructs and statements that require one
(DataStmt, DO CONCURRENT, ForallConstruct, ForallStmt -- there are more
to do). Currently we use the Block kind of scope because there is no
difference. Perhaps that kind should be renamed to Construct, though it
does apply to statements as well as constructs.

Add DeclareConstructEntity to create a construct or statement entity.
When the type is not specified it can come from the type of a symbol in
the enclosing scope with the same name. Change DeclareObjectEntity et al.
to return the symbol declared, for the benefit of DeclareConstructEntity.

Use DeclareConstructEntity for DO CONCURRENT index-name, LOCAL, and
LOCAL_INIT variables and the data-i-do-variable in DataImpliedDo

Names in SHARED locality spec need special handling: create a new kinds
of symbol with HostAssocDetails to represent the host-association of the
shared variables within the construct scope. That symbol gets the
LocalityShared flag without affecting the symbol in the outer scope.
HostAssoc symbols may be useful in other contexts, e.g. up-level
references to local variables.

Add parser::DoConstruct::IsDoConcurrent() because DO CONCURRENT loops
introduce a construct scope while other DO loops do not.

Move CanonicalizeDo to before name resolution so that name resolution
doesn't have to deal with labeled DO CONCURRENT loops.

Allow for type of index name to be specified in ConcurrentHeader.

Resolve the derived type name in an AllocateStmt, StructureConstructor

Original-commit: flang-compiler/f18@bc7b989136
Reviewed-on: https://github.com/flang-compiler/f18/pull/214
2018-10-18 09:06:11 -07:00
..
documentation [flang] Add -i8, -r8, &c. options to f18 development driver 2018-10-16 14:42:22 -07:00
include/flang [flang] Implement and test RESHAPE. Avoid G++ workaround when compiled with GNU 8.2.0. 2018-08-03 16:24:01 -07:00
lib [flang] More name resolution for construct entities 2018-10-18 09:06:11 -07:00
runtime [flang] address review comments 2018-08-06 09:43:43 -07:00
test [flang] More name resolution for construct entities 2018-10-18 09:06:11 -07:00
tools [flang] Add -i8, -r8, &c. options to f18 development driver 2018-10-16 14:42:22 -07:00
.clang-format [flang] Improve include file sorting. 2018-04-12 12:23:20 -07:00
.gitignore [flang] unit testing for LZBC 2018-06-14 13:52:16 -07:00
CMakeLists.txt [flang] Rearrange some facilities into a new lib/common. 2018-06-18 11:05:17 -07:00
LICENSE [flang] Create LICENSE 2018-05-18 13:06:22 -07:00
README.md [flang] Update README to reflect buildability with GCC 8.2.0. 2018-08-03 16:11:29 -07:00

README.md

f18

F18 is a front-end for Fortran. It is intended to replace the existing front-end in the Flang compiler.

Flang is a Fortran compiler targeting LLVM.

Visit the Flang wiki for more information about Flang:

https://github.com/flang-compiler/flang/wiki

Read more about f18 in the documentation directory.

Building F18

Selection of the C++ compiler

F18 is written in C++17.

The code has been compiled and tested with GCC versions 7.2.0, 7.3.0, 8.1.0, and 8.2.0. The code has been compiled and tested with clang 6.0 using either GCC 7.3.0 or 8.1.0 headers; however, the headers needed small patches.

To build and install f18, there are several options for specifying the C++ compiler. You can have the proper C++ compiler on your path, or you can set the environment variable CXX, or you can define the variable GCC on the cmake command line.

By default, cmake will search for g++ on your PATH. The g++ version must be 7.2 or greater in order to build f18.

Or, if you export CXX, cmake will use the variable CXX to find the C++ compiler. CXX should include the full path to the compiler or a name that will be found on your PATH, e.g. g++-7.2, assuming g++-7.2 is on your PATH.

export CXX=g++-7.2

Or, you can reference the GCC installation directory directly. The CMakeList.txt file uses the variable GCC as the path to the bin directory containing the C++ compiler. GCC can be defined on the cmake command line where <GCC_DIRECTORY> is the path to a GCC installation with bin, lib, etc:

cmake -DGCC=<GCC_DIRECTORY>

To use f18 after it is built, the environment variables PATH and LD_LIBRARY_PATH must be set to use GCC and its associated libraries.

LLVM and Clang dependency

F18 uses components from version 6.0 of LLVM and clang (even when f18 is not compiled with clang).

The instructions to build LLVM and clang can be found at https://clang.llvm.org/get_started.html.

The f18 CMakeList.txt file uses the environment variable Clang_DIR to find the installed components.

To get the correct LLVM and clang libraries included in your f18 build, set the environment variable Clang_DIR to the lib/cmake/clang directory in the clang install directory.

Installation Directory

To specify a custom install location, add -DCMAKE_INSTALL_PREFIX=<INSTALL_PREFIX> to the cmake command where <INSTALL_PREFIX> is the path where f18 should be installed.

Build Types

To create a debug build, add -DCMAKE_BUILD_TYPE=Debug to the cmake command. Debug builds execute slowly.

To create a release build, add -DCMAKE_BUILD_TYPE=Release to the cmake command. Release builds execute quickly.

Get the Source Code

cd where/you/want/the/source
git clone https://github.com/flang-compiler/f18.git

Build F18

cd where/you/want/to/build
export Clang_DIR=<CLANG_CMAKE_DIRECTORY>
cmake <your custom options> where/you/put/the/source/f18
make