[Bug fortran/99765] Explicit dimension size declaration of pointer array allowed
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99765 Tobias Burnus changed: What|Removed |Added Resolution|--- |INVALID Status|NEW |RESOLVED --- Comment #5 from Tobias Burnus --- (In reply to Nick from comment #4) > I see. I can't seem to find the mentioned line in f2003. Should be there as well. In Fortran 2008, it is in "5.2 Type declaration statements", p.88, lines 1-4 (same/similar to F2018). In Fortran 2003, it is in "5.1.2.5 DIMENSION attribute", p. 78, ll. 3-5: "The DIMENSION attribute specifies that an entity is an array. The rank or rank and shape is specified by the array-spec, if there is one, in the entity-decl, or by the array-spec in the DIMENSION attr-spec otherwise." That choice makese sense, e.g. for: complex(kind=my_cmplx_kind), intent(in), asynchronous, dimension(n,n) :: A, B, C, D, v(n) such that one does not need to repeat all the lengthy stuff just to denote the different array spec for 'v'. (On the other hand, whether there is a need to specify everything in several different ways and permit overriding in addition is another question.) Thus, the standard made a sensible choice – and the standard is the standard :-) > In any case, I would be fine if this is marked as invalid Done so: CLOSE as INVALID. > Sorry for the blurp. Better some noise than missing some real bugs or useful improvements. Hence: Thanks!
[Bug fortran/99765] Explicit dimension size declaration of pointer array allowed
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99765 --- Comment #4 from Nick --- I see. I can't seem to find the mentioned line in f2003. I don't know if anything needs to be done. If the programmer expected something different than the last dimension specifier, they would very quickly figure out that it doesn't work as intended. In any case, I would be fine if this is marked as invalid and you left it as it is since f2008 denotes this as valid code. By the way real, dimension(10), allocatable :: a(10) is currently still recognized as an error (as I also mentioned). So basically everything is fine. Sorry for the blurp.
[Bug fortran/99765] Explicit dimension size declaration of pointer array allowed
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99765 Tobias Burnus changed: What|Removed |Added CC||burnus at gcc dot gnu.org --- Comment #3 from Tobias Burnus --- (In reply to Dominique d'Humieres from comment #1) > so I think > real, dimension(10), pointer :: a(:) => null() > and > real, dimension(10), allocatable :: a(10) > are invalid and shall give an error. I concur with the second example (violating the cited constraint), but the first one looks valid to me. In particular: F2018 has in 8.2 [92:1-3]): "The type declaration statement also specifies the attributes whose keywords appear in the attr-spec, except that the DIMENSION attribute can be specified or overridden for an entity by the appearance of array-spec in its entity-decl," Thus, unless I missed some example, this PR looks invalid to me.
[Bug fortran/99765] Explicit dimension size declaration of pointer array allowed
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99765 --- Comment #2 from Nick --- Thanks for finding that in the standard!
[Bug fortran/99765] Explicit dimension size declaration of pointer array allowed
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99765 Dominique d'Humieres changed: What|Removed |Added Last reconfirmed||2021-03-25 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #1 from Dominique d'Humieres --- The standard says: C832 An array with the POINTER or ALLOCATABLE attribute shall have an array-spec that is a deferred-shape-spec-list. so I think real, dimension(10), pointer :: a(:) => null() and real, dimension(10), allocatable :: a(10) are invalid and shall give an error. Note that a(1:2)(1:10) looks like C syntax, a rank 2 array is a(1:2,1:10). The only case for valid fortran is for a being of type CHARACTER, a(1;2) being a slice and (1:10) a substring.