Skip to content

Regression between MOI 0.9.20 and 0.9.21, still present with 0.9.22 #1378

@dourouc05

Description

@dourouc05

It's probably one of the strangest errors I've ever seen in Julia. While working on ConstraintProgrammingExtensions' bridges (code at commit JuliaConstraints/ConstraintProgrammingExtensions.jl@18eb085), I got this error when updating to MOI 0.9.22 (from 0.9.20):

LoadError: syntax: unsupported `const` declaration on local variable around C:\Users\Thibaut\.julia\packages\MathOptInterface\1EYfq\src\Utilities\struct_of_constraints.jl:269

The relevant line of struct_of_constraints.jl does not really contain a const declaration, but it's in a macro:

function $MOIU.constraints(

This is reproducible in the GitHub Actions test environment: https://github.com/dourouc05/ConstraintProgrammingExtensions.jl/runs/2704982333

With 0.9.20, I have no such error, only failing tests:

   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.6.0 (2021-03-24)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

(@v1.6) pkg> add MathOptInterface@0.9.20
    Updating registry at `C:\Users\Thibaut\.julia\registries\General`
    Updating git-repo `https://github.com/JuliaRegistries/General.git`
   Resolving package versions...
   Installed MathOptInterface ─ v0.9.20
    Updating `C:\Users\Thibaut\.julia\environments\v1.6\Project.toml`
  [b8f27783] ↓ MathOptInterface v0.9.21 ⇒ v0.9.20
    Updating `C:\Users\Thibaut\.julia\environments\v1.6\Manifest.toml`
  [6e4b80f9] ↓ BenchmarkTools v0.7.0 ⇒ v0.5.0
  [b8f27783] ↓ MathOptInterface v0.9.21 ⇒ v0.9.20
  Progress [========================================>]  9/9
9 dependencies successfully precompiled in 37 seconds (76 already precompiled)

julia> include(raw"C:\Users\Thibaut\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl")
model = MOIB.Constraint.SingleBridgeOptimizer{ConstraintProgrammingExtensions.Bridges.BinPacking2MILPBridge{Int64}, MOIU.MockOptimizer{MILPModel{Int64}}}
with 0 constraint bridges
with inner model MOIU.MockOptimizer{MILPModel{Int64}}
MOIB.is_bridged(model, MOI.VectorOfVariables, CP.BinPacking{Int}) = true
FixedCapacityBinPacking2BinPacking: Error During Test at C:\Users\Thibaut\.julia\dev\ConstraintProgrammingExtensions\test\Bridges\set_fixedcapacitybinpacking.jl:1
  Got exception outside of a @test
  MathOptInterface.UnsupportedConstraint{MathOptInterface.VectorOfVariables, ConstraintProgrammingExtensions.FixedCapacityBinPacking{Int64}}: `MathOptInterface.VectorOfVariables`-in-`ConstraintProgrammingExtensions.FixedCapacityBinPacking{Int64}` constraint is not supported by the model.
  Stacktrace:
    [1] add_constraint(model::MILPModel{Int64}, f::MathOptInterface.VectorOfVariables, s::ConstraintProgrammingExtensions.FixedCapacityBinPacking{Int64})
      @ MathOptInterface.Utilities ~\.julia\packages\MathOptInterface\5WwpK\src\Utilities\model.jl:674
    [2] add_constraint(mock::MathOptInterface.Utilities.MockOptimizer{MILPModel{Int64}}, func::MathOptInterface.VectorOfVariables, set::ConstraintProgrammingExtensions.FixedCapacityBinPacking{Int64})
      @ MathOptInterface.Utilities ~\.julia\packages\MathOptInterface\5WwpK\src\Utilities\mockoptimizer.jl:124
    [3] add_constraint(b::MathOptInterface.Bridges.Constraint.SingleBridgeOptimizer{ConstraintProgrammingExtensions.Bridges.BinPacking2MILPBridge{Int64}, MathOptInterface.Utilities.MockOptimizer{MILPModel{Int64}}}, f::MathOptInterface.VectorOfVariables, s::ConstraintProgrammingExtensions.FixedCapacityBinPacking{Int64})
      @ MathOptInterface.Bridges ~\.julia\packages\MathOptInterface\5WwpK\src\Bridges\bridge_optimizer.jl:1345
    [4] macro expansion
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\Bridges\set_fixedcapacitybinpacking.jl:26 [inlined]
    [5] macro expansion
      @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Test\src\Test.jl:1151 [inlined]
    [6] top-level scope
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\Bridges\set_fixedcapacitybinpacking.jl:2
    [7] include(fname::String)
      @ Base.MainInclude .\client.jl:444
    [8] macro expansion
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\Bridges\Bridges.jl:29 [inlined]
    [9] macro expansion
      @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Test\src\Test.jl:1151 [inlined]
   [10] macro expansion
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\Bridges\Bridges.jl:29 [inlined]
   [11] macro expansion
      @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Test\src\Test.jl:1151 [inlined]
   [12] top-level scope
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\Bridges\Bridges.jl:2
   [13] include(fname::String)
      @ Base.MainInclude .\client.jl:444
   [14] macro expansion
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl:17 [inlined]
   [15] macro expansion
      @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Test\src\Test.jl:1151 [inlined]
   [16] top-level scope
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl:17
   [17] include(fname::String)
      @ Base.MainInclude .\client.jl:444
   [18] top-level scope
      @ REPL[2]:1
   [19] eval
      @ .\boot.jl:360 [inlined]
   [20] eval_user_input(ast::Any, backend::REPL.REPLBackend)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:139
   [21] repl_backend_loop(backend::REPL.REPLBackend)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:200
   [22] start_repl_backend(backend::REPL.REPLBackend, consumer::Any)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:185
   [23] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:317
   [24] run_repl(repl::REPL.AbstractREPL, consumer::Any)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:305
   [25] (::Base.var"#874#876"{Bool, Bool, Bool})(REPL::Module)
      @ Base .\client.jl:387
   [26] #invokelatest#2
      @ .\essentials.jl:708 [inlined]
   [27] invokelatest
      @ .\essentials.jl:706 [inlined]
   [28] run_main_repl(interactive::Bool, quiet::Bool, banner::Bool, history_file::Bool, color_set::Bool)
      @ Base .\client.jl:372
   [29] exec_options(opts::Base.JLOptions)
      @ Base .\client.jl:302
   [30] _start()
      @ Base .\client.jl:485
Test Summary:                            | Pass  Error  Total
ConstraintProgrammingExtensions          |    3      1      4
  Bridges                                |    3      1      4
    BinPacking                           |    3      1      4
      FixedCapacityBinPacking2BinPacking |    3      1      4
ERROR: LoadError: Some tests did not pass: 3 passed, 0 failed, 1 errored, 0 broken.
in expression starting at C:\Users\Thibaut\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl:13

The full error message with MOI 0.9.21 or 0.9.22:

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.6.0 (2021-03-24)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using ConstraintProgrammingExtensions
[ Info: Precompiling ConstraintProgrammingExtensions [b65d079e-ed98-51d9-b0db-edee61a5c5f8]

julia> include(raw"C:\Users\Thibaut\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl")
ConstraintProgrammingExtensions: Error During Test at C:\Users\Thibaut\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl:13
  Got exception outside of a @test
  LoadError: syntax: unsupported `const` declaration on local variable around C:\Users\Thibaut\.julia\packages\MathOptInterface\1EYfq\src\Utilities\struct_of_constraints.jl:269
  Stacktrace:
    [1] top-level scope
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\Bridges\Bridges.jl:1
    [2] include(fname::String)
      @ Base.MainInclude .\client.jl:444
    [3] macro expansion
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl:17 [inlined]
    [4] macro expansion
      @ C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\Test\src\Test.jl:1151 [inlined]
    [5] top-level scope
      @ ~\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl:17
    [6] include(fname::String)
      @ Base.MainInclude .\client.jl:444
    [7] top-level scope
      @ REPL[2]:1
    [8] eval
      @ .\boot.jl:360 [inlined]
    [9] eval_user_input(ast::Any, backend::REPL.REPLBackend)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:139
   [10] repl_backend_loop(backend::REPL.REPLBackend)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:200
   [11] start_repl_backend(backend::REPL.REPLBackend, consumer::Any)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:185
   [12] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:317
   [13] run_repl(repl::REPL.AbstractREPL, consumer::Any)
      @ REPL C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:305
   [14] (::Base.var"#874#876"{Bool, Bool, Bool})(REPL::Module)
      @ Base .\client.jl:387
   [15] #invokelatest#2
      @ .\essentials.jl:708 [inlined]
   [16] invokelatest
      @ .\essentials.jl:706 [inlined]
   [17] run_main_repl(interactive::Bool, quiet::Bool, banner::Bool, history_file::Bool, color_set::Bool)
      @ Base .\client.jl:372
   [18] exec_options(opts::Base.JLOptions)
      @ Base .\client.jl:302
   [19] _start()
      @ Base .\client.jl:485
  in expression starting at C:\Users\Thibaut\.julia\dev\ConstraintProgrammingExtensions\test\Bridges\Bridges.jl:1
Test Summary:                   | Error  Total
ConstraintProgrammingExtensions |     1      1
ERROR: LoadError: Some tests did not pass: 0 passed, 0 failed, 1 errored, 0 broken.
in expression starting at C:\Users\Thibaut\.julia\dev\ConstraintProgrammingExtensions\test\runtests.jl:13

It started appearing with JuliaConstraints/ConstraintProgrammingExtensions.jl@18eb085, not before.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions