Julia 1.14 compatibility; CI step selection - #979
Merged
Merged
Conversation
Adopt GPUCompiler's commit message grammar, where `[only ...]` and `[skip ...]` take a comma-separated list of step tags, e.g. `[only nightly]` or `[skip special, docs]`. Nightly is now selected with `nightly` instead of `pre`. To save CI time, draft pull requests only test the newest Julia release and nightly; older releases and the special tests run once the pull request is marked ready. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Plain overlays taint every call that can reach them, even through an error path, which prevents concrete evaluation. Since Julia 1.14 guards array growth with checked arithmetic (JuliaLang/julia#62797), this broke keyword-argument handling in kernels, e.g. `range(start; step, length)` as used by LinearAlgebra's `diagind`, leaving calls to `push!` in device code. CUDA.jl and AMDGPU.jl already use consistent overlays. The `Random.Sampler` override returns a different sampler than the host method, so it keeps using a plain overlay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The randn/randexp overrides `@invoke` Random's AbstractFloat fallback
with a `Type{<:AbstractFloat}` annotation, which builds a UnionAll when
the kernel runs. Julia 1.14 no longer folds such freshly constructed
types to constants (JuliaLang/julia#62001), so the kernel ended up
calling `jl_type_unionall` and failed to compile. Hoist the signature
into a constant.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Julia 1.14 specializes type-valued arguments on `Core.TypeEgal{T}`
(JuliaLang/julia#62001), so a broadcast of a type constructor has
`TypeEgal{T}` as its function type parameter. That isn't matched by
the `Type{T}` in our adaptor rule, which replaces the non-isbits type
with a closure, making such broadcasts fail to compile. Match any
subtype of `Type{T}` instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LinearAlgebra's `det` of triangular matrices now reduces with `Base.Fix1(convert, T)`, which isn't isbits (JuliaLang/LinearAlgebra.jl#1658). Convert `Fix1` and `Fix2` capturing a type into closures that carry the type as a parameter instead, like we already do for broadcasting types. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Arguments are encoded before conversion, and the unconverted type decided whether an argument occupies a slot. When conversion yields a ghost type, e.g. for `Base.Fix1(convert, T)`, the kernel doesn't have a parameter for it, so all subsequent arguments were passed in the wrong slot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #979 +/- ##
==========================================
- Coverage 85.37% 85.04% -0.33%
==========================================
Files 77 89 +12
Lines 5660 6387 +727
==========================================
+ Hits 4832 5432 +600
- Misses 828 955 +127 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
maleadt
marked this pull request as ready for review
September 25, 2026 20:10
maleadt
marked this pull request as draft
September 25, 2026 20:10
maleadt
force-pushed
the
tb/julia-1.14
branch
from
September 26, 2026 06:28
c0bb45a to
c5e5377
Compare
maleadt
marked this pull request as ready for review
September 26, 2026 06:29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
On main, nightly (1.14) fails in
gpuarrays/uniformscaling(jl_genericmemory_copytoin device code) and more.[only X]/[skip X]take comma-separated step tags, as in GPUCompiler:julia,nightly(waspre),special,validation,docs,benchmarks, andtestsfor all test steps. Draft PRs only test the newest release (1.13) and nightly. Older releases and the special steps run once the PR is ready. Steps share their definition through YAML anchors.checked_add(base: Guard allocation arithmetic from overflow JuliaLang/julia#62797), that broke keyword-argument handling in kernels, e.g.range(start; step, length)in LinearAlgebra'sdiagind(A + I).@device_overridenow uses@consistent_overlay, as CUDA.jl and AMDGPU.jl do. TheRandom.Sampleroverride returns a different sampler than the host method, so it stays a plain overlay; otherwise concrete evaluation substitutes the host'sSamplerRangeNDL.@invoke randn(rng::AbstractRNG, T::Type{<:AbstractFloat})built aUnionAllat run time on 1.14 (type system: Add TypeEgal kind JuliaLang/julia#62001). The signature is now a constant.Core.TypeEgal{T}, which theBroadcasted{…, Type{T}}adaptor rule didn't match, soFloat32.(x)failed to compile. It now matches<:Type{T}.detnow reduces withBase.Fix1(convert, T)(Check that matrix is square indettriangular fast-path JuliaLang/LinearAlgebra.jl#1658).Fix1/Fix2capturing a type are converted to closures.Fix1that converts to a ghost closure shifted every later argument, sosum(Base.Fix1(convert, Float32), x)returned 0. The slot is now decided on the converted type.The full test suite passes locally on nightly (1.14.0-DEV.3363, M3 Pro), with JuliaGPU/GPUCompiler.jl#956 for the write-barrier fix. That's in GPUCompiler 2.9, which this PR now requires.