From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: New compiler error with new compiler
Date: Tue, 6 Dec 2022 12:36:41 +0100 [thread overview]
Message-ID: <tmn9g7$1kq7$1@gioia.aioe.org> (raw)
In-Reply-To: dc9f378b-d21b-48a1-b28c-c47e64eea9bcn@googlegroups.com
On 2022-12-06 12:13, Jerry wrote:
> As mentioned in a recent post, I changed from a 2015 GNAT on Mac Intel to 2022 compiler on Mac ARM.
>
> I don't know if this is of interest but I am now getting a compiler error that I never got before. It is in the Ada bindings to MPFR https://www.mpfr.org/. The problematic code is in this SVN checkout that I have never laid eyes on but which worked well in the past, certainly without compiler errors.
>
> The error that I am now getting is
>
> mpfr-floats.adb:788:27: error: duplication of choice value: 15 at line 787
>
> Here are lines around the referenced lines from that file. The first line (function...) is numbered 783.
>
> function Generic_Round (X : MPFR_Float) return F
> is begin
> case F'Base'Digits is
> when Float'Digits => return F(mpfr_get_flt(X.Value, default_rounding_mode));
> when Long_Float'Digits => return F(mpfr_get_d (X.Value, default_rounding_mode));
> when Long_Long_Float'Digits => eturn F(mpfr_get_ld (X.Value, default_rounding_mode));
> when others => raise Constraint_Error;
> end case;
> end Generic_Round;
>
> When I comment out line 788 the error does not appear. I have not used this binding for a long time and have not tested it today so I don't know the effect of this modification. The file is several years old and I don't know if the current code base for the bindings is the same--my concern here is the new Ada compiler complaint.
Looks like Long_Long_Float has at least same mantissa as Long_Float.
What are the actual values of Long_Float'Digits and Long_Long_Float'Digits?
Anyway it is all permitted:
ARM 3.5.7(16):
"An implementation is allowed to provide additional predefined floating
point types, declared in the visible part of Standard, whose
(unconstrained) first subtypes have names of the form Short_Float,
Long_Float, Short_Short_Float, Long_Long_Float, etc. Different
predefined floating point types are allowed to have the same base
decimal precision. However, the precision of Float should be no greater
than that of Long_Float. Similarly, the precision of Short_Float (if
provided) should be no greater than Float. Corresponding recommendations
apply to any other predefined floating point types. There need not be a
named floating point type corresponding to each distinct base decimal
precision supported by an implementation."
But bindings look very strange to me:
1. Long_Long_Float may not exist at all.
2. When dealing with a C library, use C types defined in Interfaces.C!
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2022-12-06 11:36 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-06 11:13 New compiler error with new compiler Jerry
2022-12-06 11:36 ` Dmitry A. Kazakov [this message]
2022-12-06 13:32 ` Simon Wright
2022-12-08 4:07 ` Jerry
2022-12-08 8:15 ` Dmitry A. Kazakov
2022-12-08 10:29 ` Jeffrey R.Carter
2022-12-08 20:30 ` G.B.
2022-12-08 20:37 ` Simon Wright
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox