diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2024-08-20 17:40:41 +0200 |
---|---|---|
committer | Marc Poulhiès <dkm@gcc.gnu.org> | 2024-09-02 10:22:50 +0200 |
commit | 571d0450b294af66338c911c5205b4cbf20902ad (patch) | |
tree | 2dea2f7979eb4f5615d9512bdcc050dc62a594fd /gcc/ada/gcc-interface/decl.cc | |
parent | 1c9a6d8203b6cbc8500a28acdd9fbb23546a85dc (diff) | |
download | gcc-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.cc | 4 |
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 |