Document Information






Background

Within Annex J, the lists of Unspecified (J.1), Undefined (J.2), Implementation-Defined (J.3) and Locale-specific (J.4) behaviours, plus Common Extensions (J.5) are in the form of unordered lists, which makes referencing an entry very difficult - especially in third-party documents... this is compounded by new entries often being added mid-list - whether by TC or at full revision - which makes any third-party numbering attempts obsolete. This paper requests that these lists be made ordered by enumerating them to allow referencing. This has the added advantage that the declaration of the behaviours can then be tagged with that reference, thus ensuring that all such behaviours are listed in Annex J.

Some may question whether Annex J serves a purpose, and may even recommend its deletion... and while it may be the case that some software may rely on these behaviours, in the high-integrity sectors (where safety and security are key considerations) the unpredictability of many of these behaviours is considered undesirable; in these cases, Annex J provides a useful basis for a coverage/compliance matrix against these behaviours, both from a user-perspective but also from a tool-vendor or compiler-vendor perspective.

Notes:

  1. This topic was recently raised on the WG14 reflector (first post: #14551 "Editorial Change Request?")
  2. This proposal is for an EDITORIAL CHANGE only and does not affect the technical content of the Standard... it would be deirable to incorporate this in the forthcoming TC.
  3. The MISRA C Guidelines enumerate Annex J as Unspecified n or Undefined n (not a fully qualified reference as per this proposal).

Proposal

Annex J

Note: Future additions to these lists should always be added to the end of the respective section.

Annex J.1 - Unspecified Behaviour
That the 58 entries in Annex J.1 are numbered as J.1(1) ... J.1(58)

Annex J.2 - Undefined Behaviour
That the 185 entries in Annex J.2 are numbered as J.2(1) ... J.2(185)

Annex J.3 - Implementation-Defined Behaviour
That the 2 entries in Annex J.3.1 are numbered as J.3.1(1) ... J.3.1(2)
That the 12 entries in Annex J.3.2 are numbered as J.3.2(1) ... J.3.2(12)
That the 3 entries in Annex J.3.3 are numbered as J.3.3(1) ... J.3.3(3)
That the 13 entries in Annex J.3.4 are numbered as J.3.4(1) ... J.3.4(13)
That the 5 entries in Annex J.3.5 are numbered as J.3.5(1) ... J.3.5(5)
That the 11 entries in Annex J.3.6 are numbered as J.3.6(1) ... J.3.6(11)
That the 2 entries in Annex J.3.7 are numbered as J.3.7(1) ... J.3.7(2)
That the 2 entries in Annex J.3.8 are numbered as J.3.8(1) ... J.3.8(2)
That the 7 entries in Annex J.3.9 are numbered as J.3.9(1) ... J.3.9(7)
That the 1 entry in Annex J.3.10 is numbered as J.3.10(1)
That the 11 entries in Annex J.3.11 are numbered as J.3.11(1) ... J.3.11(11)
That the 46 entries in Annex J.3.12 are numbered as J.3.12(1) ... J.3.12(46)
That the 6 entries in Annex J.3.13 are numbered as J.3.13(1) ... J.3.13(6)

Annex J.4 - Locale-Specific Behaviour
That the 15 entries in Annex J.4 are numbered as J.4(1) ... J.4(15)

Annex J.5 - Common Extensions
That the entry in Annex J.5.1 is numbered as J.5.1(1)
That the entry in Annex J.5.2 is numbered as J.5.2(1)
That the entry in Annex J.5.3 is numbered as J.5.3(1)
That the entry in Annex J.5.4 is numbered as J.5.4(1)
That the entry in Annex J.5.5 is numbered as J.5.5(1)
That the entry in Annex J.5.6 is numbered as J.5.6(1)
That the entries in Annex J.5.7 are numbered as J.5.7(1) and J.5.7(2)
That the entry in Annex J.5.8 is numbered as J.5.8(1)
That the entry in Annex J.5.9 is numbered as J.5.9(1)
That the entry in Annex J.5.10 is numbered as J.5.10(1)
That the entry in Annex J.5.11 is numbered as J.5.11(1)
That the entry in Annex J.5.12 is numbered as J.5.12(1)
That the entry in Annex J.5.13 is numbered as J.5.13(1)
That the entry in Annex J.5.14 is numbered as J.5.14(1)
That the entries in Annex J.5.15 are numbered as J.5.15(1) and J.5.15(2)
That the entry in Annex J.5.16 is numbered as J.5.16(1)
That the entry in Annex J.5.17 is numbered as J.5.17(1)

Terminology

This allows the Unspecified, Undefined, Implementation-Defined, or Locale-specific Behaviour to be refered to as (eg) Unspecified J.1(1) both internally within the Standard, and externally (eg by ISO 17961, CERT-C or MISRA C, or by compiler/analysis-tool documentation).

Subsequent Changes

That where-ever the Standard declares Unspecified, Undefined, Implementation-Defined, or Locale-specific Behaviour, the declaration is tagged (as a superscript) with the reference in Annex J.

(As an aside, this should ensure that all cases of Unspecified, Undefined, Implementation-Defined, or Locale-specific Behaviour is included in Annex J).

ClauseLineChange Recommended
Make the following changes to add cross-references as superscript tags:
Unspecified Behaviour
Clause 5.1.2 Line 5tag unspecified with superscript J.1(1)
Clause 5.1.2.2.3 Line 5tag unspecified with superscript J.1(2)
Clause 5.1.2.3(5)Line 3tag unspecified with superscript J.1(3)
Clause 5.2.2(1) Line 7tag unspecified with superscript J.1(4)
Clause 5.2.2(2) Line 3 of \btag unspecified with superscript J.1(5)
Clause 5.2.2(2) Line 3 of \ttag unspecified with superscript J.1(6)
Clause 5.2.2(2) Line 3 of \vtag unspecified with superscript J.1(7)
etc
Undefined Behaviour
Clause 4Line 2tag undefined with superscript J.2(1)
etc
Implementation-defined Behaviour
Clause 3.10 Line 1tag implementation-defined with superscript J.3.1(1)
Clause 5.1.1.3Line 4tag implementation-defined with superscript J.3.1(1)
Clause 5.1.1.2Line 2tag implementation-defined with superscript J.3.1(2)
etc
Locale-specific Behaviour
Clause 5.2.1Line 5tag locale-specific with superscript J.4(1)
etc