compiler: fix indices into strings and arrays

This PR fixes two bugs at once:

 1. Indices were incorrectly extended to a bigger type. Specifically,
    unsigned integers were sign extended and signed integers were zero
    extended. This commit swaps them around.
 2. The getelementptr instruction was given the raw index, even if it
    was a uint8 for example. However, getelementptr assumes the indices
    are signed, and therefore an index of uint8(200) was interpreted as
    an index of int8(-56).
This commit is contained in:
Ayke van Laethem
2021-11-11 20:24:47 +01:00
committed by Ron Evans
parent 335fb71d2f
commit c1d697f868
4 changed files with 70 additions and 73 deletions
+5
View File
@@ -27,3 +27,8 @@ func stringCompareUnequal(s1, s2 string) bool {
func stringCompareLarger(s1, s2 string) bool {
return s1 > s2
}
func stringLookup(s string, x uint8) byte {
// Test that x is correctly extended to an uint before comparison.
return s[x]
}