mirror of git://gcc.gnu.org/git/gcc.git
[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
This commit is contained in:
parent
712266515f
commit
e5609c8fee
|
|
@ -1,3 +1,13 @@
|
||||||
|
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>
|
2015-06-04 Thomas Koenig <tkoenig@netcologne.de>
|
||||||
|
|
||||||
PR fortran/58749
|
PR fortran/58749
|
||||||
|
|
|
||||||
|
|
@ -4476,8 +4476,8 @@ load_commons (void)
|
||||||
static void
|
static void
|
||||||
load_equiv (void)
|
load_equiv (void)
|
||||||
{
|
{
|
||||||
gfc_equiv *head, *tail, *end, *eq;
|
gfc_equiv *head, *tail, *end, *eq, *equiv;
|
||||||
bool unused;
|
bool duplicate;
|
||||||
|
|
||||||
mio_lparen ();
|
mio_lparen ();
|
||||||
in_load_equiv = true;
|
in_load_equiv = true;
|
||||||
|
|
@ -4504,23 +4504,19 @@ load_equiv (void)
|
||||||
mio_expr (&tail->expr);
|
mio_expr (&tail->expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unused equivalence members have a unique name. In addition, it
|
/* Check for duplicate equivalences being loaded from different modules */
|
||||||
must be checked that the symbols are from the same module. */
|
duplicate = false;
|
||||||
unused = true;
|
for (equiv = gfc_current_ns->equiv; equiv; equiv = equiv->next)
|
||||||
for (eq = head; eq; eq = eq->eq)
|
|
||||||
{
|
{
|
||||||
if (eq->expr->symtree->n.sym->module
|
if (equiv->module && head->module
|
||||||
&& head->expr->symtree->n.sym->module
|
&& strcmp (equiv->module, head->module) == 0)
|
||||||
&& strcmp (head->expr->symtree->n.sym->module,
|
|
||||||
eq->expr->symtree->n.sym->module) == 0
|
|
||||||
&& !check_unique_name (eq->expr->symtree->name))
|
|
||||||
{
|
{
|
||||||
unused = false;
|
duplicate = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unused)
|
if (duplicate)
|
||||||
{
|
{
|
||||||
for (eq = head; eq; eq = head)
|
for (eq = head; eq; eq = head)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
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>
|
2015-06-05 Tom de Vries <tom@codesourcery.com>
|
||||||
|
|
||||||
merge from gomp4 branch:
|
merge from gomp4 branch:
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
! { 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" } }
|
||||||
Loading…
Reference in New Issue