Skip to content

Commit 57a47b3

Browse files
committed
Also check eqc in intersect_typevar (fixes #11367)
1 parent 2e26314 commit 57a47b3

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

src/jltypes.c

+14
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,20 @@ static jl_value_t *intersect_typevar(jl_tvar_t *a, jl_value_t *b,
754754
break;
755755
}
756756
}
757+
for(i=0; i < eqc->n; i+=2) {
758+
if (eqc->data[i] == b && !jl_is_typevar(eqc->data[i+1])) {
759+
if (jl_types_equal((jl_value_t*)a, eqc->data[i+1])) {
760+
JL_GC_POP();
761+
return (jl_value_t*)a;
762+
}
763+
jl_value_t *ti = jl_type_intersection((jl_value_t*)a, eqc->data[i+1]);
764+
if (ti == (jl_value_t*)jl_bottom_type) {
765+
JL_GC_POP();
766+
return ti;
767+
}
768+
break;
769+
}
770+
}
757771
}
758772
extend((jl_value_t*)a, b, penv);
759773
if (jl_is_typevar(b)) {

test/core.jl

+6
Original file line numberDiff line numberDiff line change
@@ -2847,3 +2847,9 @@ type B11136 end
28472847
let T = TypeVar(:T, true), TB = TypeVar(:T, B11136, true)
28482848
testintersect(Tuple{T, T}, Tuple{A11136, TB}, Bottom)
28492849
end
2850+
2851+
# issue #11367
2852+
abstract Foo11367
2853+
let T1 = TypeVar(:T1, true), T2 = TypeVar(:T2, Foo11367, true)
2854+
testintersect(Tuple{T1, T1}, Tuple{Type{BigInt}, T2}, Bottom)
2855+
end

0 commit comments

Comments
 (0)