| ... | ... | @@ -157,6 +157,7 @@ const LineNumberProgram = struct { |
| 157 | 157 | include_dirs: []const []const u8, |
| 158 | 158 | file_entries: *ArrayList(FileEntry), |
| 159 | 159 | |
| 160 | prev_valid: bool, |
| 160 | 161 | prev_address: usize, |
| 161 | 162 | prev_file: usize, |
| 162 | 163 | prev_line: i64, |
| ... | ... | @@ -175,6 +176,7 @@ const LineNumberProgram = struct { |
| 175 | 176 | self.basic_block = false; |
| 176 | 177 | self.end_sequence = false; |
| 177 | 178 | // Invalidate all the remaining fields |
| 179 | self.prev_valid = false; |
| 178 | 180 | self.prev_address = 0; |
| 179 | 181 | self.prev_file = undefined; |
| 180 | 182 | self.prev_line = undefined; |
| ... | ... | @@ -197,6 +199,7 @@ const LineNumberProgram = struct { |
| 197 | 199 | .file_entries = file_entries, |
| 198 | 200 | .default_is_stmt = is_stmt, |
| 199 | 201 | .target_address = target_address, |
| 202 | .prev_valid = false, |
| 200 | 203 | .prev_address = 0, |
| 201 | 204 | .prev_file = undefined, |
| 202 | 205 | .prev_line = undefined, |
| ... | ... | @@ -208,7 +211,7 @@ const LineNumberProgram = struct { |
| 208 | 211 | } |
| 209 | 212 | |
| 210 | 213 | pub fn checkLineMatch(self: *LineNumberProgram) !?debug.LineInfo { |
| 211 | | if (self.target_address >= self.prev_address and self.target_address < self.address) { |
| 214 | if (self.prev_valid and self.target_address >= self.prev_address and self.target_address < self.address) { |
| 212 | 215 | const file_entry = if (self.prev_file == 0) { |
| 213 | 216 | return error.MissingDebugInfo; |
| 214 | 217 | } else if (self.prev_file - 1 >= self.file_entries.items.len) { |
| ... | ... | @@ -228,6 +231,7 @@ const LineNumberProgram = struct { |
| 228 | 231 | }; |
| 229 | 232 | } |
| 230 | 233 | |
| 234 | self.prev_valid = true; |
| 231 | 235 | self.prev_address = self.address; |
| 232 | 236 | self.prev_file = self.file; |
| 233 | 237 | self.prev_line = self.line; |