| // 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. | |
| // These tests check that allocating a 0-size object does not | |
| // introduce a call to runtime.newobject. | |
| package codegen | |
| func zeroAllocNew1() *struct{} { | |
| // 386:-`CALL runtime\.newobject`, `LEAL runtime.zerobase` | |
| // amd64:-`CALL runtime\.newobject`, `LEAQ runtime.zerobase` | |
| // arm:-`CALL runtime\.newobject`, `MOVW [$]runtime.zerobase` | |
| // arm64:-`CALL runtime\.newobject`, `MOVD [$]runtime.zerobase` | |
| // riscv64:-`CALL runtime\.newobject`, `MOV [$]runtime.zerobase` | |
| return new(struct{}) | |
| } | |
| func zeroAllocNew2() *[0]int { | |
| // 386:-`CALL runtime\.newobject`, `LEAL runtime.zerobase` | |
| // amd64:-`CALL runtime\.newobject`, `LEAQ runtime.zerobase` | |
| // arm:-`CALL runtime\.newobject`, `MOVW [$]runtime.zerobase` | |
| // arm64:-`CALL runtime\.newobject`, `MOVD [$]runtime.zerobase` | |
| // riscv64:-`CALL runtime\.newobject`, `MOV [$]runtime.zerobase` | |
| return new([0]int) | |
| } | |
| func zeroAllocSliceLit() []int { | |
| // 386:-`CALL runtime\.newobject`, `LEAL runtime.zerobase` | |
| // amd64:-`CALL runtime\.newobject`, `LEAQ runtime.zerobase` | |
| // arm:-`CALL runtime\.newobject`, `MOVW [$]runtime.zerobase` | |
| // arm64:-`CALL runtime\.newobject`, `MOVD [$]runtime.zerobase` | |
| // riscv64:-`CALL runtime\.newobject`, `MOV [$]runtime.zerobase` | |
| return []int{} | |
| } | |