diff options
author | Björn Gustavsson <[email protected]> | 2018-03-12 13:04:18 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2018-03-14 11:29:01 +0100 |
commit | 741e5b36684c80fead2283f57fabcf8b6e981af0 (patch) | |
tree | be0761a312f005856144260c19357038235d9616 | |
parent | c896f08f5c028b1e31290e6a5502597401acd39f (diff) | |
download | otp-741e5b36684c80fead2283f57fabcf8b6e981af0.tar.gz otp-741e5b36684c80fead2283f57fabcf8b6e981af0.tar.bz2 otp-741e5b36684c80fead2283f57fabcf8b6e981af0.zip |
Teach beam_utils:replace_labels/4 to handle recv_{mark,set}
The missing support for renumbering labels in recv_mark
and recv_set did not seem to cause any problems, probably because
the insructions are introduced late and their labels would keep
their numbers. But it there will definitely be a problem if the
recv_mark and recv_set instructions would be introduced much earlier.
-rw-r--r-- | lib/compiler/src/beam_utils.erl | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl index 814cfb8265..047cd5a569 100644 --- a/lib/compiler/src/beam_utils.erl +++ b/lib/compiler/src/beam_utils.erl @@ -801,6 +801,10 @@ replace_labels_1([{wait,{f,Lbl}}|Is], Acc, D, Fb) -> replace_labels_1(Is, [{wait,{f,label(Lbl, D, Fb)}}|Acc], D, Fb); replace_labels_1([{wait_timeout,{f,Lbl},To}|Is], Acc, D, Fb) -> replace_labels_1(Is, [{wait_timeout,{f,label(Lbl, D, Fb)},To}|Acc], D, Fb); +replace_labels_1([{recv_mark=Op,{f,Lbl}}|Is], Acc, D, Fb) -> + replace_labels_1(Is, [{Op,{f,label(Lbl, D, Fb)}}|Acc], D, Fb); +replace_labels_1([{recv_set=Op,{f,Lbl}}|Is], Acc, D, Fb) -> + replace_labels_1(Is, [{Op,{f,label(Lbl, D, Fb)}}|Acc], D, Fb); replace_labels_1([{bif,Name,{f,Lbl},As,R}|Is], Acc, D, Fb) when Lbl =/= 0 -> replace_labels_1(Is, [{bif,Name,{f,label(Lbl, D, Fb)},As,R}|Acc], D, Fb); replace_labels_1([{gc_bif,Name,{f,Lbl},Live,As,R}|Is], Acc, D, Fb) when Lbl =/= 0 -> |