Like this:
Expressions by stack frame: #0 Calling bar at line 9 (0x7fbe2a60ea10,0x7fbe2b86ca30) x : 1 S32b #1 Calling foo (0x7fbe2a60e2e0,0x7fbe2b86cc98) bar : &code{bar} (0x7fbe2a60e2e0,0x7fbe2b86cce0) x : 0 S32b
Or in exploded graph:
This way it's instantly obvious which x is equal to 1 and which x is equal to 0.
Additionally, the separate section for the backtrace is removed from the graphviz dumps, and the respective code is deduplicated with LocationContext::dumpStack() which is also used for crash dumps.
It might be not clear where is the current location context in some cases (or annoying to supply location context every time you want to dump the program state - it is not even necessarily available), so i made a simple auto-detection of the freshest location context in which the environment has at least one entry, which would be run unless the context is specified explicitly.
The dump is a bit weird for blocks, but nevertheless it represents how the analyzer currently works: