Skip to content

Commit 9d8df88

Browse files
committed
Only compute literal intersection if C is not bdd bot
1 parent 743fa8a commit 9d8df88

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

lib/elixir/lib/module/types/descr.ex

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4836,8 +4836,7 @@ defmodule Module.Types.Descr do
48364836
#
48374837
# b1 and not (c2 or u2) : bdd_bot : b1 and not (d2 or u2)
48384838
#
4839-
# Both extremes have (b1 and not u2),
4840-
# so we compute it first and only once.
4839+
# Both extremes have (b1 and not u2), so we compute it once.
48414840
bdd1_minus_u2 = bdd_difference(bdd1, u2)
48424841
{lit2, bdd_difference(bdd1_minus_u2, c2), :bdd_bot, bdd_difference(bdd1_minus_u2, d2)}
48434842

@@ -5017,9 +5016,12 @@ defmodule Module.Types.Descr do
50175016
bdd_difference(bdd_leaf_intersection(leaf, d, intersection), lit)
50185017
)
50195018

5020-
case intersection.(leaf, lit) do
5021-
:bdd_bot -> rest
5022-
new_leaf -> bdd_union(bdd_leaf_intersection(new_leaf, c, intersection), rest)
5019+
with true <- c != :bdd_bot,
5020+
new_leaf = intersection.(leaf, lit),
5021+
true <- new_leaf != :bdd_bot do
5022+
bdd_union(bdd_leaf_intersection(new_leaf, c, intersection), rest)
5023+
else
5024+
_ -> rest
50235025
end
50245026
end
50255027
end

0 commit comments

Comments
 (0)