comp.lang.ada
 help / color / mirror / Atom feed
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

  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