From: janus Date: Wed, 22 Aug 2018 19:31:40 +0000 (+0000) Subject: fix PR 86935 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3dd725506a681383fded7a3e0f12d6b29e275b9;p=thirdparty%2Fgcc.git fix PR 86935 2018-08-22 Janus Weil PR fortran/86935 * match.c (gfc_match_associate): Improve diagnostics for the ASSOCIATE statement. 2018-08-22 Janus Weil PR fortran/86935 * gfortran.dg/associate_3.f90: Update error message. * gfortran.dg/associate_39.f90: New test case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@263787 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 88edff3eed6e..6bbf99c0e058 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2018-08-22 Janus Weil + + PR fortran/86935 + * match.c (gfc_match_associate): Improve diagnostics for the ASSOCIATE + statement. + 2018-08-22 Andrew Benson * module.c (load_generic_interfaces): Move call to find_symbol() diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 1ab0e0fad9a6..85247dd8334e 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -1889,17 +1889,21 @@ gfc_match_associate (void) gfc_association_list* a; /* Match the next association. */ - if (gfc_match (" %n => %e", newAssoc->name, &newAssoc->target) - != MATCH_YES) + if (gfc_match (" %n =>", newAssoc->name) != MATCH_YES) + { + gfc_error ("Expected association at %C"); + goto assocListError; + } + + if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) { /* Have another go, allowing for procedure pointer selectors. */ gfc_matching_procptr_assignment = 1; - if (gfc_match (" %n => %e", newAssoc->name, &newAssoc->target) - != MATCH_YES) - { - gfc_error ("Expected association at %C"); - goto assocListError; - } + if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) + { + gfc_error ("Invalid association target at %C"); + goto assocListError; + } gfc_matching_procptr_assignment = 0; } newAssoc->where = gfc_current_locus; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 59a9038dd043..8e70d0564ec1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-08-22 Janus Weil + + PR fortran/86935 + * gfortran.dg/associate_3.f90: Update error message. + * gfortran.dg/associate_39.f90: New test case. + 2018-08-22 Janus Weil PR fortran/86888 diff --git a/gcc/testsuite/gfortran.dg/associate_3.f03 b/gcc/testsuite/gfortran.dg/associate_3.f03 index 20a375dcfd1c..da7bec951d14 100644 --- a/gcc/testsuite/gfortran.dg/associate_3.f03 +++ b/gcc/testsuite/gfortran.dg/associate_3.f03 @@ -13,7 +13,7 @@ PROGRAM main ASSOCIATE (a => 1) 5 ! { dg-error "Junk after ASSOCIATE" } - ASSOCIATE (x =>) ! { dg-error "Expected association" } + ASSOCIATE (x =>) ! { dg-error "Invalid association target" } ASSOCIATE (=> 5) ! { dg-error "Expected association" } diff --git a/gcc/testsuite/gfortran.dg/associate_39.f90 b/gcc/testsuite/gfortran.dg/associate_39.f90 new file mode 100644 index 000000000000..16357c32777a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_39.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! +! PR 86935: Bad locus in ASSOCIATE statement +! +! Contributed by Janus Weil + +implicit none + +type :: t + real :: r = 0.5 + integer :: i = 3 +end type + +type(t) :: x + +associate (r => x%r, & + i => x%ii) ! { dg-error "Invalid association target" } + +end