@@ -928,7 +928,62 @@ defmodule Module.Types.IntegrationTest do
928928 assert_no_warnings ( files )
929929 end
930930
931- test "unions and intersections of open maps" do
931+ test "redundant clause checking of mixed open and closed maps" do
932+ files = % {
933+ "mixed_open_closed_maps.ex" => """
934+ defmodule MixedOpenClosedMaps do
935+ defmodule S1, do: defstruct([:name])
936+ defmodule S2, do: defstruct([:name])
937+ defmodule S3, do: defstruct([:name])
938+ defmodule S4, do: defstruct([:name])
939+ defmodule S5, do: defstruct([:name])
940+ defmodule S6, do: defstruct([:name])
941+ defmodule S7, do: defstruct([:name])
942+ defmodule S8, do: defstruct([:name])
943+ defmodule S9, do: defstruct([:name])
944+ defmodule S10, do: defstruct([:name])
945+ defmodule S11, do: defstruct([:name])
946+ defmodule S12, do: defstruct([:name])
947+ defmodule S13, do: defstruct([:name])
948+ defmodule S14, do: defstruct([:name])
949+ defmodule S15, do: defstruct([:name])
950+ defmodule S16, do: defstruct([:name])
951+ defmodule S17, do: defstruct([:name])
952+ defmodule S18, do: defstruct([:name])
953+
954+ defmodule SValue do
955+ defstruct [:value]
956+ end
957+
958+ def render(%S1{}), do: :ok
959+ def render(%S2{}), do: :ok
960+ def render(%S3{}), do: :ok
961+ def render(%S4{}), do: :ok
962+ def render(%S5{}), do: :ok
963+ def render(%S6{}), do: :ok
964+ def render(%S7{}), do: :ok
965+ def render(%S8{}), do: :ok
966+ def render(%S9{}), do: :ok
967+ def render(%S10{}), do: :ok
968+ def render(%S11{}), do: :ok
969+ def render(%S12{}), do: :ok
970+ def render(%S13{}), do: :ok
971+ def render(%S14{}), do: :ok
972+ def render(%S15{}), do: :ok
973+ def render(%S16{}), do: :ok
974+ def render(%S17{}), do: :ok
975+ def render(%S18{}), do: :ok
976+ # Having the closed map and the struct overlap on a key is important
977+ def render(%SValue{}), do: :ok
978+ def render(%{value: value}), do: value
979+ end
980+ """
981+ }
982+
983+ assert_no_warnings ( files )
984+ end
985+
986+ test "redundant clause checking of open maps with distinct keys" do
932987 files = % {
933988 "large_head.ex" => """
934989 defmodule LargeHead do
0 commit comments