Corrupt tree after wrongly striping out variables of type bottom
|
|
Bugzilla Link |
831 |
Created on |
Mar 08, 2011 14:14 |
Resolution |
FIXED |
Resolved on |
Oct 11, 2011 09:29 |
Version |
svn |
OS |
All |
Architecture |
PC |
Attachments |
831.sac |
Extended Description
This failure can be seen in axis_control_rev_cat.sac. See any recent Masterrun.
The following summary is from Stephan and lazily pasted from an email:
I have looked at axis_control_rev_cat.sac. The problem there seems to be
with the type checker. We end up in a situation where after opt:tup2 [type upgrade] return values of main become bottom, however the return type of main does not. Thus, compilation is not aborted. Instead, all bottom variables are stripped out, including the return value. This leads to a corrupted tree.
On the one hand, one should never just strip away a vardec node without
checking its use. On the other hand, if a bottom vardec node would
contribute directly to the result of a function, then that entire function
should have been marked as bottom.