ada: Diagnose too large size clause on floating-point type

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.
This commit is contained in:
Eric Botcazou 2024-08-20 17:40:41 +02:00 committed by Marc Poulhiès
parent 1c9a6d8203
commit 571d0450b2

View file

@ -521,8 +521,12 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
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