Skip to content

Possible bug: Context deactivation mismatches #429

Open
@maleadt

Description

@maleadt

Triggering a diagnostic as part of a nested @dispose ctx=Context(), it seems possible to hit the wrong context destructor:

julia> @device_code_agx @metal identity(nothing)
; GPUCompiler.CompilerJob{GPUCompiler.MetalCompilerTarget, Metal.MetalCompilerParams}(MethodInstance for identity(::Nothing), CompilerConfig for GPUCompiler.MetalCompilerTarget, 0x0000000000007b77)

ERROR: Deactivating wrong context
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] deactivate(ctx::LLVM.Context)
    @ LLVM ~/.julia/packages/LLVM/5DlHM/src/state.jl:31
  [3] JuliaContext(f::Metal.var"#146#154"{GPUCompiler.CompilerJob{GPUCompiler.MetalCompilerTarget, Metal.MetalCompilerParams}}; kwargs::@Kwargs{})
    @ GPUCompiler ~/.julia/packages/GPUCompiler/Y4hSX/src/driver.jl:54
  [4] JuliaContext(f::Function)
    @ GPUCompiler ~/.julia/packages/GPUCompiler/Y4hSX/src/driver.jl:42
  [5] macro expansion
    @ ~/Julia/pkg/Metal/src/compiler/compilation.jl:100 [inlined]
  [6] macro expansion
    @ ~/.julia/packages/ObjectiveC/uWFwg/src/os.jl:264 [inlined]
  [7] compile(job::GPUCompiler.CompilerJob)
    @ Metal ~/Julia/pkg/Metal/src/compiler/compilation.jl:98
  [8] actual_compilation(cache::Dict{…}, src::Core.MethodInstance, world::UInt64, cfg::GPUCompiler.CompilerConfig{…}, compiler::typeof(Metal.compile), linker::typeof(Metal.link))
    @ GPUCompiler ~/.julia/packages/GPUCompiler/Y4hSX/src/execution.jl:237
  [9] cached_compilation(cache::Dict{Any, Any}, src::Core.MethodInstance, cfg::GPUCompiler.CompilerConfig{GPUCompiler.MetalCompilerTarget, Metal.MetalCompilerParams}, compiler::Function, linker::Function)
    @ GPUCompiler ~/.julia/packages/GPUCompiler/Y4hSX/src/execution.jl:151
 [10] macro expansion
    @ ~/Julia/pkg/Metal/src/compiler/execution.jl:185 [inlined]
 [11] macro expansion
    @ ./lock.jl:267 [inlined]
 [12] mtlfunction(f::typeof(identity), tt::Type{Tuple{Nothing}}; name::Nothing, kwargs::@Kwargs{})
    @ Metal ~/Julia/pkg/Metal/src/compiler/execution.jl:180
 [13] mtlfunction(f::typeof(identity), tt::Type{Tuple{Nothing}})
    @ Metal ~/Julia/pkg/Metal/src/compiler/execution.jl:178
 [14] macro expansion
    @ ~/Julia/pkg/Metal/src/compiler/execution.jl:85 [inlined]
 [15] top-level scope
    @ ~/.julia/packages/GPUCompiler/Y4hSX/src/reflection.jl:206
 [16] top-level scope
    @ ~/Julia/pkg/Metal/src/initialization.jl:58

caused by: LLVM error: file doesn't start with bitcode header
Stacktrace:
 [1] handle_diagnostic(diag_ref::Ptr{LLVM.API.LLVMOpaqueDiagnosticInfo}, args::Ptr{Nothing})
   @ LLVM ~/.julia/packages/LLVM/5DlHM/src/core/context.jl:134
Some type information was truncated. Use `show(err)` to see complete types.

The offending code was:

    @dispose ctx=Context() metallib_module=parse(LLVM.Module, metallib_binary) begin
        @show metallib_module
    end

where the parse was triggering a diagnostic.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions