Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

3.7 KiB

Flang support for UNSIGNED type

---
local:
---

For better compatibility with GNU Fortran and Sun Fortran, this compiler supports an option (-funsigned) that enables the UNSIGNED data type, constants, intrinsic functions, its use with intrinsic operations and SELECT CASE, and C language interoperability.

UNSIGNED type

UNSIGNED is a numeric type with the same kinds as INTEGER. It may appear as a type-spec in any context, including a type declaration statement, a type-decl in an array constructor or ALLOCATE statement, IMPLICIT, or a function statement's prefix.

UNSIGNED constants are nonempty strings of decimal digits followed by the letter U and optionally a kind suffix with an underscore.

UNSIGNED operations

UNSIGNED operands are accepted for unary negation (-), the basic four binary arithmetic intrinsic operations +, -, *, and /, components in complex constructors, and for numeric relational operators. The power operator ** does not accept UNSIGNED operands.

Mixed operations with other types are not allowed. Mixed operations with one UNSIGNED operand and one BOZ literal constant operand are allowed. When the operands' kinds differ, the smaller operand is zero-extended to the size of the larger.

The arithmetic operations u+v, -u, u-v, and u*v are implemented modulo MAX(HUGE(u),HUGE(v))+1; informally speaking, they always truncate their results, or are guaranteed to "wrap".

UNSIGNED intrinsic functions

UNSIGNED operands are accepted as operands to, or may be returned as results from, several intrinsic procedures.

Bitwise operations:

  • NOT
  • IAND, IOR, IEOR, IBCLR, IBSET, IBITS, MERGE_BITS
  • BTEST
  • ISHFT, ISHFTC
  • SHIFTA, SHIFTL, SHIFTR
  • TRANSFER
  • MVBITS

The existing unsigned comparisons BLT, BLE, BGE, and BGT.

The inquiries BIT_SIZE, DIGITS, HUGE, and RANGE.

Homogeneous MAX and MIN.

RANDOM_NUMBER.

The intrinsic array functions:

  • MAXVAL, MINVAL
  • SUM, PRODUCT
  • IALL, IANY, IPARITY
  • DOT_PRODUCT, MATMUL

All of the restructuring array transformational intrinsics: CSHIFT, EOSHIFT, PACK, RESHAPE, SPREAD, TRANSPOSE, and UNPACK.

The location transformationals FINDLOC, MAXLOC, and MINLOC.

There is a new SELECTED_UNSIGNED_KIND intrinsic function; it happens to work identically to the existing SELECTED_INT_KIND.

Two new intrinsic functions UMASKL and UMASKR work just like MASKL and MASKR, returning unsigned results instead of integers.

Conversions to UNSIGNED, or between UNSIGNED kinds, can be done via the new UINT intrinsic. The UNSIGNED intrinsic name is also supported as an alias.

Support for UNSIGNED in the OUT_OF_RANGE predicate remains to be implemented.

Other usage

UNSIGNED is allowed in SELECT CASE, but not in DO loop indices or limits, or an arithmetic IF expression.

UNSIGNED array indices are not allowed.

UNSIGNED data may be used as data items in I/O statements, including list-directed and NAMELIST I/O. Format-directed I/O may edit UNSIGNED data with I, G, B, O, and Z edit descriptors.

C interoperability

UNSIGNED data map to type codes for C's unsigned types in the type member of a cdesc_t descriptor in the ISO_Fortran_binding.h header file.

Standard modules

New definitions (C_UNSIGNED, C_UINT8_T, &c.) were added to ISO_C_BINDING and new constants (UINT8, UINT16, &c.) to ISO_FORTRAN_ENV.