Commit e5609c8f by Steven G. Kargl

[multiple changes]

2015-06-03  Russell Whitesides  <russelldub@gmail.com>
	    Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/40958
	PR fortran/60780
	PR fortran/66377
	* module.c (load_equiv): Add check for loading duplicate EQUIVALENCEs
	from different modules.  Eliminate the pruning of unused
	equivalence-objects


2015-06-03  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/66377
	gfortran.dg/equiv_9.f90: New test.

From-SVN: r224159
parent 71226651
2015-06-05 Russell Whitesides <russelldub@gmail.com>
Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/40958
PR fortran/60780
PR fortran/66377
* module.c (load_equiv): Add check for loading duplicate EQUIVALENCEs
from different modules. Eliminate the pruning of unused
equivalence-objects
2015-06-04 Thomas Koenig <tkoenig@netcologne.de>
PR fortran/58749
......
......@@ -4476,8 +4476,8 @@ load_commons (void)
static void
load_equiv (void)
{
gfc_equiv *head, *tail, *end, *eq;
bool unused;
gfc_equiv *head, *tail, *end, *eq, *equiv;
bool duplicate;
mio_lparen ();
in_load_equiv = true;
......@@ -4504,23 +4504,19 @@ load_equiv (void)
mio_expr (&tail->expr);
}
/* Unused equivalence members have a unique name. In addition, it
must be checked that the symbols are from the same module. */
unused = true;
for (eq = head; eq; eq = eq->eq)
/* Check for duplicate equivalences being loaded from different modules */
duplicate = false;
for (equiv = gfc_current_ns->equiv; equiv; equiv = equiv->next)
{
if (eq->expr->symtree->n.sym->module
&& head->expr->symtree->n.sym->module
&& strcmp (head->expr->symtree->n.sym->module,
eq->expr->symtree->n.sym->module) == 0
&& !check_unique_name (eq->expr->symtree->name))
if (equiv->module && head->module
&& strcmp (equiv->module, head->module) == 0)
{
unused = false;
duplicate = true;
break;
}
}
if (unused)
if (duplicate)
{
for (eq = head; eq; eq = head)
{
......
2015-06-05 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/66377
gfortran.dg/equiv_9.f90: New test.
2015-06-05 Tom de Vries <tom@codesourcery.com>
merge from gomp4 branch:
......
! { dg-do run }
! PR fortran/66377
!
module constant
integer x1, x2, x3
integer x(3)
equivalence (x(1),x1), (x2,x(2)), (x3,x(3))
end module
program test
use constant
implicit none
x = (/1, 2, 3/)
call another()
end program
subroutine another()
use constant, only : x2
implicit none
if (x2 /= 2) call abort
end subroutine
! { dg-final { cleanup-modules "constant" } }
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