aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-05-22 14:43:55 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2013-05-22 14:43:55 +0200
commit28a595fc801358850b92344878d1fe6055b59693 (patch)
tree4336e1f7d9236e6836fecbecae2c28c0110f0b2f
parent1e1ba2d795b72be88b7be1cbe0960973f6d10e99 (diff)
downloadgcc-28a595fc801358850b92344878d1fe6055b59693.zip
gcc-28a595fc801358850b92344878d1fe6055b59693.tar.gz
gcc-28a595fc801358850b92344878d1fe6055b59693.tar.bz2
re PR fortran/57364 ([OOP] ICE gfc_enforce_clean_symbol_state)
2013-05-22 Tobias Burnus <burnus@net-b.de> PR fortran/57364 * resolve.c (get_temp_from_expr): Commit created sym. 2013-05-22 Tobias Burnus <burnus@net-b.de> PR fortran/57364 * gfortran.dg/defined_assignment_6.f90: New. From-SVN: r199196
-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/defined_assignment_6.f9036
4 files changed, 47 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6fb27dc..3064749 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,10 @@
2013-05-22 Tobias Burnus <burnus@net-b.de>
+ PR fortran/57364
+ * resolve.c (get_temp_from_expr): Commit created sym.
+
+2013-05-22 Tobias Burnus <burnus@net-b.de>
+
PR fortran/57338
* intrinsic.c (do_check): Move some checks to ...
(do_ts29113_check): ... this new function.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 74e0aa4..6f32df8 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 dcf16a4..6067bc0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2013-05-22 Tobias Burnus <burnus@net-b.de>
+ PR fortran/57364
+ * gfortran.dg/defined_assignment_6.f90: New.
+
+2013-05-22 Tobias Burnus <burnus@net-b.de>
+
PR fortran/57338
* gfortran.dg/assumed_type_6.f90: New.
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 0000000..a5666fe
--- /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