Skip to content

Commit a3438d0

Browse files
authored
fix NoMethodError of changed_lineinfo (#53890)
I will add a test case for this later. xref: https://github.com/JuliaDiff/Diffractor.jl/actions/runs/8476871477/job/23226991456
1 parent b18d2cc commit a3438d0

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

base/compiler/optimize.jl

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,20 +1035,22 @@ end
10351035
function changed_lineinfo(di::DebugInfo, codeloc::Int, prevloc::Int)
10361036
while true
10371037
next = getdebugidx(di, codeloc)
1038-
next[1] < 0 && return false # invalid info
1039-
next[1] == 0 && next[2] == 0 && return false # no new info
1038+
line = next[1]
1039+
line < 0 && return false # invalid info
1040+
line == 0 && next[2] == 0 && return false # no new info
10401041
prevloc <= 0 && return true # no old info
10411042
prev = getdebugidx(di, prevloc)
10421043
next === prev && return false # exactly identical
1043-
prev[1] < 0 && return true # previous invalid info, now valid
1044+
prevline = prev[1]
1045+
prevline < 0 && return true # previous invalid info, now valid
10441046
edge = next[2]
10451047
edge === prev[2] || return true # change to this edge
10461048
linetable = di.linetable
10471049
# check for change to line number here
1048-
if linetable === nothing || next[1] == 0
1049-
next[1] == prev[1] || return true
1050+
if linetable === nothing || line == 0
1051+
line == prevline || return true
10501052
else
1051-
changed_lineinfo(linetable, next[1], prev[1]) && return true
1053+
changed_lineinfo(linetable::DebugInfo, Int(line), Int(prevline)) && return true
10521054
end
10531055
# check for change to edge here
10541056
edge == 0 && return false # no edge here

0 commit comments

Comments
 (0)