Skip to content

Commit 08514a8

Browse files
maleadtclaude
andcommitted
Silence expected output from the native test suite.
- suppress the unbound-typevar warning emitted when defining the test method (does not work on 1.12, where `redirect_stderr` does not capture C-level output); - suppress FileCheck diagnostics from always_inline tests that are known to be broken on 1.13+. Also add a regression test for resolving CPU references in modules that call JIT-private `jl_` symbols (JuliaLang/julia#61527). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 29e082c commit 08514a8

1 file changed

Lines changed: 38 additions & 10 deletions

File tree

test/native.jl

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -324,8 +324,11 @@ end
324324
end
325325

326326
@testset "unbound typevars" begin
327-
mod = @eval module $(gensym())
328-
invalid_kernel() where {unbound} = return
327+
# suppress the warning Julia emits when defining a method with an unbound typevar
328+
mod = redirect_stderr(devnull) do
329+
@eval module $(gensym())
330+
invalid_kernel() where {unbound} = return
331+
end
329332
end
330333
@test_throws KernelError Native.code_llvm(devnull, mod.invalid_kernel, Tuple{})
331334
end
@@ -456,20 +459,27 @@ end
456459
Native.code_llvm(mod.g, Tuple{Int64}; dump_module=true, kernel=true)
457460
end
458461

459-
@test @filecheck(begin
460-
@check_not "@{{(julia|j)_expensive_[0-9]+}}"
461-
Native.code_llvm(mod.g, Tuple{Int64}; dump_module=true, kernel=true, always_inline=true)
462-
end) broken=broken
462+
# suppress FileCheck diagnostics when the failure is known and expected
463+
quiet(f) = broken ? redirect_stderr(f, devnull) : f()
464+
465+
@test quiet() do
466+
@filecheck begin
467+
@check_not "@{{(julia|j)_expensive_[0-9]+}}"
468+
Native.code_llvm(mod.g, Tuple{Int64}; dump_module=true, kernel=true, always_inline=true)
469+
end
470+
end broken=broken
463471

464472
@test @filecheck begin
465473
@check "@{{(julia|j)_expensive_[0-9]+}}"
466474
Native.code_llvm(mod.h, Tuple{Int64}; dump_module=true, kernel=true)
467475
end
468476

469-
@test @filecheck(begin
470-
@check_not "@{{(julia|j)_expensive_[0-9]+}}"
471-
Native.code_llvm(mod.h, Tuple{Int64}; dump_module=true, kernel=true, always_inline=true)
472-
end) broken=broken
477+
@test quiet() do
478+
@filecheck begin
479+
@check_not "@{{(julia|j)_expensive_[0-9]+}}"
480+
Native.code_llvm(mod.h, Tuple{Int64}; dump_module=true, kernel=true, always_inline=true)
481+
end
482+
end broken=broken
473483
end
474484

475485
@testset "function attributes" begin
@@ -495,6 +505,24 @@ end
495505
end
496506
end
497507

508+
@testset "CPU reference resolution" begin
509+
# JIT-private symbols like `jl_get_pgcstack_resolved` (JuliaLang/julia#61527) cannot
510+
# be looked up using `jl_cglobal`, so we should only resolve bindings that are
511+
# actually loaded from, leaving called functions alone.
512+
job, _ = Native.create_job(identity, (Nothing,))
513+
JuliaContext() do ctx
514+
mod = parse(LLVM.Module, """
515+
declare void @jl_get_pgcstack_resolved()
516+
517+
define void @entry() {
518+
call void @jl_get_pgcstack_resolved()
519+
ret void
520+
}""")
521+
GPUCompiler.prepare_execution!(job, mod)
522+
@test haskey(functions(mod), "jl_get_pgcstack_resolved")
523+
end
524+
end
525+
498526
end
499527

500528
############################################################################################

0 commit comments

Comments
 (0)