https://gcc.gnu.org/g:571d0450b294af66338c911c5205b4cbf20902ad

commit r15-3373-g571d0450b294af66338c911c5205b4cbf20902ad
Author: Eric Botcazou <ebotca...@adacore.com>
Date:   Tue Aug 20 17:40:41 2024 +0200

    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.

Diff:
---
 gcc/ada/gcc-interface/decl.cc | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc
index d7c17238bbc0..398e01521a33 100644
--- a/gcc/ada/gcc-interface/decl.cc
+++ b/gcc/ada/gcc-interface/decl.cc
@@ -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

Reply via email to