**ping**
previously omitted commit message added
On 29/09/2020 14:03, Mark Eggleston wrote:
For review.
When the first attempt was committed the result was PR97224 i.e. it
broke the build of SPECCPU 2006 Games.
I've changed the condition under which the error is produced. It was
produced in the local symbol was also found as a global symbol and the
the type of the symbol was not GSYM_UNKNOWN and not GSYM_COMMON. This
meant that subroutine names in commons in the SPECCPU source code were
rejected.
The condition no produces an error if the global symbol is either
GSYM_MODULE or GSYM_PROGRAM.
The relevant section in the standard (19.3.1 (2)):
"Within its scope, a local identifier of an entity of class (1) or
class (4) shall not be the same as a global identifier used in that
scope unless the global identifier
* is used only as the use-name of a rename in a USE statement,
* is a common block name (19.3.2),
* is an external procedure name that is also a generic name, or
* is an external function name and the inclusive scope is its defining
subprogram (19.3.3)."
I've added two new test cases for subroutine and function.
I'm not certain about the restriction that the external procedure
should be a generic name. I have found the earlier standards somewhat
confusing on the subject, so I haven't determined whether there should
be any standards dependent code.
[PATCH] Fortran : ICE in build_field PR95614
Local identifiers can not be the same as a module name. Original
patch by Steve Kargl resulted in name clashes between common block
names and local identifiers. A local identifier can be the same as
a global identier if that identifier is not a module or a program.
The original patch was modified to reject global identifiers that
represent a module or a program.
2020-09-29 Steven G. Kargl <ka...@gcc.gnu.org>
Mark Eggleston <markeggles...@gcc.gnu.org>
gcc/fortran/
PR fortran/95614
* decl.c (gfc_get_common): Use gfc_match_common_name instead
of match_common_name.
* decl.c (gfc_bind_idents): Use gfc_match_common_name instead
of match_common_name.
* match.c : Rename match_common_name to gfc_match_common_name.
* match.c (gfc_match_common): Use gfc_match_common_name instead
of match_common_name.
* match.h : Rename match_common_name to gfc_match_common_name.
* resolve.c (resolve_common_vars): Check each symbol in a
common block has a global symbol. If there is a global symbol
issue an error if the symbol type is a module or a program.
2020-09-29 Mark Eggleston <markeggles...@gcc.gnu.org>
gcc/testsuite/
PR fortran/95614
* gfortran.dg/pr95614_1.f90: New test.
* gfortran.dg/pr95614_2.f90: New test.
* gfortran.dg/pr95614_3.f90: New test.
* gfortran.dg/pr95614_4.f90: New test.
--
https://www.codethink.co.uk/privacy.html