/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/codegen/zerosize.go
44 строки
1 KB
Egon Elbre
cmd/compile/internal/amd64: use X15 for 4- and 8-byte zero stores
10 авг 2026, 20:59
10 авг 2026, 20:59
7ecd909
Код
Авторство
О чём код?
// asmcheck // Copyright 2018 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Make sure a pointer variable and a zero-sized variable // aren't allocated to the same stack slot. // See issue 24993. package codegen func zeroSize() { c := make(chan struct{}) // amd64:`MOVQ X15, command-line-arguments\.s\+56\(SP\)` var s *int // force s to be a stack object, also use some (fixed) stack space g(&s, 1, 2, 3, 4, 5) // amd64:`LEAQ command-line-arguments\..*\+55\(SP\)` c <- noliteral(struct{}{}) } // Like zeroSize, but without hiding the zero-sized struct. func zeroSize2() { c := make(chan struct{}) // amd64:`MOVQ X15, command-line-arguments\.s\+48\(SP\)` var s *int // force s to be a stack object, also use some (fixed) stack space g(&s, 1, 2, 3, 4, 5) // amd64:`LEAQ command-line-arguments\..*stmp_\d+\(SB\)` c <- struct{}{} } //go:noinline func g(**int, int, int, int, int, int) {} // noliteral prevents the compiler from recognizing a literal value. // //go:noinline func noliteral[T any](t T) T { return t }