aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2009-04-28 11:44:36 +0200
committerJanus Weil <janus@gcc.gnu.org>2009-04-28 11:44:36 +0200
commit6596e2fe5a8a24d62431577ef3c9c8e67682f9a3 (patch)
tree0e226dd19b9aac453a4b0f078d25ecebc8d096e2
parenta6524a7cb87acd44fe46ad544292708f2d85be52 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/fortran/expr.c4
-rw-r--r--gcc/fortran/parse.c2
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/ambiguous_reference_2.f9033
-rw-r--r--gcc/testsuite/gfortran.dg/pointer_assign_7.f9024
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
+