mirror of
https://github.com/golang/go
synced 2024-11-11 22:20:22 -07:00
debug/dwarf: correct name for clang-generated complex type
Fixes #8694. LGTM=iant R=iant CC=golang-codereviews https://golang.org/cl/143570043
This commit is contained in:
parent
43c4287b25
commit
5917692b98
@ -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) }
|
||||
|
32
misc/cgo/test/issue8694.go
Normal file
32
misc/cgo/test/issue8694.go
Normal file
@ -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)
|
||||
}
|
||||
}
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user