// 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); } }