comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pushface.org>
Subject: Re: setting an address with pure?
Date: Sat, 11 Jul 2015 08:47:34 +0100
Date: 2015-07-11T08:47:34+01:00	[thread overview]
Message-ID: <lypp3zkueh.fsf@pushface.org> (raw)
In-Reply-To: mnphf3$gmg$1@loke.gir.dk

"Randy Brukardt" <randy@rrsoftware.com> writes:

> "Simon Wright" <simon@pushface.org> wrote in message 
> news:lyy4iokzci.fsf@pushface.org...
>>I need to specify the address at which a hardware object appears.
>>
>> This works:
>>
>>   PIOA : PIO
>>     with
>>       Import,
>>       Convention => Ada,
>>       Address => System.Storage_Elements.To_Address (16#400E0E00#);
>>
>> but means that I can't declare the package Pure (or even Preelaborate).
>
> You can't have a variable at library level in a Pure package (there
> shall be no state), so it makes no sense at all for such a package to
> contain any hardware objects.
>
> I don't see any reason why this can't be Preelaborated
> (System.Storage_Elements is Pure, after all); that depends on the
> initialization of the type PIO (it needs to have
> "preelaborable_initialization"; use the pragma if in doubt).

GNAT says that the call to System.Storage_Elements.To_Address is invalid
because "non-static call not allowed in preelaborated unit", whether
Preelaborable_Initialization is applied or not. I take it that
To_Address isn't static because its result type isn't scalar? (4.9(19))

I think this may be a failure in a GNAT extension; To_Address has pragma
Pure_Function applied to it, and[2]

   "It specifies that the function Entity is to be considered pure for
   the purposes of code generation. This means that the compiler can
   assume that there are no side effects, and in particular that two
   calls with identical arguments produce the same result. It also means
   that the function can be used in an address clause."

[1] http://www.ada-auth.org/standards/12rm/html/RM-4-9.html#p19
[2] https://gcc.gnu.org/onlinedocs/gnat_rm/Pragma-Pure_005fFunction.html


  reply	other threads:[~2015-07-11  7:47 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-10 11:48 Q: setting an address with pure? Simon Wright
2015-07-10 12:03 ` G.B.
2015-07-10 14:38   ` Simon Wright
2015-07-10 22:37 ` Randy Brukardt
2015-07-11  7:47   ` Simon Wright [this message]
2015-07-13 19:10     ` Randy Brukardt
2015-07-14  9:36       ` Mark Lorenzen
2015-07-13 23:41   ` RasikaSrinivasan
2015-07-14  7:38     ` Simon Wright
2015-07-14  7:42       ` Simon Wright
2015-07-11 10:35 ` Q: " Brian Drummond
2015-07-11 13:30   ` Simon Wright
2015-07-11 14:03     ` AdaMagica
2015-07-11 14:27       ` Simon Wright
2015-07-13 18:53         ` Randy Brukardt
2015-07-13 19:50           ` Simon Wright
2015-07-14 12:24     ` Brian Drummond
2015-07-15 15:50       ` rrr.eee.27
2015-07-15 18:45         ` Simon Wright
2015-07-16  9:21         ` Brian Drummond
2015-07-16 18:54           ` Simon Wright
2015-07-16 19:14           ` Randy Brukardt
replies disabled

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