]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: make -asmhdr work with type aliases
authorMatthew Dempsky <mdempsky@google.com>
Wed, 29 Nov 2017 19:58:03 +0000 (11:58 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Wed, 29 Nov 2017 20:40:41 +0000 (20:40 +0000)
For "type T = U" we were accidentally emitting a #define for "U__size"
instead of "T__size".

Fixes #22877.

Change-Id: I5ed6757d697753ed6d944077c16150759f6e1285
Reviewed-on: https://go-review.googlesource.com/80759
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/export.go
test/fixedbugs/issue22877.dir/p.go [new file with mode: 0644]
test/fixedbugs/issue22877.dir/p.s [new file with mode: 0644]
test/fixedbugs/issue22877.go [new file with mode: 0644]
test/run.go

index 2c44785859dd16e6074d72d75945c130a2c8670d..c5d5c52205da7c0ba26c8b517d463ecf5bf5ff54 100644 (file)
@@ -387,10 +387,10 @@ func dumpasmhdr() {
                        if !t.IsStruct() || t.StructType().Map != nil || t.IsFuncArgStruct() {
                                break
                        }
-                       fmt.Fprintf(b, "#define %s__size %d\n", t.Sym.Name, int(t.Width))
-                       for _, t := range t.Fields().Slice() {
-                               if !t.Sym.IsBlank() {
-                                       fmt.Fprintf(b, "#define %s_%s %d\n", n.Sym.Name, t.Sym.Name, int(t.Offset))
+                       fmt.Fprintf(b, "#define %s__size %d\n", n.Sym.Name, int(t.Width))
+                       for _, f := range t.Fields().Slice() {
+                               if !f.Sym.IsBlank() {
+                                       fmt.Fprintf(b, "#define %s_%s %d\n", n.Sym.Name, f.Sym.Name, int(f.Offset))
                                }
                        }
                }
diff --git a/test/fixedbugs/issue22877.dir/p.go b/test/fixedbugs/issue22877.dir/p.go
new file mode 100644 (file)
index 0000000..fc86cb9
--- /dev/null
@@ -0,0 +1,14 @@
+// Copyright 2017 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.
+
+package main
+
+type S struct{ i int }
+type SS = S
+
+func sub()
+
+func main() {
+       sub()
+}
diff --git a/test/fixedbugs/issue22877.dir/p.s b/test/fixedbugs/issue22877.dir/p.s
new file mode 100644 (file)
index 0000000..8b14358
--- /dev/null
@@ -0,0 +1,8 @@
+// Copyright 2017 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.
+
+#include "go_asm.h"
+
+TEXT ·sub(SB), 0, $0
+       RET
diff --git a/test/fixedbugs/issue22877.go b/test/fixedbugs/issue22877.go
new file mode 100644 (file)
index 0000000..284b680
--- /dev/null
@@ -0,0 +1,7 @@
+// builddir
+
+// Copyright 2017 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.
+
+package ignored
index e33539eb0f226791d3f6845f0e796b86e16c75d9..22ec7576f881042620c42375f3efc64053ecfa84 100644 (file)
@@ -736,6 +736,9 @@ func (t *test) run() {
                }
                var objs []string
                cmd := []string{"go", "tool", "compile", "-e", "-D", ".", "-I", ".", "-o", "go.o"}
+               if len(asms) > 0 {
+                       cmd = append(cmd, "-asmhdr", "go_asm.h")
+               }
                for _, file := range gos {
                        cmd = append(cmd, filepath.Join(longdir, file.Name()))
                }