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,45a9122ddf5fcf5 X-Google-Attributes: gid103376,public From: kst@thomsoft.com (Keith Thompson) Subject: Re: Rules for Representation of Subtypes Date: 1996/09/26 Message-ID: #1/1 X-Deja-AN: 185483610 sender: news@thomsoft.com (USENET News Admin @flash) x-nntp-posting-host: pulsar references: <01bba947$d8990620$188371a5@dhoossr.iquest.com> organization: Thomson Software Products, San Diego, CA, USA newsgroups: comp.lang.ada originator: kst@pulsar Date: 1996-09-26T00:00:00+00:00 List-Id: In dewar@cs.nyu.edu (Robert Dewar) writes: [...] > This in fact is a place where Ada 95, somewhat accidentally, is incompatible > with most Ada 83 implementations. What Ada 95 did was to specify things that > are left unspecified in the Ada 83 reference manual, and to do it in a manner > that was compatible with the Intermetrics compiler, but not most other Ada > 83 compilers, so this is something to be on the watch for. [...] > Second, in Ada 95, the size of a subtype is required to be the minimum > number of bits, so it is NOT AT ALL the case that a subtype has the same > size as the first subtype. On the contrary, this would be an incorrect > implementation. > > For example, Natural'Size is required to be Integer'Size MINUS ONE, i.e. > 31, not 32, on most machines. This can cause chaos if a program assumes > that Natural'Size is 32, as it was on many Ada 83 implementations. The Ada 83 reference manual's description of the 'Size attribute is rather vague. AI-00536 was an attempt to clarify this description. Among other things, it says: If the size of a type or a subtype S has not been determined by a length clause and S is either a scalar subtype, a constrained array subtype, a constrained subtype with discriminants, an access type, a task type, or a private type whose full type is one of these types, then S'SIZE yields the smallest number of bits that an implementation will allocate for an object declared with the subtype indication S; objects whose size is determined by a record component clause are not considered in determining the value of S'SIZE. For the predefined type BOOLEAN, BOOLEAN'SIZE is one. In other words, the 'Size for a subtype is the smallest size that can be allocated for an object of that subtype, including standalone objects and components of (possibly packed) arrays and records, but excluding components affected by record component clauses. For an Ada 83 implementation that can pack a Natural and a Boolean into a single word in a packed record, Natural'Size should be Integer'Size - 1. Note in particular that Boolean'Size was required to be one, even though a standalone Boolean object is very likely to occupy 8 bits or more. I seem to recall that this interpretation was enforced by the 1.11 ACVCs, though I don't remember the exact details. Of the two Ada 83 implementations I have access to, one uses Natural'Size=31. The other uses Natural'Size=32, but it doesn't support pragma Pack on records. (Publicly disputing Robert Dewar is always dangerous. Fortunately it's a bounded error; the effect is limited to learning something.) -- Keith Thompson (The_Other_Keith) kst@thomsoft.com <*> TeleSoft^H^H^H^H^H^H^H^H Alsys^H^H^H^H^H Thomson Software Products 10251 Vista Sorrento Parkway, Suite 300, San Diego, CA, USA, 92121-2706 FIJAGDWOL