]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/57364 ([OOP] ICE gfc_enforce_clean_symbol_state)
authorTobias Burnus <burnus@net-b.de>
Wed, 22 May 2013 12:43:55 +0000 (14:43 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Wed, 22 May 2013 12:43:55 +0000 (14:43 +0200)
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

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/defined_assignment_6.f90 [new file with mode: 0644]

index 6fb27dc049557c95d0493a17a613cb80cf13f6a6..306474981b3881c67804b42b91bdd9c61f866bcf 100644 (file)
@@ -1,3 +1,8 @@
+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
index 74e0aa4b43220280df331c9342130fd276822920..6f32df85a85392197e74a8c0e9d307e0e9754735 100644 (file)
@@ -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
index dcf16a42258047101451487602d35a8d27f3ec28..6067bc05cf294da61b5548109ff22c4e0af86491 100644 (file)
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/testsuite/gfortran.dg/defined_assignment_6.f90 b/gcc/testsuite/gfortran.dg/defined_assignment_6.f90
new file mode 100644 (file)
index 0000000..a5666fe
--- /dev/null
@@ -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