The problem is that the size clause changes the floating-point format used
for the type, but it must not when this format is the widest format that is
supported in hardware on the target. Instead a padding type must be built
and the associated warning given.
gcc/ada/
* gcc-interface/decl.cc (gnat_to_gnu_entity): Cap the Esize of a
floating-point type to the size of the widest format supported in
hardware if it is explicity defined.
esize = UI_To_Int (Esize (gnat_entity));
if (IN (kind, Float_Kind))
+#ifdef WIDEST_HARDWARE_FP_SIZE
+ max_esize = fp_prec_to_size (WIDEST_HARDWARE_FP_SIZE);
+#else
max_esize
= fp_prec_to_size (TYPE_PRECISION (long_double_type_node));
+#endif
else if (IN (kind, Access_Kind))
max_esize = POINTER_SIZE * 2;
else