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

rieske / trans / 34111469960
94%

Build:
DEFAULT BRANCH: master
Ran 07 Sep 2026 10:30AM UTC
Jobs 1
Files 274
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

07 Sep 2026 10:26AM UTC coverage: 94.413%. Remained the same
34111469960

push

github

web-flow
fix: spill registers before a store through a pointer (#296)

A store through a pointer can reach any object whose address escaped,
but lvalueAssign emitted the store and left the register file alone.
A value read into a register before the store was still read from that
register afterwards:

    int x = 5, s = 0;
    int *p = &x;
    s += x;
    *p = 9;
    s += x;      /* 14 9 expected, 10 5 emitted */

    movslq -32(%rbp), %rbx    ; x -> %rbx (5)
    ...
    movl   %edx, (%rdi)       ; *p = 9, memory at -32(%rbp) is now 9
    addl   %ebx, %edx         ; %rbx still holds 5

Identical at -O0 and -O1, so it was never the IR passes. Systematic
rather than an edge case: a generator emitting read-then-store through
an aliasing pointer failed 450 of 500 runs.

Spilling before the store is the whole fix. Value::isStored() is
!assignedRegister, so every bound register counts as unstored and
spillGeneralPurposeRegisters() writes back and frees all of them;
lvalueAssign simply never called it. The order matters: spilling after
the store would write the pre-store value back over it.

The va_ paths and calls already spill and were unaffected, as are
stores through a struct member, an array element, a callee's pointer
argument, an sret destination, and a pointer to a pointer.

Costs 0.83% in emitted assembly over 60 programs, from spilling on
every pointer store rather than only for objects whose address is
known to have escaped. Computing that set in startProcedure, which
sees the whole body, would recover it; not worth the machinery yet.

15565 of 16486 relevant lines covered (94.41%)

155818.09 hits per line

Coverage Regressions

Lines Coverage ∆ File
10
96.66
0.01% home/runner/work/trans/trans/src/codegen/StackMachine.cpp
Jobs
ID Job ID Ran Files Coverage
1 34111469960.1 07 Sep 2026 10:30AM UTC 274
94.41
GitHub Action Run
Source Files on build 34111469960
  • Tree
  • List 274
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34111469960
  • 2abb2ca8 on github
  • Prev Build on master (#34106813654)
  • Next Build on master (#34116200815)
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