Commit c2fe6593 by Steven G. Kargl

re PR fortran/90987 (Wrong error message with variables named "COMMON*")

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  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/90987
	* gfortran.dg/common_1.f: new test.
	* gfortran.dg/common_26.f90: Ditto.

From-SVN: r272756
parent 76715c32
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
......
......@@ -5115,6 +5115,14 @@ gfc_match_common (void)
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;
......@@ -5279,10 +5287,24 @@ gfc_match_common (void)
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)
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.
......@@ -63,7 +69,7 @@
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.
......
! { 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
! { 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment