File 0847-v3_core-Handle-combined-with-a-bad-alias-in-patterns.patch of Package erlang
From f397dfadcb686aa0d528d69ed8205d3d6490cd8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Wed, 5 Feb 2020 12:42:49 +0100
Subject: [PATCH 11/13] v3_core: Handle ++ combined with a bad alias in
patterns
---
lib/compiler/src/v3_core.erl | 2 ++
lib/compiler/test/match_SUITE.erl | 5 +++++
2 files changed, 7 insertions(+)
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index 1466e24104..36aa0a3667 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -841,6 +841,8 @@ sanitize({tuple,L,Ps0}) ->
sanitize({map,L,Ps0}) ->
Ps = [sanitize(V) || {map_field_exact,_,_,V} <- Ps0],
{tuple,L,Ps};
+sanitize({op,L,_Name,P1,P2}) ->
+ {tuple,L,[sanitize(P1),sanitize(P2)]};
sanitize(P) -> P.
make_bool_switch(L, E, V, T, F, #core{in_guard=true}) ->
diff --git a/lib/compiler/test/match_SUITE.erl b/lib/compiler/test/match_SUITE.erl
index ce467622ae..d1da114d3f 100644
--- a/lib/compiler/test/match_SUITE.erl
+++ b/lib/compiler/test/match_SUITE.erl
@@ -255,6 +255,7 @@ non_matching_aliases(_Config) ->
none = mixed_aliases({a,42}),
none = mixed_aliases(42),
+ {'EXIT',{{badmatch,bar},_}} = (catch plus_plus_prefix()),
{'EXIT',{{badmatch,42},_}} = (catch nomatch_alias(42)),
{'EXIT',{{badmatch,job},_}} = (catch entirely()),
{'EXIT',{{badmatch,associates},_}} = (catch printer()),
@@ -279,8 +280,12 @@ mixed_aliases([X] = #{key:=X}) -> {k,X};
mixed_aliases([b] = <<X:8>>) -> {b,X};
mixed_aliases(<<X:8>> = {a,X}) -> {c,X};
mixed_aliases([X] = <<X:8>>) -> {d,X};
+mixed_aliases([] ++ (foo = [])) -> o;
mixed_aliases(_) -> none.
+plus_plus_prefix() ->
+ [] ++ (foo = []) = bar.
+
nomatch_alias(I) ->
{ok={A,B}} = id(I),
{A,B}.
--
2.16.4