------- Comment #6 from dominiq at lps dot ens dot fr 2009-10-08 08:43 ------- The use of common in the context of this PR badly hurts my understanding of commons: storage arrays computed at compile time. The standard says (f2008):
5.7.2 COMMON statement 5.7.2.1 General 1 The COMMON statement specifies blocks of physical storage, called common blocks, that can be accessed by any of the scoping units in a program. Thus, the COMMON statement provides a global data facility based on storage association (16.5.3). 2 A common block that does not have a name is called blank common. R568 common-stmt is COMMON [ / [ common-block-name ] / ] common-block-object-list [ [ , ] / [ common-block-name ] / common-block-object-list ] ... R569 common-block-object is variable-name [ ( array-spec ) ] or proc-pointer-name C595 (R569) An array-spec in a common-block-object shall be an explicit-shape-spec-list. C596 (R569) Only one appearance of a given variable-name or proc-pointer-name is permitted in all common-block-object-lists within a scoping unit. C597 (R569) A common-block-object shall not be a dummy argument, a result variable, an allocatable variable, a derived-type object with an ultimate component that is allocatable, an automatic object, a variable with the BIND attribute, an unlimited polymorphic pointer, or a coarray. C598 (R569) If a common-block-object is of a derived type, the type shall have the BIND attribute or the SEQUENCE attribute and it shall have no default initialization. C599 (R569) A variable-name or proc-pointer-name shall not be a name made accessible by use association. 5.3.8.2 Explicit-shape array R516 explicit-shape-spec is [ lower-bound : ] upper-bound R517 lower-bound is specification-expr R518 upper-bound is specification-expr C531 (R516) An explicit-shape-spec whose bounds are not constant expressions shall appear only in a subprogram, derived type definition, or interface body. 1 An explicit-shape array is an array whose shape is explicitly declared by an explicit-shape-spec-list. The rank is equal to the number of explicit-shape-specs. 2 An explicit-shape array that is a named local variable of a subprogram or BLOCK construct may have bounds that are not constant expressions. The bounds, and hence shape, are determined at entry to a procedure de ned by the subprogram, or on execution of the BLOCK statement, by evaluating the bounds' expressions. The bounds of such an array are una ected by the rede nition or unde nition of any variable during execution of the procedure or BLOCK construct. 3 The values of each lower-bound and upper-bound determine the bounds of the array along a particular dimension and hence the extent of the array in that dimension. If lower-bound appears it speci es the lower bound; otherwise the lower bound is 1. The value of a lower bound or an upper bound may be positive, negative, or zero. The subscript range of the array in that dimension is the set of integer values between and including the lower and upper bounds, provided the upper bound is not less than the lower bound. If the upper bound is less than the lower bound, the range is empty, the extent in that dimension is zero, and the array is of zero size. 1 1.3.10 automatic data object automatic object nondummy data object with a type parameter or array bound that depends on the value of a speci cation-expr that is not an constant expression I cannot see how real, pointer, dimension(:) :: ro can defines an explicit-shape array or a non-automatic object. So is the use of common in this PR valid or not? Note that if C595 or C597 applies, the burden is probably on the compiler. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41627