aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/resolve.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/der_pointer_3.f9018
4 files changed, 31 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 5663b31..f12abc2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2005-10-07 Erik Edelmann <erik.edelmann@iki.fi>
+
+ PR 18568
+ * resolve.c (find_array_spec): Search through the list of
+ components in the symbol of the type instead of the symbol of the
+ variable.
+
2005-10-05 Richard Guenther <rguenther@suse.de>
PR fortran/24176
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 192a18c3..f057340 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -1912,7 +1912,6 @@ find_array_spec (gfc_expr * e)
gfc_ref *ref;
as = e->symtree->n.sym->as;
- c = e->symtree->n.sym->components;
for (ref = e->ref; ref; ref = ref->next)
switch (ref->type)
@@ -1926,7 +1925,7 @@ find_array_spec (gfc_expr * e)
break;
case REF_COMPONENT:
- for (; c; c = c->next)
+ for (c = e->symtree->n.sym->ts.derived->components; c; c = c->next)
if (c == ref->u.c.component)
break;
@@ -1940,7 +1939,6 @@ find_array_spec (gfc_expr * e)
as = c->as;
}
- c = c->ts.derived->components;
break;
case REF_SUBSTRING:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index be22aa9..71b4ecb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-10-07 Erik Edelmann <erik.edelmann@iki.fi>
+
+ PR 18568
+ * gfortran.dg/der_pointer_3.f90: New test.
+
2005-10-05 Devang Patel <dpatel@apple.com>
PR Debug/23205
diff --git a/gcc/testsuite/gfortran.dg/der_pointer_3.f90 b/gcc/testsuite/gfortran.dg/der_pointer_3.f90
new file mode 100644
index 0000000..ed56ffc
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/der_pointer_3.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! PR 18568
+! Find pointer-to-array components
+module ints
+ type :: bar
+ integer, pointer :: th(:)
+ end type bar
+contains
+ function foo(b)
+ type(bar), intent(in) :: b
+ integer :: foo(size(b%th))
+ foo = 0
+ end function foo
+end module ints
+
+program size_test
+ use ints
+end program size_test