+2019-06-27 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/90987
+ * gfortran.dg/common_1.f: new test.
+ * gfortran.dg/common_26.f90: Ditto.
+
2019-06-26 Steven G. Kargl <kargl@gcc.gnu.org>
PR Fortran/90988
- ChangeLog forgotten with revision 272698
+ ChangeLog forgotten with revision 272667
* decl.c (access_attr_decl): Use temporary variable to reduce
unreadability of code. Normalize jumping to return.
(gfc_match_protected): Fix parsing error. Add comments to
gfc_array_spec *as;
gfc_equiv *e1, *e2;
match m;
+ char c;
+
+ /* COMMON has been matched. In free form source code, the next character
+ needs to be whitespace or '/'. Check that here. Fixed form source
+ code needs to be checked below. */
+ c = gfc_peek_ascii_char ();
+ if (gfc_current_form == FORM_FREE && !gfc_is_whitespace (c) && c != '/')
+ return MATCH_NO;
as = NULL;
gfc_gobble_whitespace ();
if (gfc_match_eos () == MATCH_YES)
goto done;
- if (gfc_peek_ascii_char () == '/')
+ c = gfc_peek_ascii_char ();
+ if (c == '/')
break;
- if (gfc_match_char (',') != MATCH_YES)
- goto syntax;
+ if (c != ',')
+ {
+ /* In Fixed form source code, gfortran can end up here for an
+ expression of the form COMMONI = RHS. This may not be an
+ error, so return MATCH_NO. */
+ if (gfc_current_form == FORM_FIXED && c == '=')
+ {
+ gfc_free_array_spec (as);
+ return MATCH_NO;
+ }
+ goto syntax;
+ }
+ else
+ gfc_match_char (',');
+
gfc_gobble_whitespace ();
if (gfc_peek_ascii_char () == '/')
break;
+2019-06-27 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/90987
+ * match.c (gfc_match_common): Adjust parsing of fixed and free form
+ source code containing, e.g., COMMONI.
+
2019-06-27 Jan Hubicka <jh@suse.cz>
* g++.dg/lto/alias-2_0.C: New testcase.
2019-06-26 Steven G. Kargl <kargl@gcc.gnu.org>
PR Fortran/90988
- ChangeLog forgotten with revision 272698
+ ChangeLog forgotten with revision 272667
* gfortran.dg/pr90988_1.f90: New test.
* gfortran.dg/pr90988_2.f90: Ditto.
* gfortran.dg/pr90988_3.f90: Ditto.
--- /dev/null
+! { dg-do compile }
+ module mymod
+ type :: mytyp
+ integer :: i
+ end type mytyp
+ contains
+ subroutine mysub
+ implicit none
+ type(mytyp) :: a
+ integer :: commoni,commonj
+ commoni = a%i
+ commonj = a%j ! { dg-error "is not a member of" }
+ end subroutine mysub
+ end module mymod
--- /dev/null
+! { dg-do compile }
+module mymod
+ type :: mytyp
+ integer :: i
+ end type mytyp
+contains
+ subroutine mysub
+ implicit none
+ type(mytyp) :: a
+ integer :: commoni,commonj
+ commoni = a%i
+ commonj = a%j ! { dg-error "is not a member of" }
+ end subroutine mysub
+end module mymod