https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119265

            Bug ID: 119265
           Summary: unsigned __int128 not converted properly by
                    -fdump-ada-spec, while __int128 is
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tobias at strongswan dot org
                CC: dkm at gcc dot gnu.org
  Target Milestone: ---

Since 6.5, the Linux UAPI kernel header `linux/types.h` contains the following:


#ifdef __SIZEOF_INT128__
typedef __signed__ __int128 __s128 __attribute__((aligned(16)));
typedef unsigned __int128 __u128 __attribute__((aligned(16)));
#endif


Using `-fdump-ada-spec` to generate Ada specs from a header that includes this
results in:


subtype uu_s128 is Extensions.Signed_128;  -- /usr/include/linux/types.h:12

subtype uu_u128 is uu_int128_unsigned;  -- /usr/include/linux/types.h:13


So the second typedef with `unsigned __int128` is not mapped to
`Extensions.Unsigned_128` but a non-existent identifier, which results in an
error when compiling:


linux_types_h.ads:14:23: error: "uu_int128_unsigned" is undefined


Adding `#undef __SIZEOF_INT128__` before including `linux/types.h` (or a header
that includes it indirectly) may be used as a workaround.

Reply via email to