+2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * libgnat/i-cexten.ads (Float_128): New type.
+
2018-02-02 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (array_type_has_nonaliased_component): Return
pragma Convention (C_Pass_By_Copy, Signed_128);
for Signed_128'Alignment use unsigned_long_long'Alignment * 2;
+ -- 128-bit floating-point type available on x86:
+ -- typedef long_double float_128 __attribute__ ((mode (TF)));
+
+ type Float_128 is record
+ low, high : unsigned_long_long;
+ end record;
+ pragma Convention (C_Pass_By_Copy, Float_128);
+ for Float_128'Alignment use unsigned_long_long'Alignment * 2;
+
-- Types for bitfields
type Unsigned_1 is mod 2 ** 1;
+2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * c-ada-spec.c (dump_ada_node) <NULLPTR_TYPE>: New case.
+ <REAL_TYPE>: Deal specifically with _Float128/__float128.
+
2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_ada_double_name) <ENUMERAL_TYPE>: New case.
pp_string (buffer, "--- unexpected node: TREE_VEC");
return 0;
+ case NULLPTR_TYPE:
case VOID_TYPE:
if (package_prefix)
{
dump_ada_enum_type (buffer, node, type, spc, true);
break;
- case INTEGER_TYPE:
case REAL_TYPE:
+ if (TYPE_NAME (node)
+ && TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
+ && IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))) [0] == '_'
+ && (id_equal (DECL_NAME (TYPE_NAME (node)), "_Float128")
+ || id_equal (DECL_NAME (TYPE_NAME (node)), "__float128")))
+ {
+ append_withs ("Interfaces.C.Extensions", false);
+ pp_string (buffer, "Extensions.Float_128");
+ break;
+ }
+ /* fallthrough */
+
+ case INTEGER_TYPE:
case FIXED_POINT_TYPE:
case BOOLEAN_TYPE:
if (TYPE_NAME (node))
{
if (TREE_CODE (node) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (node)) == INTEGER_TYPE
- && !strcmp
- (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME
- (TREE_TYPE (node)))), "char"))
+ && id_equal (DECL_NAME (TYPE_NAME (TREE_TYPE (node))),
+ "char"))
{
if (!name_only)
pp_string (buffer, "new ");