diff options
author | Janus Weil <janus@gcc.gnu.org> | 2009-04-28 11:44:36 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2009-04-28 11:44:36 +0200 |
commit | 6596e2fe5a8a24d62431577ef3c9c8e67682f9a3 (patch) | |
tree | 0e226dd19b9aac453a4b0f078d25ecebc8d096e2 | |
parent | a6524a7cb87acd44fe46ad544292708f2d85be52 (diff) | |
download | gcc-6596e2fe5a8a24d62431577ef3c9c8e67682f9a3.zip gcc-6596e2fe5a8a24d62431577ef3c9c8e67682f9a3.tar.gz gcc-6596e2fe5a8a24d62431577ef3c9c8e67682f9a3.tar.bz2 |
re PR fortran/39930 (Bogus error: ambiguous reference)
2009-04-28 Janus Weil <janus@gcc.gnu.org>
PR fortran/39930
PR fortran/39931
* expr.c (gfc_check_pointer_assign): Correctly detect if the left hand
side is a pointer.
* parse.c (gfc_fixup_sibling_symbols): Don't check for ambiguity.
2009-04-28 Janus Weil <janus@gcc.gnu.org>
PR fortran/39930
PR fortran/39931
* gfortran.dg/ambiguous_reference_2.f90: New.
* gfortran.dg/pointer_assign_7.f90: New.
From-SVN: r146880
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/expr.c | 4 | ||||
-rw-r--r-- | gcc/fortran/parse.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/ambiguous_reference_2.f90 | 33 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pointer_assign_7.f90 | 24 |
6 files changed, 75 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2ca0271..6db3325 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2009-04-28 Janus Weil <janus@gcc.gnu.org> + + PR fortran/39930 + PR fortran/39931 + * expr.c (gfc_check_pointer_assign): Correctly detect if the left hand + side is a pointer. + * parse.c (gfc_fixup_sibling_symbols): Don't check for ambiguity. + 2009-04-28 Paul Thomas <pault@gcc.gnu.org> PR fortran/39879 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index c70d4d1..e76197e 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -3070,8 +3070,8 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue) if (pointer) check_intent_in = 0; - if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer) - pointer = 1; + if (ref->type == REF_COMPONENT) + pointer = ref->u.c.component->attr.pointer; if (ref->type == REF_ARRAY && ref->next == NULL) { diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 81e4591..c67e994 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -3310,7 +3310,7 @@ gfc_fixup_sibling_symbols (gfc_symbol *sym, gfc_namespace *siblings) sym->attr.referenced = 1; for (ns = siblings; ns; ns = ns->sibling) { - gfc_find_sym_tree (sym->name, ns, 0, &st); + st = gfc_find_symtree (ns->sym_root, sym->name); if (!st || (st->n.sym->attr.dummy && ns == st->n.sym->ns)) goto fixup_contained; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9a8083b..5415592 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2009-04-28 Janus Weil <janus@gcc.gnu.org> + + PR fortran/39930 + PR fortran/39931 + * gfortran.dg/ambiguous_reference_2.f90: New. + * gfortran.dg/pointer_assign_7.f90: New. + 2009-04-28 Nathan Froyd <froydnj@codesourcery.com> Mark Mitchell <mark@codesourcery.com> diff --git a/gcc/testsuite/gfortran.dg/ambiguous_reference_2.f90 b/gcc/testsuite/gfortran.dg/ambiguous_reference_2.f90 new file mode 100644 index 0000000..3ffaa14 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ambiguous_reference_2.f90 @@ -0,0 +1,33 @@ +! { dg-do compile } +! +! PR 39930: Bogus error: ambiguous reference +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +module a1 +contains + subroutine myRoutine + end subroutine +end module + +module a2 +contains + subroutine myRoutine + end subroutine +end module + +module b +contains + + subroutine otherRoutine + use a1 + use a2 + end subroutine + + subroutine myRoutine + end subroutine myRoutine ! this is not ambiguous ! + +end module + +! { dg-final { cleanup-modules "a1 a2 b" } } + diff --git a/gcc/testsuite/gfortran.dg/pointer_assign_7.f90 b/gcc/testsuite/gfortran.dg/pointer_assign_7.f90 new file mode 100644 index 0000000..5ec32e8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pointer_assign_7.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! +! PR 39931: ICE on invalid Fortran 95 code (bad pointer assignment) +! +! Contributed by Thomas Orgis <thomas.orgis@awi.de> + +program point_of_no_return + +implicit none + +type face_t + integer :: bla +end type + +integer, pointer :: blu +type(face_t), pointer :: face + +allocate(face) +allocate(blu) + +face%bla => blu ! { dg-error "Pointer assignment to non-POINTER" } + +end program + |