diff options
| author | Björn Gustavsson <[email protected]> | 2012-01-18 09:04:05 +0100 | 
|---|---|---|
| committer | Björn Gustavsson <[email protected]> | 2012-01-18 15:50:57 +0100 | 
| commit | 4c6e2c2d775bc785db7de174e12227e87d2bc542 (patch) | |
| tree | d4dc2557c3bbfca28169dbe5ff99f8d8d1620ca5 /bootstrap/lib/compiler | |
| parent | 11d255627033bb96e7c737d35badbacae32a8631 (diff) | |
| download | otp-4c6e2c2d775bc785db7de174e12227e87d2bc542.tar.gz otp-4c6e2c2d775bc785db7de174e12227e87d2bc542.tar.bz2 otp-4c6e2c2d775bc785db7de174e12227e87d2bc542.zip | |
compiler: Correct live calculation when get/1 is used in try...catch
In the following code excerpt, the instruction marked below was
incorrectly removed:
    .
    .
    .
    {'try',{y,2},{f,TryCaseLabel}}.
    {bif,get,{f,0},[{x,0}],{x,0}}.
    {move,{x,1},{y,0}}.
    {move,{x,3},{y,1}}.             <======= Incorrectly removed
    {jump,{f,TryEndLabel}}.
  {label,TryEndLabel}.
    {try_end,{y,2}}.
    {deallocate,3}.
    return.
  {label,TryCaseLabel}.
    {try_case,{y,2}}.
    .
    .
    .
beam_utils indicated that {y,1} was not used at TryEndLabel,
which by itself is correct. But it is still not safe to remove
the instruction, because {y,1} might be used at TryCaseLabel
if an exception occurs.
Noticed-by: Eric Merritt
Diffstat (limited to 'bootstrap/lib/compiler')
0 files changed, 0 insertions, 0 deletions
