I am attaching a candidate fix for this bug, created with assistance from Codex. I hope that it will prove acceptable when reviewed by SDCC's maintainers.

I did the following testing of the patch:

  • complete diagnostic-validation results (support/valdiag) for the default targets.
  • complete runtime regression (support/regression) results for ucz80.

i.e.
make -j2
make -C support/regression clean-results
make -C support/regression -j2 test-ucz80
make -C support/valdiag clean
make -C support/valdiag -j2

Summary for 'ucz80': 0 failures, 36740 tests, 6407 test cases, 7347620 bytes, 1613638336 ticks
Summary for 'mcs51': 0 failures, 652 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'mcs51-large': 0 failures, 650 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'mcs51-stack-auto': 0 failures, 651 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'ds390': 0 failures, 638 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'z80': 0 failures, 641 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'z180': 0 failures, 640 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'r2k': 0 failures, 640 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'r4k': 0 failures, 640 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'sm83': 0 failures, 640 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'tlcs90': 0 failures, 640 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'hc08': 0 failures, 639 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 's08': 0 failures, 639 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'mos6502': 0 failures, 639 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'stm8': 0 failures, 642 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'f8': 0 failures, 638 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'pdk13': 0 failures, 641 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'pdk14': 0 failures, 639 tests, 374 test cases, 0 bytes, 0 ticks
Summary for 'pdk15': 0 failures, 637 tests, 374 test cases, 0 bytes, 0 ticks