Summary
After SOCtoNonConvexQuadBridge was added in cuOpt.jl 26.06, calling MOI.delete on a bridged VectorOfVariables in SecondOrderCone constraint crashes Julia 1.12.x's JIT compiler with signal 11 (SIGSEGV in jl_type_infer).
Observed in
Nightly run 28223429126 — all 7 wheel-tests-cuopt jobs fail with thirdparty jump.
Crash call stack
test_conic_SecondOrderCone_negative_initial_bound
→ MOI.Test.runtests (bridge optimizer)
→ bridge_optimizer.jl:765 (delete)
→ Variable/map.jl:652 (call_in_context)
→ jl_type_infer / jl_compile_method_internal ← SIGSEGV here
The SOCtoNonConvexQuadBridge.delete cleanup calls MOI.delete on the ScalarAffineFunction in GreaterThan constraint it added for the t ≥ 0 row. This triggers a deeply nested dispatch chain through MOI's variable bridge map call_in_context that crashes Julia 1.12.x's type inferencer.
Affected tests (all call MOI.delete on a bridged SOC constraint)
test_conic_SecondOrderCone_negative_initial_bound ← newly exposed, not yet excluded
test_conic_SecondOrderCone_no_initial_bound — already excluded
test_conic_SecondOrderCone_negative_post_bound_2 — already excluded
test_conic_SecondOrderCone_negative_post_bound_3 — already excluded
Short-term fix
PR to cuOpt.jl adds test_conic_SecondOrderCone_negative_initial_bound to the same exclude list as the other three tests.
Root cause investigation needed
- Determine whether this is a Julia 1.12.x JIT regression or a type-stability issue in cuOpt.jl's MOI wrapper that makes the dispatch chain too deep.
- If it's a Julia regression, report to JuliaLang/julia and consider pinning to Julia 1.11.x in CI.
- If it's a type-stability issue in
cuOpt.jl, add @nospecialize annotations or implement a native delete path for the SOC bridge.
Summary
After
SOCtoNonConvexQuadBridgewas added in cuOpt.jl 26.06, callingMOI.deleteon a bridgedVectorOfVariables in SecondOrderConeconstraint crashes Julia 1.12.x's JIT compiler with signal 11 (SIGSEGV injl_type_infer).Observed in
Nightly run
28223429126— all 7wheel-tests-cuoptjobs fail withthirdparty jump.Crash call stack
The
SOCtoNonConvexQuadBridge.deletecleanup callsMOI.deleteon theScalarAffineFunction in GreaterThanconstraint it added for thet ≥ 0row. This triggers a deeply nested dispatch chain through MOI's variable bridge mapcall_in_contextthat crashes Julia 1.12.x's type inferencer.Affected tests (all call
MOI.deleteon a bridged SOC constraint)test_conic_SecondOrderCone_negative_initial_bound← newly exposed, not yet excludedtest_conic_SecondOrderCone_no_initial_bound— already excludedtest_conic_SecondOrderCone_negative_post_bound_2— already excludedtest_conic_SecondOrderCone_negative_post_bound_3— already excludedShort-term fix
PR to cuOpt.jl adds
test_conic_SecondOrderCone_negative_initial_boundto the same exclude list as the other three tests.Root cause investigation needed
cuOpt.jl, add@nospecializeannotations or implement a nativedeletepath for the SOC bridge.