Russ Cox | d2cc988 | 2012-02-16 23:50:37 -0500 | [diff] [blame] | 1 | // run |
Russ Cox | bac8f18 | 2011-04-26 00:57:03 -0400 | [diff] [blame] | 2 | |
Emmanuel Odeke | 53fd522 | 2016-04-10 14:32:26 -0700 | [diff] [blame] | 3 | // Copyright 2011 The Go Authors. All rights reserved. |
Russ Cox | bac8f18 | 2011-04-26 00:57:03 -0400 | [diff] [blame] | 4 | // Use of this source code is governed by a BSD-style |
| 5 | // license that can be found in the LICENSE file. |
| 6 | |
Rob Pike | 83976e3 | 2012-02-19 14:28:53 +1100 | [diff] [blame] | 7 | // Test evaluation order in if condition. |
| 8 | |
Russ Cox | bac8f18 | 2011-04-26 00:57:03 -0400 | [diff] [blame] | 9 | package main |
| 10 | |
| 11 | var calledf = false |
| 12 | |
| 13 | func f() int { |
| 14 | calledf = true |
| 15 | return 1 |
| 16 | } |
| 17 | |
| 18 | func g() int { |
| 19 | if !calledf { |
Alan Donovan | 052c942 | 2013-02-12 13:17:49 -0500 | [diff] [blame] | 20 | panic("BUG: func7 - called g before f") |
Russ Cox | bac8f18 | 2011-04-26 00:57:03 -0400 | [diff] [blame] | 21 | } |
| 22 | return 0 |
| 23 | } |
| 24 | |
| 25 | func main() { |
Aaron Jacobs | 8628688 | 2015-06-24 09:50:12 +1000 | [diff] [blame] | 26 | // gc used to evaluate g() before f(). |
Russ Cox | bac8f18 | 2011-04-26 00:57:03 -0400 | [diff] [blame] | 27 | if f() < g() { |
| 28 | panic("wrong answer") |
| 29 | } |
| 30 | } |