Case 04: No Change¶
| Field | Value |
|---|---|
| Verdict | ✅ NO_CHANGE |
| Category | No Change |
| Platforms | Linux, macOS, Windows |
| Flags | — |
Detected ChangeKinds |
— |
| Source files | browse on GitHub |
Category: Symbol API | Verdict: ✅ NO_CHANGE (exit 0)
What breaks¶
Nothing. Recompiling with the same source produces a bit-for-bit equivalent ABI. This case confirms the baseline toolchain works correctly.
Why abidiff catches it¶
abidiff exits 0 — no differences in the ABI XML representation.
Code (identical both versions)¶
Real Failure Demo¶
Severity: INFORMATIONAL (no ABI change — expected outcome)
Scenario: compile app against v1, swap in v2 .so without recompile.
# Build old library + app
gcc -shared -fPIC -g v1.c -o libfoo.so
gcc -g app.c -L. -lfoo -Wl,-rpath,. -o app
./app
# → stable_api(42) = 42
# Swap in new library (no recompile)
# v2.h is identical to v1.h — no .so yet
gcc -shared -fPIC -g v1.c -o libfoo.so # use same source, no change
./app
# → stable_api(42) = 42 (identical output)
Why INFORMATIONAL: no ABI change means no breakage — this is the ideal state for patch releases. Use this as a sanity check to confirm your build and test pipeline works correctly.
Reproduce manually¶
gcc -shared -fPIC -g v1.c -o libfoo_v1.so
gcc -shared -fPIC -g v1.c -o libfoo_v2.so # same source
abidw --out-file v1.xml libfoo_v1.so
abidw --out-file v2.xml libfoo_v2.so
abidiff v1.xml v2.xml
echo "exit: $?" # → 0
How to fix¶
N/A — this is the ideal state for patch releases.
Real-world example¶
CI pipelines that run abidiff on every PR use this as the baseline to catch regressions: any non-zero exit from abidiff triggers a review gate.
References¶
Source files¶
See also: Examples overview · All NO_CHANGE cases · Category: No Change.