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
CEILINGintrinsic
Packaging
Add a standalone
cray-fortranmodule, provided as both a TCL environment module and a Lua (lmod) module, that adds thecrayftnbinary and man pages toPATHandMANPATH. 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
-hipa0for 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
ccemodule from the CCE release packages (replaced bycray-fortran)Drop the pkgconfig files used by the Cray PE compiler drivers and the
set-default,moduleless, andcompiler-driverCCE packages
Documentation
Remove documentation for the unsupported
-hdevelopoption 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
CONTIGUOUSflag not being set on some descriptorsFix 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
f128handling
OpenMP
Fix incorrect OpenMP variable scoping when inlining, including
FIRSTPRIVATEandPRIVATE/SHAREDhandling
OpenACC
Fix a Fortran internal error with OpenACC kernels loops by respecting the suppress flag during translation [CAST-39993]
Fix handling of
privateandfirstprivateclauses onacc loop seq
GPU Offload
Fix Cray Fortran OpenMP offload interoperability with the amdclang
ATTACHflag 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, andCHDIR)
Diagnostics
Improve error checking for mismatched types in executable statements without over-triggering
Flush
stdout/stderrbefore a compiler abort so diagnostics are not lost [CAST-39930]
Driver and Linking
Add
--allow-shlib-undefinedwhen 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
groupprivatedirective 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
SAVEincorrectly applied to members of nestedBLOCKconstructs [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_SUBNORMALandIEEE_NEGATIVE_SUBNORMALvaluesFix pointer assignment of assumed-length character dope vectors (substring pointers) [CAST-39271]
Fix host association and visibility for variables and objects in nested
BLOCKconstructs, 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 CONCURRENTreduction variablesAllow typing a
NAMELISTobject after theNAMELISTstatement, issuing an ANSI message instead of a hard errorFix incorrect front-end scoping for
DO CONCURRENT, includingLOCALlocalityFix
PRESENT()for an unallocated actual passed to anOPTIONALdummy [CAST-39457]Keep searching module files, with a warning, instead of erroring when one is malformed
Fix passing an empty string to an
OPTIONALargument and related empty-string handlingFix 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
ASSOCIATEnames used insideBLOCKconstructsFix compilation errors using renamed derived types, following all rename links during type resolution
Fix an internal error with C boolean arrays by ensuring
LOGICALtype conversion [CAST-40007]Fix a spurious bounds-check error for empty array arguments, including at
-O0Fix a segfault by not calling the type-bound-procedure routine for
INTENT(OUT) ALLOCATABLEdummy arguments [CAST-40336]
Optimizer and Codegen
Prevent unintended Cray-LibSci pattern matching at
-hpatternlevel 1 and belowFix incorrect address computation caused by using the wrong pointee type
Fix incorrect results for
DO CONCURRENTwith 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) enabledFix a compile failure on AArch64 by disabling an erroneous assert
Fix a compiler abort from
COUNTFix incorrect parsing of the
optimize(-g)directiveFix
-hnofortran_ptr_aliasbeing ignoredFix 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
noaliasattribute from type-incompatible arguments, fixing invalid LLVM bitcode at-O0Fix 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
SAVEcoarrayFix a compiler crash from a stale function reference in call-expression lowering [CAST-39818]
Fix an AArch64
sincoslowering regressionFix 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
WORKDISTRIBUTEregression by restoring teams on the hostAllow discontiguous array sections in OpenMP
TARGET UPDATEAdd and improve diagnostic checking for the OpenMP doacross
SINKiteration vectorSupport the
IFclause on the OpenMPTEAMSconstruct, including compound constructs and on the acceleratorAllow named constants in OpenMP
firstprivate/sharedclausesAllow array intrinsic functions in OpenMP
WORKDISTRIBUTEFix incorrect results for an OpenMP
lastprivateloop induction variable at-hipa0Fix
IF-clause movement for compound OpenMP directivesFix 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
DISPATCHconstruct with-g -O0Fix parsing of the OpenMP
ERRORdirective clause with nested parenthesesFix OpenMP
DETACHclause handlingFix an incorrect check for
EXITout of an OpenMP loop withCOLLAPSE[CAST-39496]Fix spurious type-mismatch errors for the
MAPclause with a mapper identifierFix OpenMP failure with directives in
PUREprocedures and restore SIMD support (OpenMP 6.0 relaxation)Fix dope-vector data placement for
FIRSTPRIVATEFortran pointers in offload [CAST-39761]
OpenACC
Fix an OpenACC
test_data_createregression by requiring a legal region before merging accelerator regionsImprove 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
KERNELSperformance 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 timeoutDrop argument-presence checking (
-Ra) inside device functionsHarden the ptxas version check for NVIDIA offload to read the full output and avoid a
SIGPIPEmisreporting a ptxas error
16-bit Floating-Point
Support 16-bit floating-point vector casts, fixing
COMPLEX(2)/COMPLEX(3)relational operationsFix 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, andANINTPromote the second argument of
NEARESTto 32-bit realFix
FRACTIONandSPACINGfor 16-bit floating-point Inf/NaN
Runtime Library
Zero reused memory for character
ALLOCATE/DEALLOCATEfor consistency across RHEL and SLESFix image synchronization during coarray
CHANGE TEAM[CAST-39348]
Diagnostics
Add the missing error for an incorrect use of the
MODULEprefix (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
-WcFix the
-z relro/-z norelrolinker workaround when libhugetlbfs is used [CAST-39350]Search system libraries before CCE-bundled copies to fix link errors such as for
-lunwind[CAST-39996]