Skip to content

Commit 36ddc1a

Browse files
committed
inference: make getfield_tfunc more robust for abstract PartialStruct
We're currently careful never to make these. But good to be careful? refs #34513
1 parent a5c422f commit 36ddc1a

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

base/compiler/tfuncs.jl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -727,17 +727,21 @@ function getfield_tfunc(@nospecialize(s00), @nospecialize(name))
727727
end
728728
end
729729
s = typeof(sv)
730-
elseif isa(s, PartialStruct)
730+
elseif isa(s00, PartialStruct)
731+
s01 = widenconst(s00)
732+
s = unwrap_unionall(s01)::DataType
731733
if isa(name, Const)
732734
nv = name.val
733735
if isa(nv, Symbol)
734-
nv = fieldindex(widenconst(s), nv, false)
736+
nv = fieldindex(s, nv, false)
735737
end
736-
if isa(nv, Int) && 1 <= nv <= length(s.fields)
737-
return s.fields[nv]
738+
if isa(nv, Int)
739+
if 1 <= nv <= length(s00.fields)
740+
return s00.fields[nv]
741+
end
738742
end
739743
end
740-
s = widenconst(s)
744+
s00 = s01
741745
end
742746
if isType(s) || !isa(s, DataType) || s.abstract
743747
return Any

0 commit comments

Comments
 (0)