https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32181
Eric Botcazou changed:
What|Removed |Added
Status|UNCONFIRMED |NEW
Last reconfirmed|
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32181
--- Comment #9 from nicolas.boulenguez at free dot fr ---
4.9.0 20140218 (experimental) [trunk revision 207856] (x86_64-linux-gnu)
Program_Error exp_disp.adb:8456 explicit raise
Error detected at test1.adb:21:4
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32181
nicolas.boulenguez at free dot fr changed:
What|Removed |Added
CC||nicolas.boulenguez at
--- Comment #5 from sam at gcc dot gnu dot org 2008-04-24 08:36 ---
Ahn Vo: Pak2.Eq is *the same* as Pak1.Eq, that's the whole point. Thus both
consider only T1 aspects of the objects.
What you say would be true if the code had been:
package Pak1 is
type T1 is tagged null
--- Comment #6 from ludovic at ludovic-brenta dot org 2008-04-24 09:55
---
(In reply to comment #4)
Anh Vo, you are perfectly right up to a point: Pak1.Eq returns True and Pak2.Eq
returns False, therefore comparing the two results yields False. Where you are
wrong is where you think
--- Comment #7 from anhvofrcaus at gmail dot com 2008-04-24 15:37 ---
Samuel and Ludovic,
You both are right that GNAT has a bug, and the original test code was a good
one. In fact, Pak2.Eq(Z1, Z2) would return True if GNAT worked correctly.
--
--- Comment #1 from anhvofrcaus at gmail dot com 2008-04-23 21:59 ---
The GNAT behaves correctly by printing FAILED because the test code has a
problem. When converting Child type to the Parent type, any component(s) of the
Child type will be lost. Therefore, Pak1.Eq(Pak1.T1(Z1),
--- Comment #2 from sam at gcc dot gnu dot org 2008-04-23 23:21 ---
Anh Vo: I think that you are wrong and that Ludovic is right. Note that Eq (T2,
T2) is not a renaming of T2 = operator, it is, through inheritance, a
renaming of T1 = operator with signature
function = (X, Y : T1)
--- Comment #3 from ludovic at ludovic-brenta dot org 2008-04-23 23:47
---
Exactly. The quoted portion of the ARM says that Pak2.Eq (Z1, Z2) should
implicitly convert Z1 and Z2 to type T1, then call Pak1.Eq, then return True.
Instead, it returns False as though GNAT synthesised a new
--- Comment #4 from anhvofrcaus at gmail dot com 2008-04-24 01:32 ---
Samuel:
Note that this function knows *nothing* about T2, so it cannot obviously
compare new fields added in T2, it only compares fields already present in T1.
That is exactly my point. Pak1.= operator only operates
10 matches
Mail list logo