]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Diagnose too large size clause on floating-point type
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 20 Aug 2024 15:40:41 +0000 (17:40 +0200)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Mon, 2 Sep 2024 08:22:50 +0000 (10:22 +0200)
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.

gcc/ada/gcc-interface/decl.cc

index d7c17238bbc05b2740bc677452449af461d249ec..398e01521a33c52edf7470419ae07207081f2f2b 100644 (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