summaryrefslogtreecommitdiffstats
path: root/filter.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-06-09 11:11:36 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-06-09 11:11:36 -0700
commite72f960431aa61185c40cf38a471b6d8b0924a58 (patch)
tree0a4cd996496a0b042667d689e1af7a87da5e6798 /filter.h
parent8187f1a3a27671d4d5b705901fa3fe30ed03cc5f (diff)
downloadtxr-e72f960431aa61185c40cf38a471b6d8b0924a58.tar.gz
txr-e72f960431aa61185c40cf38a471b6d8b0924a58.tar.bz2
txr-e72f960431aa61185c40cf38a471b6d8b0924a58.zip
optimizer: fix live set being unexpectedly nil.
The following test case throws an exception: (compile-toplevel '(when-match @(or @b @c) nil nil)) the reason is that in the optimizer, the local-liveness method resets the bl.live set of live registers to nil. The expectation is that it will be recalculated. However, what happens is that * stdlib/optimize.tl (basic-block): Initialize live slot to zero. (basic-blocks local-liveness): Reset bl.live to 0, rather than nil. The problem is that sometimes the block in question is not reached in the graph traversal (down in the same function) which is supposed to assign it a live value. This happens in the above test case, and it's not due to any bug: the block is not reached by the forward traversal because the block has become unreachable.
Diffstat (limited to 'filter.h')
0 files changed, 0 insertions, 0 deletions