From 28a595fc801358850b92344878d1fe6055b59693 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Wed, 22 May 2013 14:43:55 +0200 Subject: [PATCH] re PR fortran/57364 ([OOP] ICE gfc_enforce_clean_symbol_state) 2013-05-22 Tobias Burnus PR fortran/57364 * resolve.c (get_temp_from_expr): Commit created sym. 2013-05-22 Tobias Burnus PR fortran/57364 * gfortran.dg/defined_assignment_6.f90: New. From-SVN: r199196 --- gcc/fortran/ChangeLog | 5 +++ gcc/fortran/resolve.c | 1 + gcc/testsuite/ChangeLog | 5 +++ .../gfortran.dg/defined_assignment_6.f90 | 36 +++++++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/defined_assignment_6.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6fb27dc04955..306474981b38 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2013-05-22 Tobias Burnus + + PR fortran/57364 + * resolve.c (get_temp_from_expr): Commit created sym. + 2013-05-22 Tobias Burnus PR fortran/57338 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 74e0aa4b4322..6f32df85a853 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9300,6 +9300,7 @@ get_temp_from_expr (gfc_expr *e, gfc_namespace *ns) gfc_set_sym_referenced (tmp->n.sym); gfc_add_flavor (&tmp->n.sym->attr, FL_VARIABLE, name, NULL); + gfc_commit_symbol (tmp->n.sym); e = gfc_lval_expr_from_sym (tmp->n.sym); /* Should the lhs be a section, use its array ref for the diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dcf16a422580..6067bc05cf29 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-05-22 Tobias Burnus + + PR fortran/57364 + * gfortran.dg/defined_assignment_6.f90: New. + 2013-05-22 Tobias Burnus PR fortran/57338 diff --git a/gcc/testsuite/gfortran.dg/defined_assignment_6.f90 b/gcc/testsuite/gfortran.dg/defined_assignment_6.f90 new file mode 100644 index 000000000000..a5666fe5109f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/defined_assignment_6.f90 @@ -0,0 +1,36 @@ +! { dg-do compile } +! +! PR fortran/57364 +! +! Contributed by Damian Rouson +! +module ref_counter_implementation + type ref_counter + contains + procedure :: assign + generic :: assignment(=) => assign + end type +contains + subroutine assign (lhs, rhs) + class (ref_counter), intent(inout) :: lhs + class (ref_counter), intent(in) :: rhs + end subroutine +end module +module foo_parent_implementation + use ref_counter_implementation ,only: ref_counter + type :: foo_parent + type(ref_counter) :: counter + end type +contains + type(foo_parent) function new_foo_parent() + end function +end module +module foo_implementation + use foo_parent_implementation ,only: foo_parent,new_foo_parent + type, extends(foo_parent) :: foo + end type +contains + type(foo) function new_foo() + new_foo%foo_parent = new_foo_parent() + end function +end module -- 2.47.2