Case 112: LP64 โ ILP64 integer-model switch (oneMKL MKL_INT 32โ64)¶
| Field | Value |
|---|---|
| Verdict | ๐ด BREAKING |
| Category | Breaking |
| Platforms | Linux |
| Flags | ABI break |
Detected ChangeKinds |
integer_model_changed |
| Source files | examples/case112_lp64_ilp64/ |
Category: Binary ABI break / numerical-library ABI hazard | Verdict: ๐ด BREAKING
What changed¶
v1 is the LP64 interface: MKL_INT is int (32-bit). v2 is the
ILP64 interface: MKL_INT is long (64-bit). Every public entry point
that takes a dimension, stride, or count โ and the functions that return one โ
flips its integer width at the same time. The function names are unchanged
(they are extern "C"), so a consumer linked against the LP64 build resolves
the ILP64 symbols at load time but passes/reads integers with the wrong width:
array indices and lengths are silently truncated or sign-extended.
This is the highest-value numerical-library ABI hazard: for example oneMKL ships both interfaces and they are not interchangeable.
How abicheck catches it¶
integer_model_changed fires because a large fraction of public integer
parameters/returns flip width together and the MKL_INT integer typedef
changes its underlying size (int โ long), which is the signature of an
LP64โILP64 switch. Individual func_params_changed / func_return_changed
findings are still reported per symbol; the grouped diagnostic names the root
cause.
Files¶
v1.h/v2.hโ the LP64 and ILP64 header versionsv1.c/v2.cโ the two library buildsapp.cโ consumer built against the LP64 interface
Source files¶
CMakeLists.txtapp.cv1.cv1.hv2.cv2.h
See also: Examples overview ยท All BREAKING cases ยท Category: Breaking.