[flang-commits] [flang] [Flang][Docs] Clean up flang/docs/IntrinsicTypes.md documentation (PR #162184)
Cameron McInally via flang-commits
flang-commits at lists.llvm.org
Mon Oct 6 15:38:18 PDT 2025
https://github.com/mcinally created https://github.com/llvm/llvm-project/pull/162184
Light cleanup of the IntrinsicTypes.md documentation:
- Don't rely on GFortran for description of `LOGICAL` implementation.
- Highlight some keywords.
- Add a table for the supported `TYPES` and `KINDS`.
- Spell out `-fdefault-[real|integer]-<kind>`.
>From ee8ce36ba651ce93533c380f2427fed9327e0434 Mon Sep 17 00:00:00 2001
From: Cameron McInally <cmcinally at nvidia.com>
Date: Fri, 3 Oct 2025 13:30:57 -0700
Subject: [PATCH 1/4] [Flang][Docs] Clean up flang/docs/IntrinsicTypes.md
documentation
Light cleanup of the IntrinsicTypes.md documentation.
---
flang/docs/IntrinsicTypes.md | 130 ++++++++++++++++++-----------------
1 file changed, 67 insertions(+), 63 deletions(-)
diff --git a/flang/docs/IntrinsicTypes.md b/flang/docs/IntrinsicTypes.md
index 0fee1c3870245..7ab5aa2d70ab8 100644
--- a/flang/docs/IntrinsicTypes.md
+++ b/flang/docs/IntrinsicTypes.md
@@ -25,90 +25,94 @@ in [Character.md](Character.md).
## Supported TYPES and KINDS
-Here are the type and kind combinations supported in f18:
-
-INTEGER(KIND=1) 8-bit two's-complement integer
-INTEGER(KIND=2) 16-bit two's-complement integer
-INTEGER(KIND=4) 32-bit two's-complement integer
-INTEGER(KIND=8) 64-bit two's-complement integer
-INTEGER(KIND=16) 128-bit two's-complement integer
-
-REAL(KIND=2) 16-bit IEEE 754 binary16 (5e11m)
-REAL(KIND=3) 16-bit upper half of 32-bit IEEE 754 binary32 (8e8m)
-REAL(KIND=4) 32-bit IEEE 754 binary32 (8e24m)
-REAL(KIND=8) 64-bit IEEE 754 binary64 (11e53m)
-REAL(KIND=10) 80-bit extended precision with explicit normalization bit (15e64m)
-REAL(KIND=16) 128-bit IEEE 754 binary128 (15e113m)
-
-COMPLEX(KIND=2) Two 16-bit IEEE 754 binary16
-COMPLEX(KIND=3) Two 16-bit upper half of 32-bit IEEE 754 binary32
-COMPLEX(KIND=4) Two 32-bit IEEE 754 binary32
-COMPLEX(KIND=8) Two 64-bit IEEE 754 binary64
-COMPLEX(KIND=10) Two 80-bit extended precisions values
-COMPLEX(KIND=16) Two 128-bit IEEE 754 binary128
-
-No
-[double-double
-](https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format)
+f18 supports the following type and kind combinations:
+
+| Type | Description |
+| :--: | :---------: |
+| INTEGER(KIND=1) | 8-bit two's-complement integer |
+| INTEGER(KIND=2) | 16-bit two's-complement integer |
+| INTEGER(KIND=4) | 32-bit two's-complement integer |
+| INTEGER(KIND=8) | 64-bit two's-complement integer |
+| INTEGER(KIND=16) | 128-bit two's-complement integer |
+| REAL(KIND=2) | 16-bit IEEE 754 binary16 (5e11m) |
+| REAL(KIND=3) | 16-bit upper half of 32-bit IEEE 754 binary32 (8e8m) |
+| REAL(KIND=4) | 32-bit IEEE 754 binary32 (8e24m) |
+| REAL(KIND=8) | 64-bit IEEE 754 binary64 (11e53m) |
+| REAL(KIND=10) | 80-bit extended precision with explicit normalization bit (15e64m) |
+| REAL(KIND=16) | 128-bit IEEE 754 binary128 (15e113m) |
+| COMPLEX(KIND=2) | Two 16-bit IEEE 754 binary16 |
+| COMPLEX(KIND=3) | Two 16-bit upper half of 32-bit IEEE 754 binary32 |
+| COMPLEX(KIND=4) | Two 32-bit IEEE 754 binary32 |
+| COMPLEX(KIND=8) | Two 64-bit IEEE 754 binary64 |
+| COMPLEX(KIND=10) | Two 80-bit extended precisions values |
+| COMPLEX(KIND=16) | Two 128-bit IEEE 754 binary128 |
+| LOGICAL(KIND=1) | 8-bit integer |
+| LOGICAL(KIND=2) | 16-bit integer |
+| LOGICAL(KIND=4) | 32-bit integer |
+| LOGICAL(KIND=8) | 64-bit integer |
+
+* No [double-double](https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format)
quad precision type is supported.
+* No 128-bit logical support.
-LOGICAL(KIND=1) 8-bit integer
-LOGICAL(KIND=2) 16-bit integer
-LOGICAL(KIND=4) 32-bit integer
-LOGICAL(KIND=8) 64-bit integer
+### Defaults kinds
-No 128-bit logical support.
+f18 defaults to the following kinds for these types:
-### Defaults kinds
+* `INTEGER` 4
+* `REAL` 4
+* `COMPLEX` 4
+* `DOUBLE PRECISION` 8
+* `LOGICAL` 4
-INTEGER 4
-REAL 4
-COMPLEX 4
-DOUBLE PRECISION 8
-LOGICAL 4
+Modules compiled with different default-real and default-integer kinds
+may be freely mixed. Module files encode the kind value for every entity.
#### Modifying the default kind with default-real-8.
-REAL 8
-DOUBLE PRECISION 8
-COMPLEX 8
+
+* `REAL` 8
+* `DOUBLE PRECISION` 8
+* `COMPLEX` 8
#### Modifying the default kind with default-integer-8:
-INTEGER 8
-LOGICAL 8
-Modules compiled with different default-real and default-integer kinds
-may be freely mixed.
-Module files encode the kind value for every entity.
+* `INTEGER` 8
+* `LOGICAL` 8
## Representation of LOGICAL variables
-The default logical is `LOGICAL(KIND=4)`.
-
-Logical literal constants with kind 1, 2, 4, and 8
-share the following characteristics:
-.TRUE. is represented as 1_kind
-.FALSE. is represented as 0_kind
+The Fortran standard specifies that a logical has two values, `.TRUE.` and
+`.FALSE.`, but does not specify their internal representation.
-Tests for true is *integer value is not zero*.
+Flang specifies that logical literal constants with `KIND=[1|2|4|8]` share the
+following characteristics:
-The implementation matches gfortran.
+* `.TRUE.` is `1_kind`.
+* `.FALSE.` is `0_kind`.
+* A true test is `<integer value> .NE. 0_kind`.
-Programs should not use integer values in LOGICAL contexts or
-use LOGICAL values to interface with other languages.
+Programs should not use integer values in LOGICAL contexts or use LOGICAL values
+to interface with other languages.
### Representations of LOGICAL variables in other compilers
+#### GNU gfortran
+
+* `.TRUE.` is `1_kind`.
+* `.FALSE.` is `0_kind`.
+* A true test is `<integer value> .NE. 0_kind`.
+
#### Intel ifort / NVIDA nvfortran / PGI pgf90
-.TRUE. is represented as -1_kind
-.FALSE. is represented as 0_kind
-Any other values result in undefined behavior.
-Values with a low-bit set are treated as .TRUE..
-Values with a low-bit clear are treated as .FALSE..
+* `.TRUE.` is `-1_kind`.
+* `.FALSE.` is `0_kind`.
+* Any other values result in undefined behavior.
+* Values with a low-bit set are treated as `.TRUE.`.
+* Values with a low-bit clear are treated as `.FALSE.`.
#### IBM XLF
-.TRUE. is represented as 1_kind
-.FALSE. is represented as 0_kind
-Values with a low-bit set are treated as .TRUE..
-Values with a low-bit clear are treated as .FALSE..
+* `.TRUE.` is `1_kind`.
+* `.FALSE.` is `0_kind`.
+* Values with a low-bit set are treated as `.TRUE.`.
+* Values with a low-bit clear are treated as `.FALSE.`.
>From 27c7dfafec4223ff284a9f58e72aca70c0dfeebf Mon Sep 17 00:00:00 2001
From: Cameron McInally <cmcinally at nvidia.com>
Date: Fri, 3 Oct 2025 13:37:07 -0700
Subject: [PATCH 2/4] Fix some whitespace issues.
---
flang/docs/IntrinsicTypes.md | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/flang/docs/IntrinsicTypes.md b/flang/docs/IntrinsicTypes.md
index 7ab5aa2d70ab8..8476eaec9ced0 100644
--- a/flang/docs/IntrinsicTypes.md
+++ b/flang/docs/IntrinsicTypes.md
@@ -30,7 +30,7 @@ f18 supports the following type and kind combinations:
| Type | Description |
| :--: | :---------: |
| INTEGER(KIND=1) | 8-bit two's-complement integer |
-| INTEGER(KIND=2) | 16-bit two's-complement integer |
+| INTEGER(KIND=2) | 16-bit two's-complement integer |
| INTEGER(KIND=4) | 32-bit two's-complement integer |
| INTEGER(KIND=8) | 64-bit two's-complement integer |
| INTEGER(KIND=16) | 128-bit two's-complement integer |
@@ -106,13 +106,13 @@ to interface with other languages.
* `.TRUE.` is `-1_kind`.
* `.FALSE.` is `0_kind`.
-* Any other values result in undefined behavior.
-* Values with a low-bit set are treated as `.TRUE.`.
-* Values with a low-bit clear are treated as `.FALSE.`.
+* Any other values result in undefined behavior.
+* Values with a low-bit set are treated as `.TRUE.`.
+* Values with a low-bit clear are treated as `.FALSE.`.
#### IBM XLF
* `.TRUE.` is `1_kind`.
* `.FALSE.` is `0_kind`.
-* Values with a low-bit set are treated as `.TRUE.`.
-* Values with a low-bit clear are treated as `.FALSE.`.
+* Values with a low-bit set are treated as `.TRUE.`.
+* Values with a low-bit clear are treated as `.FALSE.`.
>From 9f3b0302c21950e5317745a87bf8763d672840cc Mon Sep 17 00:00:00 2001
From: Cameron McInally <cmcinally at nvidia.com>
Date: Fri, 3 Oct 2025 13:39:50 -0700
Subject: [PATCH 3/4] Fix more whitespace issues.
---
flang/docs/IntrinsicTypes.md | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/flang/docs/IntrinsicTypes.md b/flang/docs/IntrinsicTypes.md
index 8476eaec9ced0..1884de30889d1 100644
--- a/flang/docs/IntrinsicTypes.md
+++ b/flang/docs/IntrinsicTypes.md
@@ -34,7 +34,7 @@ f18 supports the following type and kind combinations:
| INTEGER(KIND=4) | 32-bit two's-complement integer |
| INTEGER(KIND=8) | 64-bit two's-complement integer |
| INTEGER(KIND=16) | 128-bit two's-complement integer |
-| REAL(KIND=2) | 16-bit IEEE 754 binary16 (5e11m) |
+| REAL(KIND=2) | 16-bit IEEE 754 binary16 (5e11m) |
| REAL(KIND=3) | 16-bit upper half of 32-bit IEEE 754 binary32 (8e8m) |
| REAL(KIND=4) | 32-bit IEEE 754 binary32 (8e24m) |
| REAL(KIND=8) | 64-bit IEEE 754 binary64 (11e53m) |
@@ -43,13 +43,13 @@ f18 supports the following type and kind combinations:
| COMPLEX(KIND=2) | Two 16-bit IEEE 754 binary16 |
| COMPLEX(KIND=3) | Two 16-bit upper half of 32-bit IEEE 754 binary32 |
| COMPLEX(KIND=4) | Two 32-bit IEEE 754 binary32 |
-| COMPLEX(KIND=8) | Two 64-bit IEEE 754 binary64 |
+| COMPLEX(KIND=8) | Two 64-bit IEEE 754 binary64 |
| COMPLEX(KIND=10) | Two 80-bit extended precisions values |
| COMPLEX(KIND=16) | Two 128-bit IEEE 754 binary128 |
| LOGICAL(KIND=1) | 8-bit integer |
-| LOGICAL(KIND=2) | 16-bit integer |
+| LOGICAL(KIND=2) | 16-bit integer |
| LOGICAL(KIND=4) | 32-bit integer |
-| LOGICAL(KIND=8) | 64-bit integer |
+| LOGICAL(KIND=8) | 64-bit integer |
* No [double-double](https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format)
quad precision type is supported.
@@ -59,9 +59,9 @@ quad precision type is supported.
f18 defaults to the following kinds for these types:
-* `INTEGER` 4
-* `REAL` 4
-* `COMPLEX` 4
+* `INTEGER` 4
+* `REAL` 4
+* `COMPLEX` 4
* `DOUBLE PRECISION` 8
* `LOGICAL` 4
@@ -70,8 +70,8 @@ may be freely mixed. Module files encode the kind value for every entity.
#### Modifying the default kind with default-real-8.
-* `REAL` 8
-* `DOUBLE PRECISION` 8
+* `REAL` 8
+* `DOUBLE PRECISION` 8
* `COMPLEX` 8
#### Modifying the default kind with default-integer-8:
>From 2194d835d0ffa90eba85124bf96b3d3c3166d3b4 Mon Sep 17 00:00:00 2001
From: Cameron McInally <cmcinally at nvidia.com>
Date: Mon, 6 Oct 2025 15:19:10 -0700
Subject: [PATCH 4/4] Hightlight some keywords and spell out
`-fdefault-[real|integer]-<kind>`.
---
flang/docs/IntrinsicTypes.md | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/flang/docs/IntrinsicTypes.md b/flang/docs/IntrinsicTypes.md
index 1884de30889d1..d71c094f70f3b 100644
--- a/flang/docs/IntrinsicTypes.md
+++ b/flang/docs/IntrinsicTypes.md
@@ -14,13 +14,13 @@ local:
---
```
-Intrinsic types are integer, real, complex, character, and logical.
-All intrinsic types have a kind type parameter called KIND,
+Intrinsic types are `INTEGER`, `REAL`, `COMPLEX`, `CHARACTER`, and `LOGICAL`.
+All intrinsic types have a kind type parameter called `KIND`,
which determines the representation method for the specified type.
-The intrinsic type character also has a length type parameter called LEN,
+The intrinsic type character also has a length type parameter called `LEN`,
which determines the length of the character string.
-The implementation of `CHARACTER` type in f18 is described
+The implementation of the `CHARACTER` type in f18 is described
in [Character.md](Character.md).
## Supported TYPES and KINDS
@@ -65,16 +65,17 @@ f18 defaults to the following kinds for these types:
* `DOUBLE PRECISION` 8
* `LOGICAL` 4
-Modules compiled with different default-real and default-integer kinds
-may be freely mixed. Module files encode the kind value for every entity.
+Modules compiled with different `-fdefault-real-<kind>` and
+`-f-default-integer-<kind>` may be freely mixed. Module files encode the kind
+value for every entity.
-#### Modifying the default kind with default-real-8.
+#### Modifying the default kind with -fdefault-real-8:
* `REAL` 8
* `DOUBLE PRECISION` 8
* `COMPLEX` 8
-#### Modifying the default kind with default-integer-8:
+#### Modifying the default kind with -fdefault-integer-8:
* `INTEGER` 8
* `LOGICAL` 8
More information about the flang-commits
mailing list