1// run
2
3// Copyright 2013 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7package main
8
9import (
10	"fmt"
11	"os"
12	"runtime"
13	"testing"
14)
15
16type T struct { int }
17
18var globl *T
19
20func F() {
21	t := &T{}
22	globl = t
23}
24
25func G() {
26	t := &T{}
27	_ = t
28}
29
30func main() {
31	nf := testing.AllocsPerRun(100, F)
32	ng := testing.AllocsPerRun(100, G)
33	if int(nf) > 1 {
34		fmt.Printf("AllocsPerRun(100, F) = %v, want 1\n", nf)
35		os.Exit(1)
36	}
37	if int(ng) != 0 && (runtime.Compiler != "gccgo" || int(ng) != 1) {
38		fmt.Printf("AllocsPerRun(100, G) = %v, want 0\n", ng)
39		os.Exit(1)
40	}
41}
42