aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/gcc-interface/decl.cc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-08-20 17:40:41 +0200
committerMarc Poulhiès <dkm@gcc.gnu.org>2024-09-02 10:22:50 +0200
commit571d0450b294af66338c911c5205b4cbf20902ad (patch)
tree2dea2f7979eb4f5615d9512bdcc050dc62a594fd /gcc/ada/gcc-interface/decl.cc
parent1c9a6d8203b6cbc8500a28acdd9fbb23546a85dc (diff)
downloadgcc-571d0450b294af66338c911c5205b4cbf20902ad.zip
gcc-571d0450b294af66338c911c5205b4cbf20902ad.tar.gz
gcc-571d0450b294af66338c911c5205b4cbf20902ad.tar.bz2
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.
Diffstat (limited to 'gcc/ada/gcc-interface/decl.cc')
-rw-r--r--gcc/ada/gcc-interface/decl.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc
index d7c1723..398e015 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