Skip to content

Commit 7c5a9a2

Browse files
authored
Merge pull request erlang#11390 from lucioleKi/isabell/compiler/fix/erlangGH-11366/OTP-20267
compiler: Fix binding error in comprehensions with `compr_assign`
2 parents cccb7a5 + 0d4c9ae commit 7c5a9a2

2 files changed

Lines changed: 9 additions & 2 deletions

File tree

lib/compiler/src/v3_core.erl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2386,8 +2386,9 @@ get_qual_anno(Abstract) -> element(2, Abstract).
23862386
%% generator(Line, Generator, Guard, State) -> {Generator',State}.
23872387
%% Transform a given generator into its #igen{} representation.
23882388

2389-
generator(Line, {match,L,P,E}, Gs, StrictPats, St0) ->
2390-
generator(Line, {generate_strict,L,P,{cons,L,E,{nil,L}}}, Gs, StrictPats, St0);
2389+
generator(Line, {match,L,P0,E0}, Gs, StrictPats, St0) ->
2390+
{P1, E1} = rewrite_compr_assign(P0, E0),
2391+
generator(Line, {generate_strict,L,P1,{cons,L,E1,{nil,L}}}, Gs, StrictPats, St0);
23912392
generator(Line, {Generate,Lg,P0,E}, Gs, StrictPats, St0)
23922393
when Generate =:= generate;
23932394
Generate =:= generate_strict ->
@@ -2664,6 +2665,11 @@ list_gen_pattern(P0, Line, St) ->
26642665
nomatch -> {nomatch,add_warning(Line, {nomatch,pattern}, St)}
26652666
end.
26662667

2668+
rewrite_compr_assign(P1, {match,L2,P2,E}) ->
2669+
rewrite_compr_assign({match,L2,P1,P2}, E);
2670+
rewrite_compr_assign(P, E) ->
2671+
{P, E}.
2672+
26672673
%% is_guard_test(Expression) -> true | false.
26682674
%% Test if a general expression is a guard test.
26692675
%%

lib/compiler/test/lc_SUITE.erl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ assignment_generator(_Config) ->
333333
?assertEqual(singleton_generator_6(Seq),
334334
assignment_generator_6(Seq)),
335335

336+
[ok] = [ok || X = V = true, V, X],
336337
ok.
337338

338339
assignment_generator_1(L) ->

0 commit comments

Comments
 (0)