comp.lang.ada
 help / color / mirror / Atom feed
* Inheritance of representation aspects
@ 2013-02-03 16:27 Simon Wright
  2013-02-04 17:32 ` Adam Beneschan
  0 siblings, 1 reply; 4+ messages in thread
From: Simon Wright @ 2013-02-03 16:27 UTC (permalink / 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



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

end of thread, other threads:[~2013-02-05  2:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-03 16:27 Inheritance of representation aspects Simon Wright
2013-02-04 17:32 ` Adam Beneschan
2013-02-04 18:23   ` Simon Wright
2013-02-05  2:45     ` Randy Brukardt

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