go issue26411 源码

  • 2022-07-15
  • 浏览 (804)

golang issue26411 代码

文件路径:/test/fixedbugs/issue26411.go

// +build !nacl,!js
// run

// Copyright 2018 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.

// Ensure that label redefinition errors print out
// a column number that matches the start of the current label's
// definition instead of the label delimiting token ":"

package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"os/exec"
	"path/filepath"
	"regexp"
)

func main() {
	tmpdir, err := ioutil.TempDir("", "issue26411")
	if err != nil {
		log.Fatalf("Failed to create temporary directory: %v", err)
	}
	defer os.RemoveAll(tmpdir)

	tests := []struct {
		code   string
		errors []string
	}{
		{
			code: `
package main

func main() {
foo:
foo:
}
`,
			errors: []string{
				"^.+:5:1: label foo defined and not used\n",
				".+:6:1: label foo already defined at .+:5:1\n$",
			},
		},
		{
			code: `
package main

func main() {

            bar:
   bar:
bar:
bar            :
}
`,

			errors: []string{
				"^.+:6:13: label bar defined and not used\n",
				".+:7:4: label bar already defined at .+:6:13\n",
				".+:8:1: label bar already defined at .+:6:13\n",
				".+:9:1: label bar already defined at .+:6:13\n$",
			},
		},
	}

	for i, test := range tests {
		filename := filepath.Join(tmpdir, fmt.Sprintf("%d.go", i))
		if err := ioutil.WriteFile(filename, []byte(test.code), 0644); err != nil {
			log.Printf("#%d: failed to create file %s", i, filename)
			continue
		}
		output, _ := exec.Command("go", "tool", "compile", "-p=p", filename).CombinedOutput()

		// remove each matching error from the output
		for _, err := range test.errors {
			rx := regexp.MustCompile(err)
			match := rx.Find(output)
			output = bytes.Replace(output, match, nil, 1) // remove match (which might be nil) from output
		}

		// at this point all output should have been consumed
		if len(output) != 0 {
			log.Printf("Test case %d has unmatched errors:\n%s", i, output)
		}
	}
}

相关信息

go 源码目录

相关文章

go bug000 源码

go bug002 源码

go bug003 源码

go bug004 源码

go bug005 源码

go bug006 源码

go bug007 源码

go bug008 源码

go bug009 源码

go bug010 源码

0  赞