github.com/zach-klippenstein/go@v0.0.0-20150108044943-fcfbeb3adf58/test/label.go (about)

     1  // errorcheck
     2  
     3  // Copyright 2011 The Go Authors.  All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Verify that erroneous labels are caught by the compiler.
     8  // This set is caught by pass 1.
     9  // Does not compile.
    10  
    11  package main
    12  
    13  var x int
    14  
    15  func f() {
    16  L1: // ERROR "label .*L1.* defined and not used"
    17  	for {
    18  	}
    19  L2: // ERROR "label .*L2.* defined and not used"
    20  	select {
    21  	}
    22  L3: // ERROR "label .*L3.* defined and not used"
    23  	switch {
    24  	}
    25  L4: // ERROR "label .*L4.* defined and not used"
    26  	if true {
    27  	}
    28  L5: // ERROR "label .*L5.* defined and not used"
    29  	f()
    30  L6: // GCCGO_ERROR "previous"
    31  	f()
    32  L6: // ERROR "label .*L6.* already defined"
    33  	f()
    34  	if x == 20 {
    35  		goto L6
    36  	}
    37  
    38  L7:
    39  	for {
    40  		break L7
    41  	}
    42  
    43  L8:
    44  	for {
    45  		if x == 21 {
    46  			continue L8
    47  		}
    48  	}
    49  
    50  L9:
    51  	switch {
    52  	case true:
    53  		break L9
    54  	defalt: // ERROR "label .*defalt.* defined and not used"
    55  	}
    56  
    57  L10:
    58  	select {
    59  	default:
    60  		break L10
    61  	}
    62  }