Changelog

[22.0.0]

Added

Upstream Integration

  • Integrate upstream LLVM through llvmorg-22.1.8

  • Update the bundled AMD ROCm device libraries to AMD’s ROCm device-libs as of 2025-11-22

  • Integrate AMD heterogeneous GPU DWARF debugging support for LLVM 22

Optimizer and Codegen

  • Add the -hsco[n] scalar short-circuit optimization for logical .AND./.OR. idioms

16-bit Floating-Point

  • Add 16-bit (fp16/bf16) support for the CEILING intrinsic

Packaging

  • Add a standalone cray-fortran module, provided as both a TCL environment module and a Lua (lmod) module, that adds the crayftn binary and man pages to PATH and MANPATH. It does not interoperate with the CPE module environment or the Cray PE compiler drivers

Changed

GPU Offload

  • Enable ROCm 7.13 compatibility

Optimizer and Codegen

  • Reduce dope-vector traversal overhead to improve runtime performance

  • Respect -hipa0 for OpenMP target and OpenACC routines instead of force-enabling IPA, and stop issuing message ftn-3140

Diagnostics

  • Improve ptxas error handling and reporting for NVIDIA offload

  • Improve failed-image-registration error handling in libcrayacc

  • Improve error messages in the CCE OpenMP offload linker tool

Driver and Linking

  • Disable Cray-LibSci pattern matching by default; when re-enabled, the user must link a library that provides the required Cray-LibSci symbols

Documentation

  • Update the crayftn man pages to document crayftn driver usage instead of ftn driver usage

  • Document external dependencies in the crayftn man pages

  • Remove C/C++ compiler references from the crayftn man pages

Removed

Packaging

  • Remove the CCE C/C++ compiler from the CCE packages

  • Remove the cce module from the CCE release packages (replaced by cray-fortran)

  • Drop the pkgconfig files used by the Cray PE compiler drivers and the set-default, moduleless, and compiler-driver CCE packages

Documentation

  • Remove documentation for the unsupported -hdevelop option from the crayftn man page

Fixed

Fortran Language

  • Fix an infinite compilation loop with assumed-size character dummy arguments

  • Fix a latent memory-corruption bug when compiling very large sources

  • Fix a name-storage overflow for long compiler-generated procedure names

  • Fix zero-attribute handling for C_F_POINTER (an intrinsic subroutine, not a function)

  • Fix compiler heap corruption in recursive CIF attribute emission

Optimizer and Codegen

  • Fix array-bounds temporaries to use 64-bit integers for large-array addressing

  • Disable obsolete early conditional-expression lowering by default to avoid a code-generation bug

  • Fix a pathological compile-time slowdown for routines with many global static variables

  • Fix the CONTIGUOUS flag not being set on some descriptors

  • Fix crayftn code generation after an upstream change to the default integer-truncation behavior

  • Block inlining of internal routines that need a runtime-type preamble

  • Fix an AArch64 instruction-selection assertion for f128 handling

OpenMP

  • Fix incorrect OpenMP variable scoping when inlining, including FIRSTPRIVATE and PRIVATE/SHARED handling

OpenACC

  • Fix a Fortran internal error with OpenACC kernels loops by respecting the suppress flag during translation [CAST-39993]

  • Fix handling of private and firstprivate clauses on acc loop seq

GPU Offload

  • Fix Cray Fortran OpenMP offload interoperability with the amdclang ATTACH flag change in ROCm 7.2 and 7.13

Runtime Library

  • Remove the libpmi dependency from libpgas-shmem to fix cce-pgas-ofi install failures with Cray PMI 6.1.18

  • Fix use-after-free and storage-leak bugs in Fortran runtime library routines (FFIO trace-close, async-I/O wait, RENAME, and CHDIR)

Diagnostics

  • Improve error checking for mismatched types in executable statements without over-triggering

  • Flush stdout/stderr before a compiler abort so diagnostics are not lost [CAST-39930]

Driver and Linking

  • Add --allow-shlib-undefined when linking the PGAS runtime to avoid linker errors

Also included in 22.0.0 — previously released in CCE 21.0.x

The changes below are part of CCE 22.0.0 but were delivered to customers earlier through CCE 21.0.x point releases: they were developed during the 22.0.0 cycle and back-ported so the fixes could ship sooner. They are listed separately from the 22.0.0 section above so that customers already running a recent 21.0.x release can see what is genuinely new in 22.0.0 versus what they may already have received. Had a changelog existed during 21.0.x, these changes would have appeared in the corresponding 21.0.x sections.

Added

Fortran Language

  • Support F2008 interpretation 46: character objects with length greater than 1 as VALUE dummy arguments

OpenMP

  • Add OpenMP 6.0 groupprivate directive support for Fortran

Changed

GPU Offload

  • Support ROCm 7.2 and 7.12 in the CCE OpenMP offload linker tool and the libcrayacc OpenMP offload runtime library

Fixed

Fortran Language

  • Fix a compiler abort (infinite recursion) with Fortran procedure pointers

  • Fix multiple parameterized derived type (PDT) bugs: nested parameters, sharing types and type-bound procedures across USE, and deferred/assumed-length parameter argument setup [CAST-37071]

  • Fix global SAVE incorrectly applied to members of nested BLOCK constructs [CAST-39199]

  • Allow the PRESENT() intrinsic in specification expressions (F2023 10.1.11)

  • Fix a frontend abort during error recovery with an allocatable

  • Fix IEEE_POSITIVE_SUBNORMAL and IEEE_NEGATIVE_SUBNORMAL values

  • Fix pointer assignment of assumed-length character dope vectors (substring pointers) [CAST-39271]

  • Fix host association and visibility for variables and objects in nested BLOCK constructs, including IPA storage-block sharing across modules [CAST-37066]

  • Fix a crash from a missing data-object check on array indexing

  • Fix a compiler abort with small polymorphic usage

  • Fix handling of DO CONCURRENT reduction variables

  • Allow typing a NAMELIST object after the NAMELIST statement, issuing an ANSI message instead of a hard error

  • Fix incorrect front-end scoping for DO CONCURRENT, including LOCAL locality

  • Fix PRESENT() for an unallocated actual passed to an OPTIONAL dummy [CAST-39457]

  • Keep searching module files, with a warning, instead of erroring when one is malformed

  • Fix passing an empty string to an OPTIONAL argument and related empty-string handling

  • Fix initialization of polymorphic INTENT(OUT) derived-type arguments, restricting it to scalars and disabling incorrect array/coarray paths [CAST-33104]

  • Fix an assertion with host-associated derived types

  • Fix a compiler abort with CLASS(*), INTENT(OUT)

  • Fix strings passed incorrectly for type-bound procedures

  • Fix an assertion on empty interface blocks used as type-bound procedures

  • Fix front-end handling of a user-defined operator(**) [CAST-39345]

  • Fix ASSOCIATE names used inside BLOCK constructs

  • Fix compilation errors using renamed derived types, following all rename links during type resolution

  • Fix an internal error with C boolean arrays by ensuring LOGICAL type conversion [CAST-40007]

  • Fix a spurious bounds-check error for empty array arguments, including at -O0

  • Fix a segfault by not calling the type-bound-procedure routine for INTENT(OUT) ALLOCATABLE dummy arguments [CAST-40336]

Optimizer and Codegen

  • Prevent unintended Cray-LibSci pattern matching at -hpattern level 1 and below

  • Fix incorrect address computation caused by using the wrong pointee type

  • Fix incorrect results for DO CONCURRENT with array reductions [CAST-36945]

  • Fix incorrect ordering when generating accelerator texture-cache hints

  • Fix incorrect results from bitfield handling in type casts

  • Fix a vectorizer cost-model assertion with floating-point traps (-Ktrap) enabled

  • Fix a compile failure on AArch64 by disabling an erroneous assert

  • Fix a compiler abort from COUNT

  • Fix incorrect parsing of the optimize(-g) directive

  • Fix -hnofortran_ptr_alias being ignored

  • Fix a bug in LLVM vector-mask handling that produced incorrect results

  • Fix an internal compiler error from address-space conversion

  • Fix an internal compiler error (“variable shared from a dead stack”) from a read/write-list issue

  • Remove the noalias attribute from type-incompatible arguments, fixing invalid LLVM bitcode at -O0

  • Fix an internal compiler error from post-linear dummy-argument reseat

  • Fix a use-after-free (intermittent crash) when reading precompiled information during IPA

  • Stop treating a polymorphic-copy runtime routine as pure in the inliner, fixing a miscompile

  • Fix a compilation crash with a non-allocatable SAVE coarray

  • Fix a compiler crash from a stale function reference in call-expression lowering [CAST-39818]

  • Fix an AArch64 sincos lowering regression

  • Fix procedure-flag aliasing that caused a linker crash [CAST-39345]

  • Fix an internal error with transpose of rank-expanded private arrays

OpenMP

  • Fix an OpenMP WORKDISTRIBUTE regression by restoring teams on the host

  • Allow discontiguous array sections in OpenMP TARGET UPDATE

  • Add and improve diagnostic checking for the OpenMP doacross SINK iteration vector

  • Support the IF clause on the OpenMP TEAMS construct, including compound constructs and on the accelerator

  • Allow named constants in OpenMP firstprivate/shared clauses

  • Allow array intrinsic functions in OpenMP WORKDISTRIBUTE

  • Fix incorrect results for an OpenMP lastprivate loop induction variable at -hipa0

  • Fix IF-clause movement for compound OpenMP directives

  • Fix a named OpenMP mapper affecting the mapping of unrelated variables

  • Add Fortran interfaces for the OpenMP allocator and free runtime routines

  • Fix OpenMP scoping reset after a nested construct

  • Fix the OpenMP DISPATCH construct with -g -O0

  • Fix parsing of the OpenMP ERROR directive clause with nested parentheses

  • Fix OpenMP DETACH clause handling

  • Fix an incorrect check for EXIT out of an OpenMP loop with COLLAPSE [CAST-39496]

  • Fix spurious type-mismatch errors for the MAP clause with a mapper identifier

  • Fix OpenMP failure with directives in PURE procedures and restore SIMD support (OpenMP 6.0 relaxation)

  • Fix dope-vector data placement for FIRSTPRIVATE Fortran pointers in offload [CAST-39761]

OpenACC

  • Fix an OpenACC test_data_create regression by requiring a legal region before merging accelerator regions

  • Improve non-contiguous dope-vector checking for accelerator data

  • Fix an abort in OpenACC kernels using GPU shared memory [CAST-38802]

  • Fix incorrect results for nested gang reductions in OpenACC

  • Fix an OpenACC KERNELS performance regression through array-size optimization and array-syntax fusion improvements [CAST-39706]

GPU Offload

  • Add missing NVIDIA GPU device math functions (asinh, atanh, hypot, acosh)

  • Prevent an oversized device runtime library by honoring noinline, fixing an NVIDIA fp16/bf16 print timeout

  • Drop argument-presence checking (-Ra) inside device functions

  • Harden the ptxas version check for NVIDIA offload to read the full output and avoid a SIGPIPE misreporting a ptxas error

16-bit Floating-Point

  • Support 16-bit floating-point vector casts, fixing COMPLEX(2)/COMPLEX(3) relational operations

  • Fix 16-bit floating-point negative-sign and unary-minus handling

  • Fix 16-bit complex conversion producing wrong complex initialization

  • Fix printing of 16-bit floating-point zero, NaN, and Infinity

  • Fix 16-bit floating-point SPACING, NEAREST, FRACTION, RRSPACING, EXPONENT, SET_EXPONENT, SCALE, and ANINT

  • Promote the second argument of NEAREST to 32-bit real

  • Fix FRACTION and SPACING for 16-bit floating-point Inf/NaN

Runtime Library

  • Zero reused memory for character ALLOCATE/DEALLOCATE for consistency across RHEL and SLES

  • Fix image synchronization during coarray CHANGE TEAM [CAST-39348]

Diagnostics

  • Add the missing error for an incorrect use of the MODULE prefix (C1557)

  • Fix redundant ANSI message ftn-1857 emission

  • Stop issuing spurious caution message ftn-1723 for compiler-generated arguments

  • Fix missing diagnostic message ftn-2117

  • Reduce false-positive duplicate-definition errors

Driver and Linking

  • Restore linking of device files passed with -Wc

  • Fix the -z relro/-z norelro linker workaround when libhugetlbfs is used [CAST-39350]

  • Search system libraries before CCE-bundled copies to fix link errors such as for -lunwind [CAST-39996]