]> Cypherpunks repositories - gostls13.git/commitdiff
debug/dwarf: correct name for clang-generated complex type
authorRuss Cox <rsc@golang.org>
Wed, 24 Sep 2014 20:53:47 +0000 (16:53 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 24 Sep 2014 20:53:47 +0000 (16:53 -0400)
Fixes #8694.

LGTM=iant
R=iant
CC=golang-codereviews
https://golang.org/cl/143570043

misc/cgo/test/cgo_test.go
misc/cgo/test/issue8694.go [new file with mode: 0644]
src/debug/dwarf/type.go

index 1899d460535ab3ce2fa5aa64631cd3d06b8fc314..1d1abf72914bc2dc4ca5f5b4d1213c12c2b3e6e4 100644 (file)
@@ -57,5 +57,6 @@ func Test7560(t *testing.T)                { test7560(t) }
 func Test5242(t *testing.T)                { test5242(t) }
 func Test8092(t *testing.T)                { test8092(t) }
 func Test7978(t *testing.T)                { test7978(t) }
+func Test8694(t *testing.T)                { test8694(t) }
 
 func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) }
diff --git a/misc/cgo/test/issue8694.go b/misc/cgo/test/issue8694.go
new file mode 100644 (file)
index 0000000..643b284
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2014 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 cgotest
+
+/*
+#include <complex.h>
+
+complex float complexFloatSquared(complex float a) { return a*a; }
+complex double complexDoubleSquared(complex double a) { return a*a; }
+*/
+import "C"
+
+import "testing"
+
+func test8694(t *testing.T) {
+       // Really just testing that this compiles, but check answer anyway.
+       x := complex64(2 + 3i)
+       x2 := x * x
+       cx2 := C.complexFloatSquared(x)
+       if cx2 != x2 {
+               t.Errorf("C.complexFloatSquared(%v) = %v, want %v", x, cx2, x2)
+       }
+
+       y := complex128(2 + 3i)
+       y2 := y * y
+       cy2 := C.complexDoubleSquared(y)
+       if cy2 != y2 {
+               t.Errorf("C.complexDoubleSquared(%v) = %v, want %v", y, cy2, y2)
+       }
+}
index fa40b2bef13c5de5c152a13fd092361bc1c878d5..6986b19e7221bb4043e2ea7cc819b81f00f0011b 100644 (file)
@@ -431,6 +431,17 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off
                        typ = new(BoolType)
                case encComplexFloat:
                        typ = new(ComplexType)
+                       if name == "complex" {
+                               // clang writes out 'complex' instead of 'complex float' or 'complex double'.
+                               // clang also writes out a byte size that we can use to distinguish.
+                               // See issue 8694.
+                               switch byteSize, _ := e.Val(AttrByteSize).(int64); byteSize {
+                               case 8:
+                                       name = "complex float"
+                               case 16:
+                                       name = "complex double"
+                               }
+                       }
                case encFloat:
                        typ = new(FloatType)
                case encSigned: