From: Simon Wright <simon@pushface.org>
Subject: Inheritance of representation aspects
Date: Sun, 03 Feb 2013 16:27:20 +0000
Date: 2013-02-03T16:27:20+00:00 [thread overview]
Message-ID: <lyip69s6qf.fsf@pushface.org> (raw)
A question on Stack Overflow[1] asks about deriving from an unchecked
union. The questioner thinks that a derived type should also be
an unchecked union, but GNAT doesn't.
A demo is
package Union is
type Access_Kind is (Named, Indexed);
type Array_Type is array (0 .. 1) of Integer;
type Base (Kind : Access_Kind := Access_Kind'First) is record
case Kind is
when Named =>
X, Y : Integer;
when Indexed =>
S : Array_Type;
end case;
end record with
Unchecked_Union => True,
Convention => C_Pass_By_Copy;
-- A primitive operation, freezes Base.
procedure P (R : Base) is null;
-- Derived types should inherit both representation aspects, so
-- both these aspects should be confirming.
type Derived_1 is new Base with Unchecked_Union => True;
type Derived_2 is new Base with Convention => C_Pass_By_Copy;
-- This should fail (ARM 13.1(10)).
type Derived_3 is new Base with Unchecked_Union => False;
end Union;
Both Unchecked_Union and C_Pass_By_Copy are representation aspects, and
should therefore be inherited (I've given links at my SO answer[2]). So
the aspects specified for Derived_1 and Derived_2 should both be
confirming and therefore OK (?), while the aspect for Derived_3 should
be illegal by ARM 13.1(10).
With GNAT GPL 2012 and GCC 4.8.0 (r195682), Derived_1 and Derived_2 fail
(representation item appears too late) and Derived_3 doesn't raise an
error.
With GNAT GPL 2012, if I comment out Derived_1 and Derived_2, the
compilation is successful (with 4.8.0 I get a bug box, which is a
separate issue).
Am I correct that these aspects should be inherited?
[1]
http://stackoverflow.com/questions/14663316/derive-from-unchecked-union
[2]
http://stackoverflow.com/questions/14663316/derive-from-unchecked-union/14671548#14671548
next reply other threads:[~2013-02-03 16:27 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-03 16:27 Simon Wright [this message]
2013-02-04 17:32 ` Inheritance of representation aspects Adam Beneschan
2013-02-04 18:23 ` Simon Wright
2013-02-05 2:45 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox