aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/resolve.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_assignment_2.f0339
4 files changed, 49 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 14ae30f..6475d5e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,10 @@
2011-02-09 Janus Weil <janus@gcc.gnu.org>
+ PR fortran/47463
+ * resolve.c (resolve_typebound_subroutine): Remove erroneous line.
+
+2011-02-09 Janus Weil <janus@gcc.gnu.org>
+
PR fortran/47637
* trans-decl.c (init_intent_out_dt): Handle CLASS arguments.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 7f3734e..688967a 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -5894,7 +5894,6 @@ resolve_typebound_subroutine (gfc_code *code)
name = name ? name : code->expr1->value.function.esym->name;
code->expr1->symtree = expr->symtree;
code->expr1->ref = gfc_copy_ref (expr->ref);
- expr->symtree->n.sym->ts.u.derived = declared;
gfc_add_vptr_component (code->expr1);
gfc_add_component_ref (code->expr1, name);
code->expr1->value.function.esym = NULL;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8f26a77..9725a49 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-02-09 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/47463
+ * gfortran.dg/typebound_assignment_2.f03: New.
+
2011-02-09 Richard Guenther <rguenther@suse.de>
PR tree-optimization/47664
diff --git a/gcc/testsuite/gfortran.dg/typebound_assignment_2.f03 b/gcc/testsuite/gfortran.dg/typebound_assignment_2.f03
new file mode 100644
index 0000000..862535a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_assignment_2.f03
@@ -0,0 +1,39 @@
+! { dg-do compile }
+!
+! PR 47463: [OOP] ICE in gfc_add_component_ref
+!
+! Contributed by Rich Townsend <townsend@astro.wisc.edu>
+
+module hydro_grid
+ type :: grid_t
+ contains
+ procedure :: assign
+ generic :: assignment(=) => assign
+ end type grid_t
+ public :: grid_t
+contains
+ subroutine assign (this, that)
+ class(grid_t), intent(inout) :: this
+ class(grid_t), intent(in) :: that
+ end subroutine assign
+end module hydro_grid
+
+module hydro_flow
+ use hydro_grid
+ type :: flow_t
+ class(grid_t), allocatable :: gr
+ end type flow_t
+contains
+ subroutine init_params (this)
+ class(flow_t), intent(out) :: this
+ type(grid_t) :: gr
+ call init_comps(this, gr)
+ end subroutine init_params
+ subroutine init_comps (this, gr)
+ class(flow_t), intent(out) :: this
+ class(grid_t), intent(in) :: gr
+ this%gr = gr
+ end subroutine init_comps
+end module hydro_flow
+
+! { dg-final { cleanup-modules "hydro_grid hydro_flow" } }