diff --git a/compiler/asserts.go b/compiler/asserts.go index b9f02e84..ad79c0a1 100644 --- a/compiler/asserts.go +++ b/compiler/asserts.go @@ -22,7 +22,7 @@ func (c *Compiler) emitLookupBoundsCheck(frame *Frame, arrayLen, index llvm.Valu if index.Type().IntTypeWidth() < arrayLen.Type().IntTypeWidth() { // Sometimes, the index can be e.g. an uint8 or int8, and we have to // correctly extend that type. - if indexType.(*types.Basic).Info()&types.IsUnsigned == 0 { + if indexType.Underlying().(*types.Basic).Info()&types.IsUnsigned == 0 { index = c.builder.CreateZExt(index, arrayLen.Type(), "") } else { index = c.builder.CreateSExt(index, arrayLen.Type(), "") diff --git a/testdata/slice.go b/testdata/slice.go index 8182af36..d20de76d 100644 --- a/testdata/slice.go +++ b/testdata/slice.go @@ -2,6 +2,13 @@ package main type MySlice [32]byte +type myUint8 uint8 + +// Indexing into slice with named type (regression test). +var array = [4]int{ + myUint8(2): 3, +} + func main() { l := 5 foo := []int{1, 2, 4, 5}