[Bug fortran/99765] Explicit dimension size declaration of pointer array allowed

2021-03-26 Thread burnus at gcc dot gnu.org via Gcc-bugs
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

2021-03-25 Thread nickpapior at gmail dot com via Gcc-bugs
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

2021-03-25 Thread burnus at gcc dot gnu.org via Gcc-bugs
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

2021-03-25 Thread nickpapior at gmail dot com via Gcc-bugs
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

2021-03-25 Thread dominiq at lps dot ens.fr via Gcc-bugs
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.