diff --git a/lib/elixir/src/elixir_erl_pass.erl b/lib/elixir/src/elixir_erl_pass.erl index 9a65052fe97..d8b10a716ac 100644 --- a/lib/elixir/src/elixir_erl_pass.erl +++ b/lib/elixir/src/elixir_erl_pass.erl @@ -628,7 +628,8 @@ translate_remote(Left, Right, Meta, Args, S) -> [TOne, TTwo] -> {{op, Ann, Right, TOne, TTwo}, SA} end; {inline_pure, Result} -> - translate(Result, Ann, S); + Generated = erl_anno:set_generated(true, Ann), + translate(Result, Generated, S); {inline_args, NewArgs} -> {TLeft, SL} = translate(Left, Ann, S), {TArgs, SA} = translate_args(NewArgs, Ann, SL), diff --git a/lib/elixir/test/elixir/fixtures/dialyzer/opaque_inline.ex b/lib/elixir/test/elixir/fixtures/dialyzer/opaque_inline.ex new file mode 100644 index 00000000000..ce224ee523b --- /dev/null +++ b/lib/elixir/test/elixir/fixtures/dialyzer/opaque_inline.ex @@ -0,0 +1,10 @@ +defmodule Dialyzer.OpaqueInline do + @spec bar(MapSet.t()) :: term() + def bar(set) do + set + end + + def foo() do + bar(MapSet.new([1, 2, 3])) + end +end diff --git a/lib/elixir/test/elixir/kernel/dialyzer_test.exs b/lib/elixir/test/elixir/kernel/dialyzer_test.exs index ba5cbfb5bce..615f946b0d9 100644 --- a/lib/elixir/test/elixir/kernel/dialyzer_test.exs +++ b/lib/elixir/test/elixir/kernel/dialyzer_test.exs @@ -32,6 +32,7 @@ defmodule Kernel.DialyzerTest do :elixir_env, :elixir_erl_pass, :maps, + :sets, ArgumentError, Atom, Code, @@ -45,6 +46,7 @@ defmodule Kernel.DialyzerTest do List, Macro, Macro.Env, + MapSet, Module, Protocol, String, @@ -176,6 +178,11 @@ defmodule Kernel.DialyzerTest do assert_dialyze_no_warnings!(context) end + test "no warning on inlined calls returning opaque", context do + copy_beam!(context, Dialyzer.OpaqueInline) + assert_dialyze_no_warnings!(context) + end + defp copy_beam!(context, module) do name = "#{module}.beam" File.cp!(Path.join(context.base_dir, name), Path.join(context.outdir, name))