aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2011-03-14 15:15:09 +0100
committerBjörn Gustavsson <[email protected]>2011-03-23 11:07:52 +0100
commitc7188f410f5d2688783dfbb850e1e55718885f87 (patch)
treefb4eec23ff53a0ec9b1c4ff5e4d25d1718194745 /lib/stdlib
parentb412280c8591300b22386c21fb109da3a697c0c9 (diff)
downloadotp-c7188f410f5d2688783dfbb850e1e55718885f87.tar.gz
otp-c7188f410f5d2688783dfbb850e1e55718885f87.tar.bz2
otp-c7188f410f5d2688783dfbb850e1e55718885f87.zip
v3_core: Fix variable incorrectly unbound after binary match
In the following code: m(<<Sz:8,_:Sz/binary>>) -> Sz = wrong. the Sz variable is supposed to be bound in the function header and the matching "Sz = wrong" should cause a badarg exception. But what happens is that the Sz variables seems to be unbound and the matching succeds and the m/1 function returns 'wrong'. If the Sz variable is used directly (not matched), it will have the expected value. Thus the following code: m(<<Sz:8,_:Sz/binary>>) -> Sz. will correctly return the value of Sz that was matched out from the binary. Reported-by: Bernard Duggan
Diffstat (limited to 'lib/stdlib')
-rw-r--r--lib/stdlib/test/erl_eval_SUITE.erl11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl
index 6b2eb78e2c..4b59cee99e 100644
--- a/lib/stdlib/test/erl_eval_SUITE.erl
+++ b/lib/stdlib/test/erl_eval_SUITE.erl
@@ -571,6 +571,17 @@ otp_5269(Config) when is_list(Config) ->
B:A>> <- [<<16:8,19:16>>],
<<X:8>> <- [<<B:8>>]].",
[19]),
+ ?line check(fun() ->
+ (fun (<<A:1/binary, B:8/integer, _C:B/binary>>) ->
+ case A of
+ B -> wrong;
+ _ -> ok
+ end
+ end)(<<1,2,3,4>>) end,
+ "(fun(<<A:1/binary, B:8/integer, _C:B/binary>>) ->"
+ " case A of B -> wrong; _ -> ok end"
+ " end)(<<1, 2, 3, 4>>).",
+ ok),
ok.
otp_6539(doc) ->