]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add test for skipping empty init functions
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Wed, 30 Oct 2019 07:06:54 +0000 (14:06 +0700)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 4 Nov 2019 20:19:15 +0000 (20:19 +0000)
CL 200958 adds skipping empty init function feature without any tests
for it. A codegen test sounds ideal, but it's unlikely that we can make
one for now, so use a program to manipulate runtime/proc.go:initTask
directly.

Updates #34869

Change-Id: I2683b9a1ace36af6861af02a3a9fb18b3110b282
Reviewed-on: https://go-review.googlesource.com/c/go/+/204217
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/proc.go
test/initempty.go [new file with mode: 0644]

index 5ef9b3241768c317c18a0f2e821d4165a1039c30..c3315cd2db65b1762ddb9ea31ad37019861888f9 100644 (file)
@@ -5361,6 +5361,7 @@ func gcd(a, b uint32) uint32 {
 }
 
 // An initTask represents the set of initializations that need to be done for a package.
+// Keep in sync with ../../test/initempty.go:initTask
 type initTask struct {
        // TODO: pack the first 3 fields more tightly?
        state uintptr // 0 = uninitialized, 1 = in progress, 2 = done
diff --git a/test/initempty.go b/test/initempty.go
new file mode 100644 (file)
index 0000000..60bd9fb
--- /dev/null
@@ -0,0 +1,40 @@
+// run
+
+// Copyright 2019 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.
+
+// Test that empty init functions are skipped.
+
+package main
+
+import _ "unsafe" // for go:linkname
+
+type initTask struct {
+       state uintptr
+       ndeps uintptr
+       nfns  uintptr
+}
+
+//go:linkname main_inittask main..inittask
+var main_inittask initTask
+
+func main() {
+       if nfns := main_inittask.nfns; nfns != 0 {
+               println(nfns)
+               panic("unexpected init funcs")
+       }
+}
+
+func init() {
+}
+
+func init() {
+       if false {
+       }
+}
+
+func init() {
+       for false {
+       }
+}