diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-05-22 14:43:55 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-05-22 14:43:55 +0200 |
commit | 28a595fc801358850b92344878d1fe6055b59693 (patch) | |
tree | 4336e1f7d9236e6836fecbecae2c28c0110f0b2f | |
parent | 1e1ba2d795b72be88b7be1cbe0960973f6d10e99 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/defined_assignment_6.f90 | 36 |
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 |