Skip to content

OrdinaryDiffEqDefault_GPU: Autoswitch GPU @test_nowarn fails on GPUCompiler link_library!/link_libraries! deprecation warnings #3649

@ChrisRackauckas-Claude

Description

@ChrisRackauckas-Claude

Summary

`test (OrdinaryDiffEqDefault_GPU, 1, self-hosted, ...)` fails on master because `lib/OrdinaryDiffEqDefault/test/gpu/autoswitch.jl` wraps each `solve(...)` in `@test_nowarn`, but a recent GPUCompiler release now emits two deprecation warnings during the JIT, which trip the `@test_nowarn` assertion. The solve itself succeeds.

Failing job

`test (OrdinaryDiffEqDefault_GPU, 1, self-hosted, ...)` -- run 26008121486, job 76443398538. Same job ID fails the same way on previous master pushes; this is not specific to PR #3646.

Reproduction

`lib/OrdinaryDiffEqDefault/test/gpu/autoswitch.jl`:

```julia
problem = ODEProblem(f, CUDA.ones(1), (0.0, 1.0))
stiffalg = Rosenbrock23()
for alg in (AutoDP5, AutoTsit5, AutoVern6, AutoVern7, AutoVern8, AutoVern9)
@test_nowarn solve(problem, alg(stiffalg), save_everystep = false, save_start = false)
end
```

Warnings that trip `@test_nowarn`

```
┌ Warning: 3-arg `link_libraries!(job, mod, undefined_fns)` is deprecated; migrate your override to the 2-arg form `link_libraries!(job, mod)`. ...
└ @ Core :-1

┌ Warning: `GPUCompiler.link_library!` is deprecated; call `LLVM.link!(mod, copy(lib))` directly, or `LLVM.link!(mod, lib; only_needed=true)` with a freshly-parsed library.
└ @ Core ~/github-runners/demeter3-3/.julia/packages/GPUCompiler/KwfWk/src/deprecated.jl:15


Result: \`Autoswitch GPU | 5 passed, 1 failed, 0 errored, 0 broken\`.

## Diagnosis

The deprecations come from GPUCompiler -- a transitive dependency, not OrdinaryDiffEq -- shipping deprecation warnings on a CUDA.jl/GPUCompiler.jl version bump that landed in this CI's installed package set. The OrdinaryDiffEq-side \"fix\" options are:

1. Wait for the CUDA.jl / GPUCompiler.jl stack to migrate off the deprecated 3-arg \`link_libraries!\` / \`link_library!\` (the deprecation message even tells the caller how). This is upstream-side.
2. Replace \`@test_nowarn solve(...)\` with \`@test solve(...) isa SciMLBase.ODESolution\` (or similar), since the test's real intent is \"this completes without erroring on the GPU\" -- catching every upstream deprecation warning is incidental and brittle.

Option (2) is the small local fix, but it loosens what the test guards. I am **not** unilaterally applying it because per the project's policy on tolerance/test loosening, I want to confirm with @ChrisRackauckas whether this should wait on the upstream fix or get pragmatically rewritten as \`@test\`.

## Bisect

The trigger is a GPUCompiler.jl package version, not an OrdinaryDiffEq commit -- there is no commit in this repo that introduces the regression. It will reappear on every CI run until either (a) the upstream packages drop the deprecation paths or (b) the test is changed locally.

## Notes

- This is a master-side failure -- it reproduces on a clean checkout of master.
- It is not caused by PR #3646. Filed at @ChrisRackauckas's direction by his subagent.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions