coin-or / coin-or/python-mip

CBC (of cbcbox) crashes with SIGILL on Linux

Open
#420 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
Linear Programming
Stars
600
Forks
108
PR merge metrics
No merged PRs in 30d

Description

**Note**
This bug relates to [cbcbox](https://github.com/h-g-s/cbcbox), which is the Python distribution of [CBC](https://github.com/coin-or/Cbc) the recent versions of python-mip depend on, so it clearly also affects python-mip users. I am reporting this bug here because the bug tracker at the cbcbox project is not active. @h-g-s

**Describe the bug**
CBC crashes reproducibly on Linux with a SIGILL (illegal instruction) error on some computers with older x86_64 CPUs, e.g. on Intel's Core i7 Ivy-Bridge series that does not support AVX2.

**To Reproduce**
Install cbcbox using pip and run:
```
$ cbc stein45.mps -solve -quit
Welcome to the CBC MILP Solver
Version: Devel (unstable)
Build Date: Mar 23 2026
command line - stein45.mps -solve -quit (default strategy 1)
At line 15 NAME STEIN45
At line 16 ROWS
At line 349 COLUMNS
At line 895 RHS
At line 1062 BOUNDS
At line 1108 ENDATA
Problem STEIN45 has 331 rows, 45 columns and 1034 elements
Coin0008I STEIN45 read with 0 errors
Continuous objective value is 22 - 0.030073 seconds
Cgl0004I processed model has 331 rows, 45 columns (45 integer (45 of which binary)) and 1034 elements
Coin0011I Conflict graph built in 0.001 seconds, density: 1.123%
Cgl0015I Clique Strengthening extended 0 cliques, 0 were dominated
Illegal instruction
$
```
The problem arises with any input file I tried, for simplicity I chose the `STEIN45` example here, which is a test input file from the cbcbox project.

Even selecting generic mode explicitly did not help:
```
$ CBCBOX_BUILD=generic cbc stein45.mps -solve -quit
[cbcbox] CBCBOX_BUILD=generic
[cbcbox] binary : .venv/lib/python3.11/site-packages/cbcbox/cbc_dist/bin/cbc
[cbcbox] lib dir : .venv/lib/python3.11/site-packages/cbcbox/cbc_dist/lib
[cbcbox] libs : libCbc.so, libCbc.so.0, libCbc.so.0.0.0, libClp.so, libClp.so.0, libClp.so.0.0.0, libopenblas.so, libopenblas.so.0, libopenblasp-r0.3.31.so
Welcome to the CBC MILP Solver
Version: Devel (unstable)
Build Date: Mar 23 2026
command line - stein45.mps -solve -quit (default strategy 1)
At line 15 NAME STEIN45
At line 16 ROWS
At line 349 COLUMNS
At line 895 RHS
At line 1062 BOUNDS
At line 1108 ENDATA
Problem STEIN45 has 331 rows, 45 columns and 1034 elements
Coin0008I STEIN45 read with 0 errors
Continuous objective value is 22 - 0.019176 seconds
Cgl0004I processed model has 331 rows, 45 columns (45 integer (45 of which binary)) and 1034 elements
Coin0011I Conflict graph built in 0.001 seconds, density: 1.123%
Cgl0015I Clique Strengthening extended 0 cliques, 0 were dominated
Illegal instruction
$
```

On newer processors with AVX2 support the commands above work well in generic and also in avx2 mode.

**Expected behavior**
CBC completes without error also on older CPUs.

**Desktop (please complete the following information):**
- Operating System, version: Debian GNU/Linux 12
- Python version: 3.11
- Python-MIP version: 1.17
- cbcbox version: 2.929

Please let me know if you need any further information.

**Additional context**
When not specifying which executable shall be used, how can I see which one was selected?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.