• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

aio-libs / multidict / 35853788758
87%

Build:
DEFAULT BRANCH: master
Ran 23 Sep 2026 11:19AM UTC
Jobs 1
Files 42
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Sep 2026 11:18AM UTC coverage: 87.432%. Remained the same
35853788758

push

github

web-flow
Add a tool for diffing the code the C extension compiles to (#1529)

<!-- Thank you for your contribution! -->

## What do these changes do?

Adds `tools/codegen_diff.py`, which reports the functions GCC emits
differently before and after a change to the C extension. It builds
`multidict/_multidict.c` from a baseline ref and from the working tree
against the same interpreter headers, normalizes the fields that move
when code is relocated, and compares function by function.

The normalization is the point, in both directions. Without it a raw
`objdump` diff is unusable, because one instruction-length change shifts
every later label and untouched functions look modified. Normalizing too
much is the opposite failure: immediate operands and memory
displacements are deliberately left alone, so that a store moving to
another structure field is reported rather than folded away. The
disassembly is taken with relocations, because in a relocatable object
the target of an external call lives only in the relocation record.
`--self-test` compiles a pair of sources for each of those and checks
the difference is reported.

What remains is churn that is not a behavior change: a helper that gets
smaller frees inlining budget, and a stack slot that moves changes a
displacement. The report carries the two numbers that separate those
from a real difference, the instruction count and whether the set of
called symbols moved.

`--probe` compiles a caller-supplied translation unit instead of the
extension, which is how a helper that GCC always inlines, and that
therefore has no standalone copy in the object, gets looked at on its
own.

## Are there changes in behavior for the user?

No, it is a development tool. Nothing imports it, nothing in CI runs
it, and it is not packaged.

## Is it a substantial burden for the maintainers to support this?

It is stdlib Python with no new dependency, and nothing depends on it,
so it can be deleted if it stops earning its place. Two limi... (continued)

765 of 1530 branches covered (50.0%)

Branch coverage included in aggregate %.

7221 of 7604 relevant lines covered (94.96%)

1.9 hits per line

Jobs
ID Job ID Ran Files Coverage
1 MyPy - 35853788758.1 23 Sep 2026 11:19AM UTC 84
87.43
GitHub Action Run
Source Files on build 35853788758
  • Tree
  • List 42
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #35853788758
  • 937fd76b on github
  • Prev Build on master (#35853118928)
  • Next Build on master (#35855400641)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc