Skip to content

Commit e6c893c

Browse files
ggcampinhoJosé Valim
authored andcommitted
Add meta generated to for/1 clauses with bitstrings (#7560)
Closes #7508. Signed-off-by: José Valim <[email protected]>
1 parent 705a637 commit e6c893c

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

lib/elixir/src/elixir_erl_for.erl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,30 +104,31 @@ build_inline_each(Ann, Clauses, Expr, {nil, _} = Into, Uniq, S) ->
104104
{elixir_erl:remote(Ann, lists, reverse, [ReduceExpr]), S};
105105
build_inline_each(Ann, Clauses, Expr, {bin, _, []}, Uniq, S) ->
106106
{InnerValue, SV} = build_var(Ann, S),
107+
Generated = erl_anno:set_generated(true, Ann),
107108

108109
InnerFun = fun(InnerExpr, InnerAcc) ->
109110
{'case', Ann, InnerExpr, [
110-
{clause, Ann,
111+
{clause, Generated,
111112
[InnerValue],
112113
[[elixir_erl:remote(Ann, erlang, is_binary, [InnerValue]),
113114
elixir_erl:remote(Ann, erlang, is_list, [InnerAcc])]],
114-
[{cons, Ann, InnerAcc, InnerValue}]},
115-
{clause, Ann,
115+
[{cons, Generated, InnerAcc, InnerValue}]},
116+
{clause, Generated,
116117
[InnerValue],
117118
[[elixir_erl:remote(Ann, erlang, is_bitstring, [InnerValue]),
118119
elixir_erl:remote(Ann, erlang, is_bitstring, [InnerAcc])]],
119120
[{bin, Ann, [
120121
{bin_element, Ann, InnerAcc, default, [bitstring]},
121122
{bin_element, Ann, InnerValue, default, [bitstring]}
122123
]}]},
123-
{clause, Ann,
124+
{clause, Generated,
124125
[InnerValue],
125126
[[elixir_erl:remote(Ann, erlang, is_bitstring, [InnerValue])]],
126127
[{bin, Ann, [
127128
{bin_element, Ann, elixir_erl:remote(Ann, erlang, iolist_to_binary, [InnerAcc]), default, [bitstring]},
128129
{bin_element, Ann, InnerValue, default, [bitstring]}
129130
]}]},
130-
{clause, Ann,
131+
{clause, Generated,
131132
[InnerValue],
132133
[],
133134
[elixir_erl:remote(Ann, erlang, error, [{tuple, Ann, [{atom, Ann, badarg}, InnerValue]}])]}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
defmodule Dialyzer.ForBitstring do
2+
def foo() do
3+
for a <- 1..3, into: "", do: <<a>>
4+
end
5+
end

lib/elixir/test/elixir/kernel/dialyzer_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ defmodule Kernel.DialyzerTest do
120120
assert_dialyze_no_warnings!(context)
121121
end
122122

123+
test "no warnings on for comprehensions with bitstrings", context do
124+
copy_beam!(context, Dialyzer.ForBitstring)
125+
assert_dialyze_no_warnings!(context)
126+
end
127+
123128
test "no warnings on for falsy check that always boolean", context do
124129
copy_beam!(context, Dialyzer.ForBooleanCheck)
125130
assert_dialyze_no_warnings!(context)

0 commit comments

Comments
 (0)