mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 21:41:14 +08:00
re PR fortran/34910 (ICE on invalid assignments in doubly-contained functions)
2008-01-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/34910 * expr.c (gfc_check_assign): It is an error to assign to a sibling procedure. 2008-01-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/34910 * gfortran.dg/proc_assign_2.f90: New test. From-SVN: r131985
This commit is contained in:
parent
0451301c59
commit
db39d0c23d
@ -1,3 +1,9 @@
|
||||
2008-01-31 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/34910
|
||||
* expr.c (gfc_check_assign): It is an error to assign
|
||||
to a sibling procedure.
|
||||
|
||||
2008-01-30 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/34975
|
||||
|
@ -2705,6 +2705,15 @@ gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform)
|
||||
bad_proc = true;
|
||||
}
|
||||
|
||||
/* (iv) Host associated and not the function symbol or the
|
||||
parent result. This picks up sibling references, which
|
||||
cannot be entries. */
|
||||
if (!sym->attr.entry
|
||||
&& sym->ns == gfc_current_ns->parent
|
||||
&& sym != gfc_current_ns->proc_name
|
||||
&& sym != gfc_current_ns->parent->proc_name->result)
|
||||
bad_proc = true;
|
||||
|
||||
if (bad_proc)
|
||||
{
|
||||
gfc_error ("'%s' at %L is not a VALUE", sym->name, &lvalue->where);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-01-31 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/34910
|
||||
* gfortran.dg/proc_assign_2.f90: New test.
|
||||
|
||||
2008-01-31 Douglas Gregor <doug.gregor@gmail.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
|
21
gcc/testsuite/gfortran.dg/proc_assign_2.f90
Normal file
21
gcc/testsuite/gfortran.dg/proc_assign_2.f90
Normal file
@ -0,0 +1,21 @@
|
||||
! { dg-do compile }
|
||||
! This checks the fix for PR34910, in which the invalid reference
|
||||
! below caused an ICE.
|
||||
!
|
||||
! Contributed by Daniel Franke <dfranke@gcc.gnu.org>
|
||||
!
|
||||
MODULE foo
|
||||
CONTAINS
|
||||
INTEGER FUNCTION f()
|
||||
f = 42
|
||||
CONTAINS
|
||||
LOGICAL FUNCTION f1()
|
||||
f1 = .TRUE.
|
||||
END FUNCTION
|
||||
|
||||
LOGICAL FUNCTION f2()
|
||||
f1 = .FALSE. ! { dg-error "not a VALUE" }
|
||||
END FUNCTION
|
||||
END FUNCTION
|
||||
END MODULE
|
||||
! { dg-final { cleanup-modules "foo" } }
|
Loading…
x
Reference in New Issue
Block a user