Fix slice handling in FunctionList, BasicBlockList, and TagList #7911
+6
−12
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The standard Python slicing syntax, i.e.
[:],[2:],[:5].. (anything with an open end) fail with TypeError on FunctionList, BasicBlockList and TagList. Other valid slices like[0:len(list)]would also cause an IndexError.The slice bounds checking compares
i.startandi.stopdirectly against integers, but Python sets these toNonefor open-ended slices. This means comparingNone < 0raises TypeError. The checki.stop >= len(self)also rejects valid Python where stop equals length.This PR replaces the manual bounds checking with
slice.indices()that will handle None values and normalise the bounds correctly. Other places in the codebase already do this.