2016-05-04 3 views
2

Я нашел действительно странную проблему с GCCGO, и мне было интересно, может ли кто-нибудь объяснить это.delete element from slice difference gccgo vs gc

Я пытаюсь удалить элемент из среза по индексу, используя предлагаемые кусочки (https://github.com/golang/go/wiki/SliceTricks).

Следующий код (https://play.golang.org/p/f039m1h7Z1):

package main 

import "fmt" 

func main() { 
    xs := []int{0,1,2,3,4} 
    i := 2 
    xs, xs[len(xs)-1] = append(xs[:i], xs[i+1:]...), 0 
    fmt.Println(xs) 
} 

Работает с ходу компилятором (идти бег), но когда я пытаюсь скомпилировать его с

gccgo -g -static-libgcc 

Я получаю

panic: runtime error: index out of range 

на линии:

xs, xs[len(xs)-1] = append(xs[:i], xs[i+1:]...), 0 

Почему это происходит?

Примечание: Я пишу xs[len(xs)-1] = 0, потому что в моем полнофункциональном случае это на самом деле кусочек указателей на структуры, поэтому в соответствии с кусочками трюков мне нужно сделать конечный указатель нулевым в старом срезе для предотвращения памяти утечки.

+0

Звучит как ошибка в gccgo. Вы сообщили об этом? https://github.com/golang/go/issues –

+0

Я не нашел для этого никаких проблем. Создал один, на всякий случай: https://github.com/golang/go/issues/23433. –

ответ