blob: d78170c9d25a5b7f05dea58180432642026e87db [file] [log] [blame]
Russ Coxd2cc9882012-02-16 23:50:37 -05001// run
Rob Pikeab34d152008-06-06 14:27:34 -07002
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
Rob Pikeeb37b5b2012-02-24 16:24:24 +11007// Test pointers and the . (selector) operator on structs.
Rob Pikeab34d152008-06-06 14:27:34 -07008
9package main
10
11type x2 struct { a,b,c int; d int; };
12var g1 x2;
13var g2 struct { a,b,c int; d x2; };
14
15func
Robert Griesemer581530e2009-12-10 12:53:23 -080016main() {
Rob Pikeab34d152008-06-06 14:27:34 -070017 var x int;
18 var s1 *x2;
19 var s2 *struct { a,b,c int; d x2; };
20
21 s1 = &g1;
22 s2 = &g2;
23
24 s1.a = 1;
25 s1.b = 2;
26 s1.c = 3;
27 s1.d = 5;
28
29 s2.a = 7;
30 s2.b = 11;
31 s2.c = 13;
32 s2.d.a = 17;
33 s2.d.b = 19;
34 s2.d.c = 23;
35 s2.d.d = 20;
36
Rob Pikebc2f5f12008-08-11 22:07:49 -070037 if(s2.d.c != 23) { panic(1); }
38 if(g2.d.c != 23) { panic(2); }
Rob Pikeab34d152008-06-06 14:27:34 -070039
40 x = s1.a +
41 s1.b +
42 s1.c +
43 s1.d +
44
45 s2.a +
46 s2.b +
47 s2.c +
48 s2.d.a +
49 s2.d.b +
50 s2.d.c +
51 s2.d.d;
52
Rob Pikebc2f5f12008-08-11 22:07:49 -070053 if(x != 121) { panic(x); }
Rob Pikeab34d152008-06-06 14:27:34 -070054}