On 30 Dec 2006 03:20:11 +0100, Gabriel Dos Reis
<[EMAIL PROTECTED]> wrote:
...
The C standard, in effect, has an appendix (Annex H) that was not
there in the C89 edition, and that talks about the very specific issue
at hand

       H.2.2  Integer types

       [#1] The signed C integer types int,  long  int,  long  long
       int,  and  the  corresponding  unsigned types are compatible
       with LIA-1.  If an implementation adds support for the LIA-1
       exceptional  values  ``integer_overflow'' and ``undefined'',
       then those types are LIA-1 conformant types.   C's  unsigned
       integer  types  are  ``modulo''  in  the LIA-1 sense in that
       overflows  or  out-of-bounds  results  silently  wrap.    An
       implementation  that  defines  signed  integer types as also
       being modulo need not  detect  integer  overflow,  in  which
       case, only integer divide-by-zero need be detected.

which clearly says LIA-1 isn't a requirement - notice "if" in the
second setence.
H.1 makes it clear that the entire Annex H doesn't add any extra rule
to the language but merely describes what C is in regard to LIA-1.
H.2 doubly makes it clear that C as it defined isn't LIA-1
- again, notice "if" in H.2p1.
The second sentence of H.3p1 confirms this again:

  C's operations are compatible with LIA−1 in that C
  allows an implementation to cause a notification to occur
  when any arithmetic operation
  returns an exceptional value as defined in LIA−1 clause 5.

i.e. "compatible" means C's definition doesn't prevent
a LIA-1 conformant implementation.
In other words, all LIA-1 comformant compiler is conformant to C99
in terms of arithmetic and types.
However, not all C99 conformant compiler aren't LIA-1 conformant.
C isn't conformant to LIA-1 but merely compatible,
exactly because of the undefined aspect.

That's enough playing a language laywer for me in a day.
--
#pragma ident "Seongbae Park, compiler, http://seongbae.blogspot.com";

Reply via email to