From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!news.glorb.com!peer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!post02.iad.highwinds-media.com!news.flashnewsgroups.com-b7.4zTQh5tI3A!not-for-mail From: Stephen Leake Newsgroups: comp.lang.ada Subject: Re: What shoudl GNAT do wrt variant record and representation clauses? References: <49494faf-1e2d-43a1-a2b0-fd25af3850cc@googlegroups.com> Date: Wed, 04 Feb 2015 03:59:28 -0600 Message-ID: <85oapa3slb.fsf@stephe-leake.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (windows-nt) Cancel-Lock: sha1:n+AGVtgDVxRjlr3aYbOe64n1YKM= MIME-Version: 1.0 Content-Type: text/plain X-Complaints-To: abuse@flashnewsgroups.com Organization: FlashNewsgroups.com X-Trace: 6dd0a54d1ed82e3fb833021757 X-Received-Bytes: 2513 X-Received-Body-CRC: 2525497127 Xref: news.eternal-september.org comp.lang.ada:24870 Date: 2015-02-04T03:59:28-06:00 List-Id: Lucretia writes: > Hi, > > I've been back on SDLAda, one bit I've been dreading, setting up a > unit test to check to make sure my representations of the pixel > formats are the same as what the C macros produce. Use -fdump-ada-spec, then you don't need to write records or tests. > type Pixel_Orders (Pixel_Type : Pixel_Types := Unknown) is > record > case Pixel_Type is > when Index_1 | Index_4 | Index_8 => > Indexed_Order : Bitmap_Pixel_Order; > > when Packed_8 | Packed_16 | Packed_32 => > Packed_Order : Packed_Component_Order; > > when Array_U8 | Array_U16 | Array_U32 | Array_F16 | Array_F32 => > Array_Order : Array_Component_Order; > > when others => > null; > end case; > end record with > Unchecked_Union => True, > Convention => C, > Size => 4; > > for Pixel_Orders use > record > Indexed_Order at 0 range 0 .. 2; > Packed_Order at 0 range 0 .. 3; > Array_Order at 0 range 0 .. 3; > end record; > So, is this correct behaviour? Your original version says there is one bit that is unspecified for Pixel_Type in Index_1 | Index_4 | Index_8, so yes, this is correct behavior. Another way to handle the extra bit is: case Pixel_Type is when Index_1 | Index_4 | Index_8 => Indexed_Order : Bitmap_Pixel_Order; Spare_1 : Boolean; >If so, is there a compiler flag to catch this? Consulting the secret documentation: (info "(gnat_ugn) Warning Message Control") C-s record turns up "-gnatw.h (holes in record layouts)" -- -- Stephe