| // run | 
 |  | 
 | // Copyright 2011 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 evaluation order. | 
 |  | 
 | package main | 
 |  | 
 | var calledf int | 
 |  | 
 | func f() int { | 
 | 	calledf++ | 
 | 	return 0 | 
 | } | 
 |  | 
 | func g() int { | 
 | 	return calledf | 
 | } | 
 |  | 
 | var xy string | 
 |  | 
 | //go:noinline | 
 | func x() bool { | 
 | 	xy += "x" | 
 | 	return false | 
 | } | 
 |  | 
 | //go:noinline | 
 | func y() string { | 
 | 	xy += "y" | 
 | 	return "abc" | 
 | } | 
 |  | 
 | func main() { | 
 | 	if f() == g() { | 
 | 		panic("wrong f,g order") | 
 | 	} | 
 |  | 
 | 	if x() == (y() == "abc") { | 
 | 		panic("wrong compare") | 
 | 	} | 
 | 	if xy != "xy" { | 
 | 		panic("wrong x,y order") | 
 | 	} | 
 | } |