llvm-capstone/flang
Yi Wu a2d4a4c0b2 Apply kind code check on exitstat and cmdstat (#78286)
When testing on gcc, both exitstat and cmdstat must be a kind=4 integer,
e.g. DefaultInt. This patch changes the input arg requirement from
`AnyInt` to `TypePattern{IntType, KindCode::greaterOrEqualToKind, n}`.

The standard stated in 16.9.73
- EXITSTAT (optional) shall be a scalar of type integer with a decimal
exponent range of at least nine.
- CMDSTAT (optional) shall be a scalar of type integer with a decimal
exponent range of at least four.

```fortran
program bug
  implicit none
  integer(kind = 2) :: exitstatvar
  integer(kind = 4) :: cmdstatvar
  character(len=256) :: msg
  character(len=:), allocatable :: command
  command='echo hello'
  call execute_command_line(command, exitstat=exitstatvar, cmdstat=cmdstatvar)
end program
```
When testing the above program with exitstatvar kind<4, an error would
occur:
```
$ ../build-release/bin/flang-new test.f90
error: Semantic errors in test.f90
./test.f90:8:47: error: Actual argument for 'exitstat=' has bad type or kind 'INTEGER(2)'
    call execute_command_line(command, exitstat=exitstatvar)
```

When testing the above program with exitstatvar kind<2, an error would
occur:
```
$ ../build-release/bin/flang-new test.f90
error: Semantic errors in test.f90
./test.f90:8:47: error: Actual argument for 'cmdstat=' has bad type or kind 'INTEGER(1)'
    call execute_command_line(command, cmdstat=cmdstatvar)
```

Test file for this semantics has been added to `flang/test/Semantic`
Fixes: https://github.com/llvm/llvm-project/issues/77990

(cherry picked from commit 14a15103cc9dbdb3e95c04627e0b96b5e3aa4944)
2024-01-30 16:45:35 +00:00
..
cmake/modules Revert "[Flang] [FlangRT] Introduce FlangRT project as solution to Flang's runtime LLVM integration" 2023-10-02 09:02:05 +00:00
docs Apply kind code check on exitstat and cmdstat (#78286) 2024-01-30 16:45:35 +00:00
examples [flang] Add notify-type and notify-wait-stmt (#76594) 2024-01-02 10:40:47 -08:00
include [flang] Allow assumed-shape element pass to dummy arg with ignore_tkr (#78196) 2024-01-22 23:16:22 +00:00
lib Apply kind code check on exitstat and cmdstat (#78286) 2024-01-30 16:45:35 +00:00
module [flang] Do not leak intrinsics used by ISO_C_BINDING and ISO_FORTRAN_ENV (#79006) 2024-01-23 08:43:29 +01:00
runtime [flang] use setsid to assign the child to prevent zombie as it will be clean up by init process (#77944) 2024-01-19 14:18:57 +00:00
test Apply kind code check on exitstat and cmdstat (#78286) 2024-01-30 16:45:35 +00:00
tools [flang] Handle -S assemble only flag in flang-to-external-fc (#78979) 2024-01-22 15:55:05 +00:00
unittests [flang] use setsid to assign the child to prevent zombie as it will be clean up by init process (#77944) 2024-01-19 14:18:57 +00:00
.clang-format
.clang-tidy
.drone.star
.gitignore
CMakeLists.txt [flang] Add install target to install flang headers (#78151) 2024-01-16 17:04:52 +00:00
CODE_OWNERS.TXT [Flang] Add code owner for the Driver 2023-04-14 14:38:32 +00:00
LICENSE.TXT
README.md [Flang][Docs] Add a GettingStarted.md for build instructions 2023-04-12 23:33:48 +05:30

Flang

Flang is a ground-up implementation of a Fortran front end written in modern C++. It started off as the f18 project (https://github.com/flang-compiler/f18) with an aim to replace the previous flang project (https://github.com/flang-compiler/flang) and address its various deficiencies. F18 was subsequently accepted into the LLVM project and rechristened as Flang.

Please note that flang is not ready yet for production usage.

Getting Started

Read more about flang in the docs directory. Start with the compiler overview.

To better understand Fortran as a language and the specific grammar accepted by flang, read Fortran For C Programmers and flang's specifications of the Fortran grammar and the OpenMP grammar.

Treatment of language extensions is covered in this document.

To understand the compilers handling of intrinsics, see the discussion of intrinsics.

To understand how a flang program communicates with libraries at runtime, see the discussion of runtime descriptors.

If you're interested in contributing to the compiler, read the style guide and also review how flang uses modern C++ features.

If you are interested in writing new documentation, follow LLVM's Markdown style guide.

Consult the Getting Started with Flang for information on building and running flang.