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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,438f2856ab36a026,start X-Google-Attributes: gid103376,public From: jeffrey.m.creem@lmco.com (Jeff Creem) Subject: 83/95 issue, bad code or compiler bug Date: 1998/11/19 Message-ID: #1/1 X-Deja-AN: 413647311 Organization: Jeff Creem Newsgroups: comp.lang.ada Date: 1998-11-19T00:00:00+00:00 List-Id: I am trying to port some code from an Ada 83 compiler to an Ada 95 compiler and I have hit a problem that I am trying to figure out. This is similar to the 'size discussion that we going on a few weeks back but slightly different. I have some code that essentially looks like : type My_Integer_Type is range -2**31 .. 2**31-1; for My_Integer_Type'size use 32; subtype My_Subtype is My_Integer_Type range 0 .. 255; type My_Record is record My_Field : My_Subtype; Other_Field : My_Integer_Type; end record; for My_Record use record My_Field at 0 range 0 .. 31; Other_Field at 4 range 0 .. 31; end record; for My_Record'size use 2 * 32; with the old compiler the My_Subtype was still using all 32 bits so that if we had a record with My_Field := 1 and Other_Field := 2 and we looked at the bytes in memory associated with this record we would see 00 00 00 01 00 00 00 02 But with this new compiler (happens to be ada 95) I get 01 00 00 00 00 00 00 02 I suspect that the compiler is seeing that the 'size of My_Subtype is 8 and so then even though I have the record rep-spec it does not feel constrained to put this 8 bit value in any particular place in the 32 bits I have given it since the field is larger than the subtype requires. Yuck. So the question is: Is this due to the Ada 83 code being written in a poor totally unportable way, or is this permitted and expected in Ada 95 or is this a compiler bug (GNAT does not exhibit this "bad" behaviour on my code but it certainly could be that the code as written will have implementation defined results). Thanks, Jeff