| <!--===- docs/Directives.md |
| |
| Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| See https://llvm.org/LICENSE.txt for license information. |
| SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| --> |
| |
| # Compiler directives supported by Flang |
| |
| A list of non-standard directives supported by Flang |
| |
| * `!dir$ fixed` and `!dir$ free` select Fortran source forms. Their effect |
| persists to the end of the current source file. |
| * `!dir$ ignore_tkr [[(TKRDMAC)] dummy-arg-name]...` in an interface definition |
| disables some semantic checks at call sites for the actual arguments that |
| correspond to some named dummy arguments (or all of them, by default). |
| The directive allow actual arguments that would otherwise be diagnosed |
| as incompatible in type (T), kind (K), rank (R), CUDA device (D), or |
| managed (M) status. The letter (A) is a shorthand for all of these, |
| and is the default when no letters appear. The letter (C) checks for |
| contiguity for example allowing an element of an assumed-shape array to be |
| passed as a dummy argument. For example, if one wanted to call a "set all |
| bytes to zero" utility that could be applied to arrays of any type or rank: |
| ``` |
| interface |
| subroutine clear(arr,bytes) |
| !dir$ ignore_tkr arr |
| integer(1), intent(out) :: arr(bytes) |
| end |
| end interface |
| ``` |
| * `!dir$ assume_aligned desginator:alignment`, where designator is a variable, |
| maybe with array indices, and alignment is what the compiler should assume the |
| alignment to be. E.g A:64 or B(1,1,1):128. The alignment should be a power of 2, |
| and is limited to 256. |
| [This directive is currently recognised by the parser, but not |
| handled by the other parts of the compiler]. |