aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2014-03-14 11:53:34 +0100
committerBjörn Gustavsson <[email protected]>2014-03-14 11:53:34 +0100
commit92be9deadf3cb217f60f0e4dd8c6ff626918b2f1 (patch)
tree1ba878d3631c0fd04f63cc3287dc0c5a1bf3669d
parentdde1023b527eecaddb0c398eeed11df4e834f994 (diff)
parent3abbbeec85268f243b7c97f569ad4da40babd8c9 (diff)
downloadotp-92be9deadf3cb217f60f0e4dd8c6ff626918b2f1.tar.gz
otp-92be9deadf3cb217f60f0e4dd8c6ff626918b2f1.tar.bz2
otp-92be9deadf3cb217f60f0e4dd8c6ff626918b2f1.zip
Merge branch 'nox/compiler/beam_bool-mixed-boolean'
* nox/compiler/beam_bool-mixed-boolean: Properly detect reused boolean values in beam_bool
-rw-r--r--lib/compiler/src/beam_bool.erl7
-rw-r--r--lib/compiler/test/andor_SUITE.erl2
2 files changed, 6 insertions, 3 deletions
diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl
index d01f9ee13d..5a4621dc37 100644
--- a/lib/compiler/src/beam_bool.erl
+++ b/lib/compiler/src/beam_bool.erl
@@ -438,9 +438,10 @@ bopt_bool_args(As, Forest) ->
mapfoldl(fun bopt_bool_arg/2, Forest, As).
bopt_bool_arg({T,_}=R, Forest) when T =:= x; T =:= y; T =:= tmp ->
- Val = case gb_trees:get(R, Forest) of
- any -> {test,is_eq_exact,fail,[R,{atom,true}]};
- Val0 -> Val0
+ Val = case gb_trees:lookup(R, Forest) of
+ {value,any} -> {test,is_eq_exact,fail,[R,{atom,true}]};
+ {value,Val0} -> Val0;
+ none -> throw(mixed)
end,
{Val,gb_trees:delete(R, Forest)};
bopt_bool_arg(Term, Forest) ->
diff --git a/lib/compiler/test/andor_SUITE.erl b/lib/compiler/test/andor_SUITE.erl
index d79696df38..b5408ecd8f 100644
--- a/lib/compiler/test/andor_SUITE.erl
+++ b/lib/compiler/test/andor_SUITE.erl
@@ -171,6 +171,8 @@ t_and_or(Config) when is_list(Config) ->
false = ?GUARD(erlang:'not'(erlang:'and'(bar, True))),
false = ?GUARD(erlang:'not'(erlang:'not'(erlang:'and'(bar, True)))),
+ true = (fun (X = true) when X or true or X -> true end)(True),
+
ok.
t_andalso(Config) when is_list(Config) ->