aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJohn Högberg <[email protected]>2019-02-20 13:30:34 +0100
committerJohn Högberg <[email protected]>2019-02-20 18:40:24 +0100
commit35a6b4336f0d850189207d3b627c5f51b8106026 (patch)
treeee06c7b07bf3b71870c89ed6c9e0ff125984eba8 /lib
parentdf58128b0669229c03e1d9ec34783ddf769cadbe (diff)
downloadotp-35a6b4336f0d850189207d3b627c5f51b8106026.tar.gz
otp-35a6b4336f0d850189207d3b627c5f51b8106026.tar.bz2
otp-35a6b4336f0d850189207d3b627c5f51b8106026.zip
beam_validator: Remember definitions on assignment
Diffstat (limited to 'lib')
-rw-r--r--lib/compiler/src/beam_validator.erl7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index 512ef34b26..4eb6df0528 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -1528,13 +1528,16 @@ update_eq_types(LHS, RHS, Vst0) ->
assign_1(Src, Dst, Vst0) ->
Type = get_move_term_type(Src, Vst0),
- Vst = set_type_reg(Type, Dst, Vst0),
+ Def = get_def(Src, Vst0),
+
+ Vst = set_type_reg_expr(Type, Def, Dst, Vst0),
#vst{current=St0} = Vst,
#st{aliases=Aliases0} = St0,
+
Aliases = Aliases0#{Src=>Dst,Dst=>Src},
- St = St0#st{aliases=Aliases},
+ St = St0#st{aliases=Aliases},
Vst#vst{current=St}.
set_aliased_type(Type, Reg, #vst{current=#st{aliases=Aliases}}=Vst0) ->