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=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,610e53a911ec64b3 X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 1995-03-24 08:08:16 PST Path: nntp.gmd.de!stern.fokus.gmd.de!ceres.fokus.gmd.de!zib-berlin.de!news.mathworks.com!uhog.mit.edu!news.mtholyoke.edu!world!blanket.mitre.org!linus.mitre.org!spectre!eachus From: eachus@spectre.mitre.org (Robert I. Eachus) Newsgroups: comp.lang.ada Subject: Re: Importing C Structures Date: 24 Mar 1995 16:08:16 GMT Organization: The Mitre Corp., Bedford, MA. Message-ID: References: <3kr4q3$jd9@newsflash.concordia.ca> <3ksg66$h1c@newssvr.cacd.rockwell.com> NNTP-Posting-Host: spectre.mitre.org In-reply-to: rswhite@cacd.rockwell.com's message of 23 Mar 1995 18:55:02 GMT Date: 1995-03-24T16:08:16+00:00 List-Id: In article <3ksg66$h1c@newssvr.cacd.rockwell.com> rswhite@cacd.rockwell.com (Robert S. White) writes: > I know "use at" for Ada 83 can overide this but it seems to be > not in the spirit of the 83 LRM; > 13.5 "Address clauses should not be used to achieve overlays of > objects...Any program using address clauses to achieve > such effects is erroneous." This is a common misunderstanding. When the Ada 83 RM says that "misusing this freedom is erroneous," the intent was to lay the onus for proper use on the programmer not the compiler. Since the stated use does not violate the first sentence--the objects are overlayed by the hardware, not the users program--the effect is not erroneous, but it sure is implementation dependent. The wording in the 95 RM is much clearer about this, but the intent has always been the same. There are certain areas where compilers cannot do sanity checks, and in those areas the responsibility for correctness and testing falls on the user. > A work around is to have a dual meaning name for the register and > use one procedure, appropriately named, to write to it and a function, > again with a suitable name, for reading it. > This is a case where C programmers use the union structure. I > confess that I have not ferreted out in the Ada 95 RM or Rational > the right (and very concise) way to do this now. > Recommendations? If the right C analog is a union with a field in the struct which can be used to determine which choice is correct, write it in Ada as a discriminated record. If the necessary information is stored separately or not at all, do the Ada equivalent with Unchecked_Conversion between variants, and recognize that coding errors are the responsibility of the programmer. (Or fix the record so you can let the compiler do the checking, even if it means fixing the bug in the C code as well.) -- Robert I. Eachus with Standard_Disclaimer; use Standard_Disclaimer; function Message (Text: in Clever_Ideas) return Better_Ideas is...