blob: 681a5e77cb47fc74fb6798b040c006e5bf1bcc6a [file] [log] [blame]
Russ Cox5438be42009-09-08 23:16:19 -07001// $G $D/$F.go && $L $F.$A && ./$A.out
2
3// Copyright 2009 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
Russ Coxaa6e81dd2009-09-09 16:59:41 -07009import _ "fmt"
10
Russ Cox5438be42009-09-08 23:16:19 -070011var call string
12
13type T struct {
Rob Pike4f61fc92010-09-04 10:36:13 +100014 _, _, _ int
Russ Cox5438be42009-09-08 23:16:19 -070015}
16
Russ Coxaa6e81dd2009-09-09 16:59:41 -070017func (T) _() {
18}
19
20func (T) _() {
21}
22
Russ Cox5438be42009-09-08 23:16:19 -070023const (
Rob Pike4f61fc92010-09-04 10:36:13 +100024 c0 = iota
25 _
26 _
27 _
28 c4
Russ Cox5438be42009-09-08 23:16:19 -070029)
30
Russ Coxf2b5a072011-01-19 23:09:00 -050031var ints = []string{
Russ Cox5438be42009-09-08 23:16:19 -070032 "1",
33 "2",
Robert Griesemer542099d2009-12-09 19:27:08 -080034 "3",
Russ Cox5438be42009-09-08 23:16:19 -070035}
36
37func f() (int, int) {
Rob Pike4f61fc92010-09-04 10:36:13 +100038 call += "f"
Russ Coxf2b5a072011-01-19 23:09:00 -050039 return 1, 2
Russ Cox5438be42009-09-08 23:16:19 -070040}
41
Russ Coxf2b5a072011-01-19 23:09:00 -050042func g() (float64, float64) {
Rob Pike4f61fc92010-09-04 10:36:13 +100043 call += "g"
Russ Coxf2b5a072011-01-19 23:09:00 -050044 return 3, 4
Russ Cox5438be42009-09-08 23:16:19 -070045}
46
Russ Coxf2b5a072011-01-19 23:09:00 -050047func h(_ int, _ float64) {
Russ Cox5438be42009-09-08 23:16:19 -070048}
49
50func i() int {
Rob Pike4f61fc92010-09-04 10:36:13 +100051 call += "i"
52 return 23
Russ Cox5438be42009-09-08 23:16:19 -070053}
54
Rob Pike4f61fc92010-09-04 10:36:13 +100055var _ = i()
Russ Cox4c3a85d2009-10-19 19:27:40 -070056
Russ Coxaa6e81dd2009-09-09 16:59:41 -070057func main() {
Russ Coxf2b5a072011-01-19 23:09:00 -050058 if call != "i" {
59 panic("init did not run")
60 }
Rob Pike4f61fc92010-09-04 10:36:13 +100061 call = ""
62 _, _ = f()
63 a, _ := f()
Russ Coxf2b5a072011-01-19 23:09:00 -050064 if a != 1 {
65 panic(a)
66 }
Rob Pike4f61fc92010-09-04 10:36:13 +100067 b, _ := g()
Russ Coxf2b5a072011-01-19 23:09:00 -050068 if b != 3 {
69 panic(b)
70 }
Rob Pike4f61fc92010-09-04 10:36:13 +100071 _, a = f()
Russ Coxf2b5a072011-01-19 23:09:00 -050072 if a != 2 {
73 panic(a)
74 }
Rob Pike4f61fc92010-09-04 10:36:13 +100075 _, b = g()
Russ Coxf2b5a072011-01-19 23:09:00 -050076 if b != 4 {
77 panic(b)
78 }
Rob Pike4f61fc92010-09-04 10:36:13 +100079 _ = i()
Russ Coxf2b5a072011-01-19 23:09:00 -050080 if call != "ffgfgi" {
81 panic(call)
82 }
83 if c4 != 4 {
84 panic(c4)
85 }
Russ Cox5438be42009-09-08 23:16:19 -070086
Rob Pike4f61fc92010-09-04 10:36:13 +100087 out := ""
Russ Cox5438be42009-09-08 23:16:19 -070088 for _, s := range ints {
Rob Pike4f61fc92010-09-04 10:36:13 +100089 out += s
Russ Cox5438be42009-09-08 23:16:19 -070090 }
Russ Coxf2b5a072011-01-19 23:09:00 -050091 if out != "123" {
92 panic(out)
93 }
Russ Cox5438be42009-09-08 23:16:19 -070094
Rob Pike4f61fc92010-09-04 10:36:13 +100095 sum := 0
Ryan Hitchman062406b2010-12-08 21:36:56 -080096 for s := range ints {
Rob Pike4f61fc92010-09-04 10:36:13 +100097 sum += s
Russ Cox5438be42009-09-08 23:16:19 -070098 }
Russ Coxf2b5a072011-01-19 23:09:00 -050099 if sum != 3 {
100 panic(sum)
101 }
Russ Cox5438be42009-09-08 23:16:19 -0700102
Russ Coxf2b5a072011-01-19 23:09:00 -0500103 h(a, b)
Russ Cox5438be42009-09-08 23:16:19 -0700104}
105
106// useless but legal
Rob Pike4f61fc92010-09-04 10:36:13 +1000107var _ int = 1
108var _ = 2
109var _, _ = 3, 4
Russ Coxf2b5a072011-01-19 23:09:00 -0500110
Rob Pike4f61fc92010-09-04 10:36:13 +1000111const _ = 3
112const _, _ = 4, 5
Russ Coxf2b5a072011-01-19 23:09:00 -0500113
Rob Pike4f61fc92010-09-04 10:36:13 +1000114type _ int
Russ Coxf2b5a072011-01-19 23:09:00 -0500115
Russ Cox5438be42009-09-08 23:16:19 -0700116func _() {
117 panic("oops")
118}
119
120func ff() {
Rob Pike4f61fc92010-09-04 10:36:13 +1000121 var _ int = 1
Russ Cox5438be42009-09-08 23:16:19 -0700122}