diff --git a/gcc/c-family/c-ada-spec.cc b/gcc/c-family/c-ada-spec.cc index b50b38775..6c6b5d083 100644 --- a/gcc/c-family/c-ada-spec.cc +++ b/gcc/c-family/c-ada-spec.cc @@ -2193,2 +2193,2 @@ dump_ada_node (pretty_printer *buffer, tree node, tree type, int spc, - && !strcmp (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))), - "__int128"))) + && !strncmp (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))), + "__int128", 8))) diff --git a/gcc/testsuite/g++.dg/ada-spec/int128-types.C b/gcc/testsuite/g++.dg/ada-spec/int128-types.C new file mode 100644 index 000000000..0a432e72f --- /dev/null +++ b/gcc/testsuite/g++.dg/ada-spec/int128-types.C @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-fdump-ada-spec-slim" } */ +/* { dg-final { scan-file int128_types_c.ads "subtype Signed_128 is Extensions.Signed_128" } } */ +/* { dg-final { scan-file int128_types_c.ads "subtype Unsigned_128 is Extensions.Unsigned_128" } } */ + +using Signed_128 = __int128; +using Unsigned_128 = unsigned __int128; + +static const Signed_128 signed_expected + = -((static_cast (1) << 100) + 12345); +static const Unsigned_128 unsigned_expected + = (static_cast (1) << 127) + | (static_cast (1) << 80) | 67890; + +Signed_128 signed_seed () { return signed_expected; } +Unsigned_128 unsigned_seed () { return unsigned_expected; } + +Signed_128 signed_round_trip (Signed_128 value) { return value; } +Unsigned_128 unsigned_round_trip (Unsigned_128 value) { return value; } + +int signed_matches (Signed_128 value) { return value == signed_expected; } +int unsigned_matches (Unsigned_128 value) { return value == unsigned_expected; }