aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2017-10-01 06:40:43 +0200
committerGitHub <[email protected]>2017-10-01 06:40:43 +0200
commit71a40658a0cef8b3e25df3a8e48a72d0563a89bf (patch)
treef7bc66142a4cde58f927adffcf4b728099280d49 /lib/compiler/src
parent59042d04ad3d3371132a21423f8ea0e99f120a8b (diff)
parent7715f437ab9a789e0500873b6002a49bfe69009c (diff)
downloadotp-71a40658a0cef8b3e25df3a8e48a72d0563a89bf.tar.gz
otp-71a40658a0cef8b3e25df3a8e48a72d0563a89bf.tar.bz2
otp-71a40658a0cef8b3e25df3a8e48a72d0563a89bf.zip
Merge pull request #1588 from bjorng/bjorn/compiler/fix-match-context/ERL-490
Fix incorrect internal consistency failure for binary matching code
Diffstat (limited to 'lib/compiler/src')
-rw-r--r--lib/compiler/src/beam_validator.erl6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index 00901077d3..be8908dd6b 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -1430,13 +1430,13 @@ merge_types(bool, {atom,A}) ->
merge_bool(A);
merge_types({atom,A}, bool) ->
merge_bool(A);
-merge_types(#ms{id=Id1,valid=B0,slots=Slots},
- #ms{id=Id2,valid=B1,slots=Slots}) ->
+merge_types(#ms{id=Id1,valid=B1,slots=Slots1},
+ #ms{id=Id2,valid=B2,slots=Slots2}) ->
Id = if
Id1 =:= Id2 -> Id1;
true -> make_ref()
end,
- #ms{id=Id,valid=B0 band B1,slots=Slots};
+ #ms{id=Id,valid=B1 band B2,slots=min(Slots1, Slots2)};
merge_types(T1, T2) when T1 =/= T2 ->
%% Too different. All we know is that the type is a 'term'.
term.