|  | // run | 
|  |  | 
|  | // Copyright 2009 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. | 
|  |  | 
|  | // Test struct-valued variables (not pointers). | 
|  |  | 
|  | package main | 
|  |  | 
|  | type	x2	struct { a,b,c int; d int; }; | 
|  | var	g1	x2; | 
|  | var	g2	struct { a,b,c int; d x2; }; | 
|  |  | 
|  | func | 
|  | main() { | 
|  | var x int; | 
|  | var s1 *x2; | 
|  | var s2 *struct { a,b,c int; d x2; }; | 
|  | var s3 struct { a,b,c int; d x2; }; | 
|  |  | 
|  | s1 = &g1; | 
|  | s2 = &g2; | 
|  |  | 
|  | s1.a = 1; | 
|  | s1.b = 2; | 
|  | s1.c = 3; | 
|  | s1.d = 5; | 
|  |  | 
|  | if(s1.c != 3) { panic(s1.c); } | 
|  | if(g1.c != 3) { panic(g1.c); } | 
|  |  | 
|  | s2.a = 7; | 
|  | s2.b = 11; | 
|  | s2.c = 13; | 
|  | s2.d.a = 17; | 
|  | s2.d.b = 19; | 
|  | s2.d.c = 23; | 
|  | s2.d.d = 29; | 
|  |  | 
|  | if(s2.d.c != 23) { panic(s2.d.c); } | 
|  | if(g2.d.c != 23) { panic(g2.d.c); } | 
|  |  | 
|  | x =	s1.a + | 
|  | s1.b + | 
|  | s1.c + | 
|  | s1.d + | 
|  |  | 
|  | s2.a + | 
|  | s2.b + | 
|  | s2.c + | 
|  | s2.d.a + | 
|  | s2.d.b + | 
|  | s2.d.c + | 
|  | s2.d.d; | 
|  |  | 
|  | if(x != 130) { panic(x); } | 
|  |  | 
|  | // test an automatic struct | 
|  | s3.a = 7; | 
|  | s3.b = 11; | 
|  | s3.c = 13; | 
|  | s3.d.a = 17; | 
|  | s3.d.b = 19; | 
|  | s3.d.c = 23; | 
|  | s3.d.d = 29; | 
|  |  | 
|  | if(s3.d.c != 23) { panic(s3.d.c); } | 
|  |  | 
|  | x =	s3.a + | 
|  | s3.b + | 
|  | s3.c + | 
|  | s3.d.a + | 
|  | s3.d.b + | 
|  | s3.d.c + | 
|  | s3.d.d; | 
|  |  | 
|  | if(x != 119) { panic(x); } | 
|  | } |