From a7296d59951f858fa4eadfac4fc0187585317f72 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 17 Apr 2023 15:16:07 -0400 Subject: [PATCH] subtype: replace leaf-bound typevars if they would result in Tuple{Union{}} otherwise Refs: #49111 --- src/subtype.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/subtype.c b/src/subtype.c index 518c566193b70..20ef6139ee886 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -2760,10 +2760,9 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind // given x<:T<:x, substitute x for T varval = vb->ub; } - // TODO: `vb.occurs_cov == 1` here allows substituting Tuple{<:X} => Tuple{X}, - // which is valid but changes some ambiguity errors so we don't need to do it yet. - else if ((/*vb->occurs_cov == 1 || */is_leaf_bound(vb->ub)) && - !var_occurs_invariant(u->body, u->var, 0)) { + // TODO: `vb.occurs_cov == 1`, we could also substitute Tuple{<:X} => Tuple{X}, + // but it may change some ambiguity errors so we don't need to do it yet. + else if (vb->occurs_cov && is_leaf_bound(vb->ub) && !jl_has_free_typevars(vb->ub)) { // replace T<:x with x in covariant position when possible varval = vb->ub; }