J3/06-331 To: J3 From: Dan Nagle Subject: List Processor Dependencies in an Annex Date: 2006 Oct 29 Dependencies: none OWGV is likely to recommend to language technical committees that an Annex describing processor dependencies be added to those standards currently lacking one. For example, please see C99 Annex J, page 487. The motivation is to aid applications programmers who want to know all possible differences between processors, to aid tool makers who want to know what might be indicated as possible variances between processors, and to aid compiler vendors who may be asked to provide options to allow various different allowed behavior. The C committee's liaison to OWGV reports that Annex J is helpful to the C community, and that the C committees have been praised for having added it and for maintaining it. This paper may not be complete, it is made by searching the 007r1 PDF for the string "processor dependency" and adding the page, line and a short description to an Annex to be added to 007r1. Thus, the edits here may be incomplete. Edits: (add new annex to the table of contents) xi:[after Annex D] "Annex E (informative) Processor Dependencies ... " (relabel current annex E) xi: change "E" to "F" (add new annex to document) [350+] starting a new page, add "Annex E processor Dependencies This annex collects some information about processor dependencies that appear in this international standard. This international standard does not specify those properties listed in section 1.4, page 1. This international standard does not specify which additional intrinsic procedures or intrinsic modules a processor may support. This international standard does not specify the order of processing program units to transform them into an executable program. Whether an external file is available to an image (2.3.2 Program Execution) is processor dependent. How a processor selects the number of images is not specified by this international standard. See Note 2.5 on page 14. The order of evaluation of specification expressions (2.3.6 Execution Sequence) in the specification part of a procedure is not specified. Any companion processors (2.5.10 Companion Processors) a processor has has are not specified. The processor character set (3.1 Processor Character Set) is processor dependent. The means for specifying the free form for fixed form of Fortran source is processor dependent (3.3 Source Form). The maximum number of characters allowed on a free form source line containing non-default characters is processor dependent (3.3.1 Free Form Source). The maximum number of characters allowed on a fixed form source line containing non-default characters is processor dependent (3.3.2 Fixed Form Source). The maximum depth of nesting of include files (3.4 Including Source Text) is processor dependent, as is the interpretation of the **char-literal-constant** on the include line. Whether comments present in a macro definition are also present in the expansion is processor dependent (3.5.2.1 General), as is continuation lines and consequetive blanks. The set of values supported by an intrinsic type (other than logical) is processor dependent (4.1.1 Set of Values). The type kind values specifying a representation method supported by a processor is processor dependent (4.4.1 Classification and Specification). The type kind value of a character type length is processor dependent (4.4.5.1 Character Sets). A processor may restrict some or all control characters from being representable characters when expressed in fixed form source (4.4.5.3). The processor defines the collating sequence for each character set (4.4.5.4 Collating Sequence). The upper limit of the size supported by the BITS type is processor dependent (4.4.7 Bits Type). When several objects are finalized as specified by (4.5.6.3 When Finalization Occurs), the order of finalization is processor dependent (4.5.6.2 The Finalization Process). Whether finalization occurs for objects in modules or submodules when no active procedure references the module or submodule (4.5.6.3), or for objects allocated via pointer allocation and all pointers have their allocation status changed so none of them point to the object any longer, is processor dependent. If finalization occurs, it is processor dependent when it occurs. If an object is not defined to be contiguous, or defined to be not contiguous, it is processor dependent whether it is contiguous (5.3.6 Contiguous Attribute). The positive value assigned to a stat= variable in an allocate statement (6.3.1) or deallocate statement (6.3.3) when an error occurs is processor dependent, as is the value assigned to the errmsg= variable. If an unsaved allocatable local variable of a module or submodule is allocated when execution of a RETURN or END statement results in no active scoping unit referencing the module or submodule, it is processor-dependent whether the object retains its allocation status or is deallocated (6.3.3.1). In relational expressions where both operands are integers with the same range but different type kind values, or are any combination of real and complex with different type kind values but the same precision, or when both operands are of type logical with different type kind values, the type kind value of the expression is processor dependent (7.1.4.2 Type, type parameters, and shape of the result of an operation). The applications programmer may wish to read (7.1.8.4 Evaluation of numeric intrinsic operations) if the precise translation of numerical operations are of concern. When performing array assignments, the processor may perform the element-by-element assignment in any order. When performing defined type assigments, the processor may perform the component-by-component assignment in any order or by any means that has the same effect. Execution of a BLOCK construct causes evaluation of the specification expressions within its specification-part in a processor-dependent order. Within a DO-CONCURRENT construct, a pointer that has its pointer association changed in more than one iteration has a processor dependent association status when the construct terminates. When an image is terminated by a STOP statement, its stop code, if any, is made available in a processor-dependent manner. If the STAT= or ERRMSG= specifier appears on a SYNC ALL, SYNC TEAM, SYNC IMAGES, 3 SYNC MEMORY, NOTIFY, or QUERY statement and an error occurs during execution of one of these statements, the variable becomes defined with a processor-dependent positive integer value. Whether a processor allows a file to be viewed both as a record file and as a stream file is processor dependent; in this case the relationship between the file storage units when viewed as a stream file and the records when viewed as a record file is processor dependent. A processor may prohibit some control characters (3.1) from appearing in a formatted record or a formatted stream file. At any given time, there is a processor-dependent set of allowed access methods, a processor-dependent set of allowed forms, a processor-dependent set of allowed actions, and a processor-dependent set of allowed record lengths for a file. The set of allowable names for a file is processor dependent. When an external file is connected for formatted stream access, the relationship between positions of successive file storage units is processor dependent. An asterisk identifies particular processor-dependent external units that are preconnected for formatted sequential access (9.5.4.2). These units are also identified by unit numbers defined by the named constants INPUT UNIT and OUTPUT UNIT of the ISO FORTRAN ENV module (13.8.3). This standard identifies a processor-dependent external unit for the purpose of error reporting. This unit shall be preconnected for sequential formatted output. The processor may define this to be the same as the output unit identified by an asterisk. This unit is also identified by a unit number defined by the named constant ERROR UNIT of the ISO FORTRAN ENV intrinsic module. At any given time, there is a processor-dependent set of external units that exist for a program. Whether a unit may be connected to a file that is also connected to a C stream is processor dependent. Whether a unit may be connected to a file that is also connected to a C stream is processor dependent. If the processor allows a unit to be connected to a file that is also connected to a C stream, the results of performing input/output operations on such a file are processor dependent. It is processor dependent whether the files connected to the units INPUT UNIT, OUTPUT UNIT, and ERROR UNIT correspond to the predefined C text streams standard input, standard output, and standard error. If a procedure defined by means of Fortran and a procedure defined by means other than Fortran perform input/output operations on the same external file, the results are processor dependent. If the ACTION= specifier is omitted on the OPEN statement, the default value is processor dependent. If the ENCODING= specifier is omitted in an OPEN statement that initiates a connection, the default value is DEFAULT, which is processor dependent. The name of a file opened with STATUS='SCRATCH' is processor dependent. The interpretation of case in a file name is processor dependent. The value returned to a NEWUNIT= specifier is processor dependent. If the RECL= specifier is omitted for a file is being connected for sequential access, the default value is processor dependent. When a record contains any nondefault characters, the appropriate value for the RECL= specifier is processor dependent. If the ROUND= specifier is omitted in an OPEN statement that initiates a connection, the I/O rounding mode is processor dependent. If the SIGN= specifier is omitted in an OPEN statement that initiates a connection, the default value is processor dependent. If STATUS='UNKNOWN' is specified in an OPEN statement, the status is processor dependent. Successful execution of an asynchronous data transfer statement containing an ID= specifier causes the variable specified in the ID= specifier to become defined with a processor-dependent value. Any type mismatch caused by unformatted input has a processor defined result. The units used for derived type transfers are processor dependent. When an error occurs, the IOSTAT= and IOMSG= specifiers return processor dependent values. The action, if any, of a FLUSH statement is processor dependent. The case of characters returned by INQUIRE statements for file names is processor dependent. The POSITION= specifier in an INQUIRE statement returns a processor dependent value. The value returned by the INQUIRE statement SIZE= specifier is processor dependent. The value returned by the IOLENGTH= specifier is processor dependent. The set of error conditions in input/output ststements is processor dependent. During output to a Unicode file, if a character output list item or character string edit descriptor contains a character that is not representable in the ISO 10646 character type, the result is processor-dependent. On output, with I, B, O, Z, F, and G editing, the specified value of the field width may be zero. In such cases, the processor selects the smallest positive actual field width that does not result in a field filled with asterisks. On input, if characters other than NaN or NaN() are present in the file, the processor may supply either a signalling NaN or a quiet NaN. On output, the processor may print characters other than NaN or NaN() when the value is a NaN. Rounding of real values, and how to round in cases where two values are equally valid is processor dependent. When a dummy argument does not have the target attribute, or does not match the actual argument in type, whether any pointers to the actual argument are associated with the dummy is processor dependent. If the dummy argument has the TARGET attribute and is an explicit-shape array, an assumed-shape array with the CONTIGUOUS attribute, or an assumed-size array, and the effective argument has the TARGET attribute but is not an array section with a vector subscript then (1) on invocation of the procedure, whether any pointers associated with the effective argument become associated with the corresponding dummy argument is processor dependent, and (2) when execution of the procedure completes, the pointer association status of any pointer that is pointer associated with the dummy argument is processor dependent. If the dummy argument does not have the TARGET attribute, any pointers associated with the actual argument do not become associated with the corresponding dummy argument on invocation of the procedure. If such a dummy argument is used as an actual argument that is associated with a dummy argument with the TARGET attribute, whether any pointers associated with the original actual argument become associated with the dummy argument with the TARGET attribute is processor dependent. The interface of a procedure defined by means other than Fortran may be specified by an interface body or procedure declaration statement. If the interface of such a procedure does not have a proc-language-binding-spec, the means by which the procedure is defined are processor dependent. The values returned by mathematical intrinsic procedures are processor dependent approximations. If there is no default character corresponding to the ACSII character indicated by the argument of the ACHAR function, the result is processor dependent. The extent to which a processor supports IEEE arithmetic is processor dependent.