fortran: ICE using undeclared symbol in array constructor PR93484
authorMark Eggleston <markeggleston@gcc.gnu.org>
Wed, 25 Mar 2020 08:33:03 +0000 (08:33 +0000)
committerMark Eggleston <markeggleston@gcc.gnu.org>
Wed, 25 Mar 2020 08:34:50 +0000 (08:34 +0000)
commitc38daa7976886a59a3cd496b5c776d75f3cdb056
tree6e2d35208f1e7b5926619c3c086827cabf87cdec
parent5f18995e23edc944af3a401d9d9d3320a9362652
fortran: ICE using undeclared symbol in array constructor PR93484

Using undeclared symbol k in an expression in the following
array constructor results in an ICE:

    print *, [real(x(k))]

If the call to the intrinsic is not in a constructor a no IMPLICIT
type error is reported and the ICE does not occur.

Matching on an expression instead of an initialisation express an
and not converting a MATCH_ERROR return value into MATCH_NO results
in the no IMPLICIT error and no ICE.

Note: Steven G. Kargl  <kargl@gcc.gnu.org> is the author of the
changes except for the test cases.

gcc/fortran/ChangeLog:

PR fortran/93484
* match.c (gfc_match_type_spec): Replace gfc_match_init_expr with
gfc_match_expr. Return m if m is MATCH_NO or MATCH_ERROR.

gcc/testsuite

PR fortran/93484
* gfortran.dg/pr93484_1.f90: New test.
* gfortran.dg/pr93484_2.f90: New test.
gcc/fortran/ChangeLog
gcc/fortran/match.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr93484_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr93484_2.f90 [new file with mode: 0644]