
#8598: IO hack in demand analyzer gets in the way of CPR
-------------------------------------+------------------------------------
Reporter: nomeata | Owner:
Type: task | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.6.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Comment (by nomeata):
A shower later I believe I have a quite decent solution:
Currently, the CPR lattice has these elements:
{{{
NoCPR
/ \
ReProd RetSum
\ /
BotCPR
}}}
where `BotCPR` not only tells us that there is not going to be a result,
but also that the function is ''diverging'' (and hence puts a hyperstrict
demand on free variables). For the hypothesised „clean exit of the IO
function“ we need something in between:
{{{
NoCPR
/ \
ReProd RetSum
\ /
ExitCPR
|
BotCPR
}}}
`ExitCPR` behaves like `BotCPR` when with regard to `lub`ing it with
another result (i.e. whatever the other things knows about the result
stays there), but has a `