Index: src/cmd/cgo/gcc.go |
=================================================================== |
--- a/src/cmd/cgo/gcc.go |
+++ b/src/cmd/cgo/gcc.go |
@@ -27,13 +27,15 @@ |
var debugGcc = flag.Bool("debug-gcc", false, "print gcc invocations") |
var nameToC = map[string]string{ |
- "schar": "signed char", |
- "uchar": "unsigned char", |
- "ushort": "unsigned short", |
- "uint": "unsigned int", |
- "ulong": "unsigned long", |
- "longlong": "long long", |
- "ulonglong": "unsigned long long", |
+ "schar": "signed char", |
+ "uchar": "unsigned char", |
+ "ushort": "unsigned short", |
+ "uint": "unsigned int", |
+ "ulong": "unsigned long", |
+ "longlong": "long long", |
+ "ulonglong": "unsigned long long", |
+ "complexfloat": "float complex", |
+ "complexdouble": "double complex", |
} |
// cname returns the C name to use for C.s. |
@@ -587,6 +589,7 @@ |
int8, int16, int32, int64 ast.Expr |
uint8, uint16, uint32, uint64, uintptr ast.Expr |
float32, float64 ast.Expr |
+ complex64, complex128 ast.Expr |
void ast.Expr |
unsafePointer ast.Expr |
string ast.Expr |
@@ -613,6 +616,8 @@ |
c.uintptr = c.Ident("uintptr") |
c.float32 = c.Ident("float32") |
c.float64 = c.Ident("float64") |
+ c.complex64 = c.Ident("complex64") |
+ c.complex128 = c.Ident("complex128") |
c.unsafePointer = c.Ident("unsafe.Pointer") |
c.void = c.Ident("void") |
c.string = c.Ident("string") |
@@ -644,6 +649,8 @@ |
"long long int": "longlong", |
"long long unsigned int": "ulonglong", |
"signed char": "schar", |
+ "float complex": "complexfloat", |
+ "double complex": "complexdouble", |
} |
// Type returns a *Type with the same memory layout as |
@@ -745,6 +752,19 @@ |
t.Align = c.ptrSize |
} |
+ case *dwarf.ComplexType: |
+ switch t.Size { |
+ default: |
+ fatal("unexpected: %d-byte complex type - %s", t.Size, dtype) |
+ case 8: |
+ t.Go = c.complex64 |
+ case 16: |
+ t.Go = c.complex128 |
+ } |
+ if t.Align = t.Size; t.Align >= c.ptrSize { |
+ t.Align = c.ptrSize |
+ } |
+ |
case *dwarf.FuncType: |
// No attempt at translation: would enable calls |
// directly between worlds, but we need to moderate those. |