aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2013-08-19 15:54:30 +0200
committerBjörn Gustavsson <[email protected]>2013-08-19 15:54:30 +0200
commit81ac8ee8eba862d4e8a12f88f15e2ee526d74dbd (patch)
tree1d7f85ce6186750f25e07527afe404f2bd1f81b4
parent0f01c8195a9810fe5ee881440c949ccab15c5db7 (diff)
parent8e10c8aac09de9165deb1c04cd908c8057c7f173 (diff)
downloadotp-81ac8ee8eba862d4e8a12f88f15e2ee526d74dbd.tar.gz
otp-81ac8ee8eba862d4e8a12f88f15e2ee526d74dbd.tar.bz2
otp-81ac8ee8eba862d4e8a12f88f15e2ee526d74dbd.zip
Merge branch 'bjorn/compiler/beam_bool-crash/OTP-11240' into maint
* bjorn/compiler/beam_bool-crash/OTP-11240: Fix compiler crash for 'B and B' guard
-rw-r--r--lib/compiler/src/beam_bool.erl3
-rw-r--r--lib/compiler/test/guard_SUITE.erl8
2 files changed, 11 insertions, 0 deletions
diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl
index cf5455dfde..124abd13c1 100644
--- a/lib/compiler/src/beam_bool.erl
+++ b/lib/compiler/src/beam_bool.erl
@@ -425,6 +425,9 @@ bopt_tree([], Forest, Pre) ->
safe_bool_op(N, Ar) ->
erl_internal:new_type_test(N, Ar) orelse erl_internal:comp_op(N, Ar).
+bopt_bool_args([V0,V0], Forest0) ->
+ {V,Forest} = bopt_bool_arg(V0, Forest0),
+ {[V,V],Forest};
bopt_bool_args(As, Forest) ->
mapfoldl(fun bopt_bool_arg/2, Forest, As).
diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl
index 5656d23090..a0a9bb7ddd 100644
--- a/lib/compiler/test/guard_SUITE.erl
+++ b/lib/compiler/test/guard_SUITE.erl
@@ -813,8 +813,16 @@ and_guard(Config) when is_list(Config) ->
?line ok = relprod({'Set',a,b}, {'Set',a,b}),
+ ok = and_same_var(42),
+ {'EXIT',{if_clause,_}} = (catch and_same_var(x)),
ok.
+and_same_var(V) ->
+ B = is_integer(V),
+ if
+ B or B -> ok
+ end.
+
relprod(R1, R2) when (erlang:size(R1) =:= 3) and (erlang:element(1,R1) =:= 'Set'), (erlang:size(R2) =:= 3) and (erlang:element(1,R2) =:= 'Set') ->
ok.