diff --git a/lib/elixir/lib/module/types/descr.ex b/lib/elixir/lib/module/types/descr.ex index b43d960ccf8..cbb174d8d5e 100644 --- a/lib/elixir/lib/module/types/descr.ex +++ b/lib/elixir/lib/module/types/descr.ex @@ -2256,7 +2256,7 @@ defmodule Module.Types.Descr do {dynamic, static} -> with {empty_list?, static_value} <- list_of_static(static) do empty_list? = - empty_list? or + empty_list? or dynamic == :term or match?( %{bitmap: bitmap} when (bitmap &&& @bit_empty_list) != 0, dynamic diff --git a/lib/elixir/test/elixir/module/types/descr_test.exs b/lib/elixir/test/elixir/module/types/descr_test.exs index 1c5ef36fb7c..a652d450103 100644 --- a/lib/elixir/test/elixir/module/types/descr_test.exs +++ b/lib/elixir/test/elixir/module/types/descr_test.exs @@ -1755,6 +1755,7 @@ defmodule Module.Types.DescrTest do assert list_of(non_empty_list(integer(), list(term()))) == {false, term()} assert list_of(list(integer()) |> opt_union(list(integer(), integer()))) == :badproperlist assert list_of(list(integer()) |> opt_union(integer())) == :badproperlist + assert list_of(dynamic()) == {true, dynamic()} assert list_of(dynamic(list(integer()))) == {true, dynamic(integer())} assert list_of(dynamic(list(integer(), atom()))) == {true, nil} assert list_of(dynamic(non_empty_list(integer(), atom()))) == :badproperlist