Message ID | 20190802235129.GA24708@troutmask.apl.washington.edu |
---|---|
State | New |
Headers | show |
Series | [Committed] PR fortran/90985 -- DATA must be followed by whitespace | expand |
On Fri, Aug 2, 2019 at 4:51 PM Steve Kargl <sgk@troutmask.apl.washington.edu> wrote: > > In free-form source code, DATA must be followed by whitespace. > This patch checks for whitespace, and if none is found, returns > MATCH_NO to give other matchers a chance to run. > > 2019-08-02 Steven G. Kargl <kargl@gcc.gnu.org> > > PR fortran/90985 > * decl.c (gfc_match_data): In free-form code, DATA be followed by > whitespace. > > 2019-08-02 Steven G. Kargl <kargl@gcc.gnu.org> > > PR fortran/90985 > * gfortran.dg/pr90985.f90: New test. > This may have caused: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91372
On Mon, Aug 05, 2019 at 12:01:36PM -0700, H.J. Lu wrote: > On Fri, Aug 2, 2019 at 4:51 PM Steve Kargl > <sgk@troutmask.apl.washington.edu> wrote: > > > > In free-form source code, DATA must be followed by whitespace. > > This patch checks for whitespace, and if none is found, returns > > MATCH_NO to give other matchers a chance to run. > > > > 2019-08-02 Steven G. Kargl <kargl@gcc.gnu.org> > > > > PR fortran/90985 > > * decl.c (gfc_match_data): In free-form code, DATA be followed by > > whitespace. > > > > 2019-08-02 Steven G. Kargl <kargl@gcc.gnu.org> > > > > PR fortran/90985 > > * gfortran.dg/pr90985.f90: New test. > > > > This may have caused: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91372 > Yep.
Index: gcc/fortran/decl.c =================================================================== --- gcc/fortran/decl.c (revision 274031) +++ gcc/fortran/decl.c (working copy) @@ -621,6 +621,13 @@ gfc_match_data (void) gfc_expr *e; gfc_ref *ref; match m; + char c; + + /* DATA has been matched. In free form source code, the next character + needs to be whitespace. Check that here. */ + c = gfc_peek_ascii_char (); + if (gfc_current_form == FORM_FREE && !gfc_is_whitespace (c)) + return MATCH_NO; /* Before parsing the rest of a DATA statement, check F2008:c1206. */ if ((gfc_current_state () == COMP_FUNCTION Index: gcc/testsuite/gfortran.dg/pr90985.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr90985.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr90985.f90 (working copy) @@ -0,0 +1,14 @@ +! { dg-do compile } +module mymod + type :: mytyp + integer :: i + end type mytyp +contains + subroutine mysub + implicit none + type(mytyp) :: a + integer :: datai,dataj + datai = a%i + dataj = a%j ! { dg-error "is not a member of the" } + end subroutine mysub +end module mymod