From 69121b1e7ad6ce4ce336a8389aee0b7ff8f877a7 Mon Sep 17 00:00:00 2001 From: Lukasz Samson Date: Fri, 19 Jun 2026 12:13:23 +0200 Subject: [PATCH] Report empty_list: true on dynamic() in list_of Fixes #15505 --- lib/elixir/lib/module/types/descr.ex | 2 +- lib/elixir/test/elixir/module/types/descr_test.exs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) 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