|  | // errorcheck | 
|  |  | 
|  | // Copyright 2012 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. | 
|  |  | 
|  | // Issue 3890: missing detection of init loop involving | 
|  | // method calls in function bodies. | 
|  |  | 
|  | package flag | 
|  |  | 
|  | var commandLine = NewFlagSet() // ERROR "loop|depends upon itself" | 
|  |  | 
|  | type FlagSet struct { | 
|  | } | 
|  |  | 
|  | func (f *FlagSet) failf(format string, a ...interface{}) { | 
|  | f.usage() | 
|  | } | 
|  |  | 
|  | func (f *FlagSet) usage() { | 
|  | if f == commandLine { | 
|  | panic(3) | 
|  | } | 
|  | } | 
|  |  | 
|  | func NewFlagSet() *FlagSet { | 
|  | f := &FlagSet{} | 
|  | f.setErrorHandling(true) | 
|  | return f | 
|  | } | 
|  |  | 
|  | func (f *FlagSet) setErrorHandling(b bool) { | 
|  | f.failf("DIE") | 
|  | } |