godump.c (go_format_type): Represent "float _Complex" and "double _Complex" as comple...
authorDominik Vogt <vogt@linux.vnet.ibm.com>
Wed, 29 Oct 2014 15:01:07 +0000 (15:01 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 29 Oct 2014 15:01:07 +0000 (15:01 +0000)
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

gcc/ChangeLog
gcc/godump.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.misc-tests/godump-1.c

index e391126285e6f81d75ad5e30c4f1d44fc9e6d786..da384989dcbe7239b6d4610d4ed5fa23b5e2065f 100644 (file)
@@ -1,3 +1,8 @@
+2014-10-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       * godump.c (go_format_type): Represent "float _Complex" and
+       "double _Complex" as complex64 or complex128 in Go, as appropriate.
+
 2014-10-29  Richard Biener  <rguenther@suse.de>
 
        * match.pd: Implement a first set of conversion patterns.
 
 2014-10-28  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
-        * 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  <amacleod@redhat.com>
 
index 7a0566485f6fbc132d72478357a19525ba5406bd..fccd3eb512118206f439c460cd0b193d693d4dae 100644 (file)
@@ -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;
index 52a9e5490751365a8d2dc8cbe893bd354ff6d912..45114fa0a6a99d851e97723e98b0e835f59f05d0 100644 (file)
@@ -1,3 +1,7 @@
+2014-10-29  Dominik Vogt  <vogt@linux.vnet.ibm.com>
+
+       * gcc.misc-tests/godump-1.c: Add tests for complex types.
+
 2014-10-29  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        * gcc.dg/optimize-bswapsi-1.c (swap32_e): New bswap test.
index 876cf28c26d6c6a568e1519ebaf6ef369be71fbb..f3af17cf8b40b489edd87ab57baa8b4dd415b942 100644 (file)
@@ -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$" } } */