diff options
author | Björn Gustavsson <[email protected]> | 2014-08-15 15:37:42 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2014-09-01 12:41:17 +0200 |
commit | 81b02eabf162608cba491f1be66dc6226e0aef0c (patch) | |
tree | 83061e2f2021c740ddf36e223453d6d5df1e2a38 /bootstrap/lib/compiler/ebin | |
parent | c56edba2912e12f15226a1e130fdfac25c29b98f (diff) | |
download | otp-81b02eabf162608cba491f1be66dc6226e0aef0c.tar.gz otp-81b02eabf162608cba491f1be66dc6226e0aef0c.tar.bz2 otp-81b02eabf162608cba491f1be66dc6226e0aef0c.zip |
sys_core_fold: Eliminate name capture bug
The scope is supposed to contain all variables that are currently
live. We need this information for certain optimizations to
avoid capturing a name (a name that is in the scope must be renamed;
for an example, see move_let_into_expr/2 or any function that calls
sub_subst_scope/1). We also use the scope to optimize sub_del_var/2
and sub_is_val/2.
When optimizing case expressions, the scope could be reset to an
empty list (because sub_new/0 was called instead of sub_new/1).
That could cause name capture if inlining was turned on.
As simple way to force this bug is to uncomment the
"-define(DEBUG, 1)." near the beginning of the file. Without this
correction, most files in the test suite fail to compile.
Diffstat (limited to 'bootstrap/lib/compiler/ebin')
0 files changed, 0 insertions, 0 deletions