comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: What is the warning about builtin-function on gcc-4.6.0 ?
Date: Sun, 27 Mar 2011 12:41:31 -0400
Date: 2011-03-27T12:41:31-04:00	[thread overview]
Message-ID: <wccaaggh5xg.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 87vcz5ot5z.fsf@mid.deneb.enyo.de

Florian Weimer <fw@deneb.enyo.de> writes:

> I'm bothered by this reasoning because it means that Ada compilers
> don't have to implement any overflow checks on integer arithmetic.

Randy was talking about floating point.  I'm not sure why the
above follows from what Randy said, but anyway, the rules for
integer arithmetic are:

If the expression is static, you get the right answer.

If the expression is dynamic, and is within the base range,
you get the right answer.

If the expression is dynamic, and is outside the base range,
either you get the right answer, or it raises Constraint_Error.
It is never required to raise C_E.

> A concrete example: Suppose that A, B are of type Integer, and
> Integer'Base has the same range as Integer, and A + B gives a
> mathematical result outside this range.  The implementation chooses to
> produce an "invalid value" for the result.

OK so far.

>...During actual execution on
> real hardware, it is represented as the lower Integer'Size bits of the
> result.

No, that's not allowed.  If integer is 32 bits, it can store the
result of A+B in a 64-bit register, and not raise C_E.  But it
can't just throw away the high-order bits.

Suppose A+B >= 2**31.  If you say, "if A+B > Integer'Last then...",
then it must either raise C_E or be True.  It can't be False,
because that's a wrong answer.

> It's also not clear whether "abnormal" and "not normal" and "invalid"
> and "not valid" are equivalent.

It's clear to me.  ;-)

I mean, surely the RM doesn't twist the normal meaning of English
THAT badly!

>...(You cannot detect values which are
> conceptually invalid by inspecting the 'Valid attribute at run time
> because it produces false negatives, but this is a different matter.)

I'm not sure what you mean.  How can 'Valid produce false negatives?

>> Data validity is a very complex subject; you can read 13.9.1 10
>> times and get different impressions each time.
>
> I don't think 13.9.1 comes into play at all.  It says what happens
> with invalid representations, but doesn't say how they are produced.

The main way, which is mentioned in 13.9.1, is to use an uninitialized
variable.

> (The standard doesn't say much at all about the behavior of Ada
> programs if you can invoke 13.9.1 whenever it's convenient.)

- Bob



  reply	other threads:[~2011-03-27 16:41 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-26  6:32 What is the warning about builtin-function on gcc-4.6.0 ? ytomino
2011-03-26  8:45 ` Florian Weimer
2011-03-26  9:13   ` ytomino
2011-03-26  9:43     ` Florian Weimer
2011-03-26 10:07       ` ytomino
2011-03-26 10:24         ` Florian Weimer
2011-03-26 15:14           ` Dmitry A. Kazakov
2011-03-26 21:36             ` ytomino
2011-03-27  9:50               ` Dmitry A. Kazakov
2011-03-26 14:50         ` Simon Wright
2011-03-26 15:50           ` Florian Weimer
2011-03-26 16:32             ` Simon Wright
2011-03-26 17:02               ` Florian Weimer
2011-03-26 17:48                 ` Simon Wright
2011-03-26 18:48                   ` Florian Weimer
2011-03-27  2:08                 ` Randy Brukardt
2011-03-27  8:37                   ` Florian Weimer
2011-03-27 16:41                     ` Robert A Duff [this message]
2011-03-27 17:21                       ` Florian Weimer
2011-03-27 17:56                         ` Robert A Duff
2011-03-27 16:51                     ` Robert A Duff
2011-03-27 17:05                       ` Florian Weimer
2011-03-27 17:14                         ` Robert A Duff
2011-03-29  2:20                           ` Randy Brukardt
2011-03-29 18:35                             ` Robert A Duff
2011-03-29 23:35                               ` Randy Brukardt
2011-03-30  1:02                               ` Adam Beneschan
2011-03-30 12:57                                 ` Robert A Duff
2011-03-30 14:41                                   ` Adam Beneschan
2011-03-30 18:39                                     ` Robert A Duff
2011-03-30 19:28                                   ` Randy Brukardt
2011-03-26 21:58       ` ytomino
2011-03-26 22:00         ` Florian Weimer
2011-03-26 22:22 ` anon
2011-03-26 22:36   ` ytomino
2011-03-27 12:00     ` anon
2011-03-27 18:50       ` ytomino
2011-03-27 23:35         ` anon
2011-03-27 23:42         ` anon
replies disabled

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