Commit 80f4ff22 authored by David Symonds's avatar David Symonds

exp/types: avoid init race in check_test.go.

There was an init race between
	check_test.go:init
        universe.go:def
        use of Universe
and
	universe.go:init
        creation of Universe

The order in which init funcs are executed in a package is unspecified.
The test is not currently broken in the golang.org environment
because the go tool compiles the test with non-test sources before test sources,
but other environments may, say, sort the source files before compiling,
and thus trigger this race, causing a nil pointer panic.

R=gri
CC=golang-dev
https://golang.org/cl/6827076
parent c90739e4
...@@ -37,12 +37,6 @@ import ( ...@@ -37,12 +37,6 @@ import (
var listErrors = flag.Bool("list", false, "list errors") var listErrors = flag.Bool("list", false, "list errors")
func init() {
// declare builtins for testing
def(ast.Fun, "assert").Type = &builtin{aType, _Assert, "assert", 1, false, true}
def(ast.Fun, "trace").Type = &builtin{aType, _Trace, "trace", 0, true, true}
}
// The test filenames do not end in .go so that they are invisible // The test filenames do not end in .go so that they are invisible
// to gofmt since they contain comments that must not change their // to gofmt since they contain comments that must not change their
// positions relative to surrounding tokens. // positions relative to surrounding tokens.
...@@ -241,6 +235,12 @@ func checkFiles(t *testing.T, testname string, testfiles []string) { ...@@ -241,6 +235,12 @@ func checkFiles(t *testing.T, testname string, testfiles []string) {
} }
func TestCheck(t *testing.T) { func TestCheck(t *testing.T) {
// Declare builtins for testing.
// Not done in an init func to avoid an init race with
// the construction of the Universe var.
def(ast.Fun, "assert").Type = &builtin{aType, _Assert, "assert", 1, false, true}
def(ast.Fun, "trace").Type = &builtin{aType, _Trace, "trace", 0, true, true}
// For easy debugging w/o changing the testing code, // For easy debugging w/o changing the testing code,
// if there is a local test file, only test that file. // if there is a local test file, only test that file.
const testfile = "testdata/test.go" const testfile = "testdata/test.go"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment