comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Compiler doesn't respect 'Size for atomic object
Date: Thu, 21 Dec 2017 01:10:39 -0600
Date: 2017-12-21T01:10:39-06:00	[thread overview]
Message-ID: <p1fmpg$inr$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: p1ei5v$fqc$1@dont-email.me

"Simon Clubley" <clubley@remove_me.eisner.decus.org-Earth.UFP> wrote in 
message news:p1ei5v$fqc$1@dont-email.me...
> On 2017-12-20, Simon Wright <simon@pushface.org> wrote:
>> Simon Clubley <clubley@remove_me.eisner.decus.org-Earth.UFP> writes:
>>
>>> If you use a naturally 32-bit variable instead of your Interrupt_ID
>>> data type, does it work ok ?
>>
>> Yes. My workround is to declare the atomic object as Integer, and
>> convert the Interrupt_ID to Integer (the ARM says only that Interrupt_ID
>> is discrete, but that's a bridge to cross when we come to it; it's
>> naturally an Integer on Cortex-M).
>
> Unless Randy and company come up with something around the use of
> Size to extend the size of the base data type[*], I would consider
> this to be a compiler bug.

I tend to agree. The reason is 13.1(7/2). The extra bits in this case are 
defined to be "padding bits", and 13.1(7/2) says that "padding bits are 
normally read and updated along with the others".

AI12-0128-1 adds some rules for non-atomic subcomponents of atomic objects, 
but it shouldn't change the behavior of an *elementary* atomic object, like 
this one. Perhaps GNAT is treating this like a record type with two 
components, the actual integer value, and some padding bits. Then it would 
be right. (But that's not how the language defines this object.)

Still, you'll always have less issues if you avoid padding bits and have the 
subtype Object_Size (this is now in Ada 2020, so we can talk about it) be 
32.

Which is something you (Simon Wright, not Simon Clubley) might try, since 
Object_Size can be specified for any subtype. So try declaring:

    subype Simons_Interrupt_Id is Interrupt_Id with Object_Size => 32;

and declare your object of that subtype. Then there are no padding bits (as 
defined  by 13.1(7.2)).

                            Randy.



  reply	other threads:[~2017-12-21  7:10 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-20 12:35 Compiler doesn't respect 'Size for atomic object Simon Wright
2017-12-20 19:23 ` Simon Clubley
2017-12-20 20:19   ` Simon Wright
2017-12-20 20:45     ` Simon Clubley
2017-12-21  7:10       ` Randy Brukardt [this message]
2017-12-21 14:08         ` Simon Wright
2017-12-20 21:20     ` Simon Wright
2017-12-21  5:55       ` Robert Eachus
2017-12-21 14:02         ` Simon Wright
2017-12-21 22:02         ` Simon Wright
2017-12-22  4:51           ` Robert Eachus
2017-12-22 10:21             ` Simon Wright
replies disabled

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