comp.lang.ada
 help / color / mirror / Atom feed
* Non_Primitive Operations and Object.Operation Resolution
@ 2016-04-20 23:59 Jeffrey R. Carter
  2016-04-21 20:28 ` Randy Brukardt
  2016-04-22 23:49 ` ytomino
  0 siblings, 2 replies; 9+ messages in thread
From: Jeffrey R. Carter @ 2016-04-20 23:59 UTC (permalink / raw)


Some pertinent code from PragmARC.Unbounded_Integers:

package PragmARC.Unbounded_Integers is
    ...
private -- PragmARC.Unbounded_Integers
    type Calculation_Value is mod System.Max_Binary_Modulus;

    Digit_Size : constant := Calculation_Value'Size / 2;

    type Digit_Value is mod 2 ** Digit_Size;

    package Digit_Lists is new Ada.Containers.Vectors (Index_Type => Positive, 
Element_Type => Digit_Value);

    subtype Digit_List is Digit_Lists.Vector;
    ...
end PragmARC.Unbounded_Integers;

package body PragmARC.Unbounded_Integers is
    ...
    use type Digit_List;

    function Element (List : Digit_List; Index : Positive) return Digit_Value;
    -- If Index is a valid index into List, returns the value stored there; 
otherwise, returns 0
    ...
    ... List.Element (Index) ... -- Index is known to be a valid index for List
    ...
    ... Element (Left.Digit, I) ... I may not be a valid index for Left.Digit

Until recently, this was no problem. Calls like the 1st example called the 
primitive Element declared in Digit_Lists. Calls like the 2nd called the 
non-primitive Element declared in Unbounded_Integers, the only one directly visible.

Recently I've received a couple of reports that this code fails to compile with 
GNAT GPL 2015. It complains, for calls like List.Element, that it can't resolve 
Element, pointing to the primitive one in Digit_Lists and the non-primitive one 
in Unbounded_Integers. I dismissed this as a compiler error, since 
Object.Operation notation may only be used for primitive operations.

However, I've more recently been informed that "gcc 6" on FreeBSD gives the same 
error. While I still think this is a compiler error, I thought I'd ask the 
language lawyers and ARG members on here to make sure.

Note that Unbounded_Integers is written to ISO/IEC 8652:2007, and so may not 
compile with an Ada-12 compiler. For GNAT, that means it should be compiled with 
the -gnat05 option. However, I see no reason why it should not also be valid Ada 
12, and it was reported that ggc 6 gives the same error with or without that option.

-- 
Jeff Carter
"[M]any were collected near them, ... to
enjoy the sight of a dead young lady, nay,
two dead young ladies, for it proved twice
as fine as the first report."
Persuasion
155

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-04-23  0:38 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-20 23:59 Non_Primitive Operations and Object.Operation Resolution Jeffrey R. Carter
2016-04-21 20:28 ` Randy Brukardt
2016-04-21 21:13   ` Jeffrey R. Carter
2016-04-22  6:27     ` AdaMagica
2016-04-22 18:24       ` Jeffrey R. Carter
2016-04-22 22:24     ` Randy Brukardt
2016-04-23  0:37       ` Jeffrey R. Carter
2016-04-22 23:49 ` ytomino
2016-04-23  0:38   ` Jeffrey R. Carter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox