From: Dominik Vogt Date: Wed, 29 Oct 2014 15:01:07 +0000 (+0000) Subject: godump.c (go_format_type): Represent "float _Complex" and "double _Complex" as comple... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7b310e901c5b7ad8ad54771b2d69459a496da472;p=gcc.git godump.c (go_format_type): Represent "float _Complex" and "double _Complex" as complex64 or complex128 in... gcc/: * godump.c (go_format_type): Represent "float _Complex" and "double _Complex" as complex64 or complex128 in Go, as appropriate. gcc/testsuite/: * gcc.misc-tests/godump-1.c: Add tests for complex types. From-SVN: r216840 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e391126285e..da384989dcb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-10-29 Dominik Vogt + + * godump.c (go_format_type): Represent "float _Complex" and + "double _Complex" as complex64 or complex128 in Go, as appropriate. + 2014-10-29 Richard Biener * match.pd: Implement a first set of conversion patterns. @@ -164,26 +169,26 @@ 2014-10-28 Dominik Vogt - * godump.c (precision_to_units): New helper function. - (go_append_artificial_name): Ditto. - (go_append_decl_name): Ditto. - (go_append_bitfield): Ditto. - (go_get_uinttype_for_precision): Ditto. - (go_append_padding): Ditto. - (go_force_record_alignment): Ditto. - (go_format_type): Represent unions with an array of uints of the size - of the alignment in go. This fixes the 'random' size of the union's - representation using just the first field. - (go_format_type): Add argument that indicates whether a record is - nested (used for generation of artificial go names). - (go_output_fndecl): Adapt to new go_format_type signature. - (go_output_typedef): Ditto. - (go_output_var): Ditto. - (go_output_var): Prefer to output type as alias (typedef). - (go_format_type): Bitfields in records are simulated as arrays of bytes - in go. - - * godump.c (go_format_type): Fix handling of arrays with zero elements. + * godump.c (precision_to_units): New helper function. + (go_append_artificial_name): Ditto. + (go_append_decl_name): Ditto. + (go_append_bitfield): Ditto. + (go_get_uinttype_for_precision): Ditto. + (go_append_padding): Ditto. + (go_force_record_alignment): Ditto. + (go_format_type): Represent unions with an array of uints of the size + of the alignment in go. This fixes the 'random' size of the union's + representation using just the first field. + (go_format_type): Add argument that indicates whether a record is + nested (used for generation of artificial go names). + (go_output_fndecl): Adapt to new go_format_type signature. + (go_output_typedef): Ditto. + (go_output_var): Ditto. + (go_output_var): Prefer to output type as alias (typedef). + (go_format_type): Bitfields in records are simulated as arrays of bytes + in go. + + * godump.c (go_format_type): Fix handling of arrays with zero elements. 2014-10-28 Andrew MacLeod diff --git a/gcc/godump.c b/gcc/godump.c index 7a0566485f6..fccd3eb5121 100644 --- a/gcc/godump.c +++ b/gcc/godump.c @@ -780,6 +780,40 @@ go_format_type (struct godump_container *container, tree type, } break; + case COMPLEX_TYPE: + { + const char *s; + char buf[100]; + tree real_type; + + real_type = TREE_TYPE (type); + if (TREE_CODE (real_type) == REAL_TYPE) + { + switch (TYPE_PRECISION (real_type)) + { + case 32: + s = "complex64"; + break; + case 64: + s = "complex128"; + break; + default: + snprintf (buf, sizeof buf, "INVALID-complex-%u", + 2 * TYPE_PRECISION (real_type)); + s = buf; + ret = false; + break; + } + } + else + { + s = "INVALID-complex-non-real"; + ret = false; + } + obstack_grow (ob, s, strlen (s)); + } + break; + case BOOLEAN_TYPE: obstack_grow (ob, "bool", 4); break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 52a9e549075..45114fa0a6a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-10-29 Dominik Vogt + + * gcc.misc-tests/godump-1.c: Add tests for complex types. + 2014-10-29 Thomas Preud'homme * gcc.dg/optimize-bswapsi-1.c (swap32_e): New bswap test. diff --git a/gcc/testsuite/gcc.misc-tests/godump-1.c b/gcc/testsuite/gcc.misc-tests/godump-1.c index 876cf28c26d..f3af17cf8b4 100644 --- a/gcc/testsuite/gcc.misc-tests/godump-1.c +++ b/gcc/testsuite/gcc.misc-tests/godump-1.c @@ -104,6 +104,21 @@ d_t d_v2; typedef long double ld_t; long double ld_v1; ld_t ld_v2; +typedef _Complex cx_t; +_Complex cx_v1; +cx_t cx_v2; +typedef float _Complex fcx_t; +float _Complex fcx_v1; +fcx_t fcx_v2; +typedef double _Complex dcx_t; +double _Complex dcx_v1; +dcx_t dcx_v2; +typedef long double _Complex ldcx_t; +long double _Complex ldcx_v1; +ldcx_t ldcx_v2; +typedef int _Complex icx_t; +int _Complex icx_v1; +icx_t icx_v2; /* nested typedefs */ typedef int ni_t; @@ -301,6 +316,11 @@ typedef int8_t (*func_t)(void *p); /* { dg-final { scan-file godump-1.out "(?n)^type _f_t float\[0-9\]*$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^type _d_t float\[0-9\]*$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^// type _ld_t INVALID-float-\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^type _cx_t complex\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^type _fcx_t complex\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^type _dcx_t complex\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^// type _ldcx_t INVALID-complex-\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^// type _icx_t INVALID-complex-non-real$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^type _ni_t int\[0-9\]*$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^type _ni2_t int\[0-9\]*$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^type _ni3_t int\[0-9\]*$" } } */ @@ -414,6 +434,16 @@ typedef int8_t (*func_t)(void *p); /* { dg-final { scan-file godump-1.out "(?n)^var _d_v2 _d_t$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^// var _ld_v1 INVALID-float-\[0-9\]*$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^// var _ld_v2 INVALID-float-\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^var _cx_v1 complex\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^var _cx_v2 _cx_t$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^var _fcx_v1 complex\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^var _fcx_v2 _fcx_t$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^var _dcx_v1 complex\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^var _dcx_v2 _dcx_t$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^// var _ldcx_v1 INVALID-complex-\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^// var _ldcx_v2 INVALID-complex-\[0-9\]*$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^// var _icx_v1 INVALID-complex-non-real$" } } */ +/* { dg-final { scan-file godump-1.out "(?n)^// var _icx_v2 INVALID-complex-non-real$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^var _ni2_v2 _ni2_t$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^var _ni3_v2 _ni3_t$" } } */ /* { dg-final { scan-file godump-1.out "(?n)^var _e1_v1 int$" } } */