From 8b63a8c88c06cc1348879ae0f48bef1e2d10f278 Mon Sep 17 00:00:00 2001 From: Lukasz Samson Date: Mon, 22 Jun 2026 23:10:29 +0200 Subject: [PATCH] Include bitstring in domain keys Fixes #15515 --- lib/elixir/lib/module/types/descr.ex | 2 +- lib/elixir/test/elixir/module/types/descr_test.exs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/elixir/lib/module/types/descr.ex b/lib/elixir/lib/module/types/descr.ex index 8198124a56b..109a7f084a7 100644 --- a/lib/elixir/lib/module/types/descr.ex +++ b/lib/elixir/lib/module/types/descr.ex @@ -40,7 +40,7 @@ defmodule Module.Types.Descr do defguardp fields_size(fields) when length(fields) @domain_key_types :lists.sort( - [:binary, :integer, :float, :pid, :port, :reference] ++ + [:binary, :bitstring, :integer, :float, :pid, :port, :reference] ++ [:fun, :atom, :tuple, :map, :list] ) diff --git a/lib/elixir/test/elixir/module/types/descr_test.exs b/lib/elixir/test/elixir/module/types/descr_test.exs index ce65063fbb4..0d028004441 100644 --- a/lib/elixir/test/elixir/module/types/descr_test.exs +++ b/lib/elixir/test/elixir/module/types/descr_test.exs @@ -1053,6 +1053,13 @@ defmodule Module.Types.DescrTest do assert subtype?(t2, t1) + # An open map is open in every domain key, including :bitstring. + open_pid = open_map([{domain_key(:pid), pid()}]) + + for d <- [:bitstring, :binary, :integer, :float, :atom, :tuple, :map, :list] do + assert subtype?(closed_map([{[d], atom([:x])}]), open_pid) + end + t1_minus_t2 = opt_difference(t1, t2) refute empty?(t1_minus_t2) @@ -2258,7 +2265,7 @@ defmodule Module.Types.DescrTest do assert list( Enum.reduce( - [binary(), float(), pid(), port(), reference()] ++ + [binary(), bitstring_no_binary(), float(), pid(), port(), reference()] ++ [fun(), atom(), tuple(), open_map(), list(term(), term())], tuple([integer(), binary()]), fn domain, acc -> opt_union(acc, tuple([domain, term()])) end