aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2010-05-17 21:58:48 +0200
committerJanus Weil <janus@gcc.gnu.org>2010-05-17 21:58:48 +0200
commit94ea69392c7feedc84b0ab3f7674c9470ed252b3 (patch)
tree861b5636dbcdea30562028ee4b2f0353db4601cf /gcc
parentf18ea1bfdbb4f130ed5ba2a7df5b42c9b101001c (diff)
downloadgcc-94ea69392c7feedc84b0ab3f7674c9470ed252b3.zip
gcc-94ea69392c7feedc84b0ab3f7674c9470ed252b3.tar.gz
gcc-94ea69392c7feedc84b0ab3f7674c9470ed252b3.tar.bz2
re PR fortran/43990 ([OOP] ICE in output_constructor_regular_field, at varasm.c:4995)
2010-05-17 Janus Weil <janus@gcc.gnu.org> PR fortran/43990 * trans-expr.c (gfc_conv_structure): Remove unneeded and buggy code. This is now handled via 'gfc_class_null_initializer'. 2010-05-17 Janus Weil <janus@gcc.gnu.org> PR fortran/43990 * gfortran.dg/class_21.f03: New. From-SVN: r159511
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c15
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/class_21.f0318
4 files changed, 30 insertions, 14 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 45fe11a..a6d2925 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2010-05-17 Janus Weil <janus@gcc.gnu.org>
+ PR fortran/43990
+ * trans-expr.c (gfc_conv_structure): Remove unneeded and buggy code.
+ This is now handled via 'gfc_class_null_initializer'.
+
+2010-05-17 Janus Weil <janus@gcc.gnu.org>
+
* class.c (gfc_add_component_ref,gfc_class_null_initializer,
gfc_build_class_symbol,add_proc_component,add_proc_comps,
add_procs_to_declared_vtab1,copy_vtab_proc_comps,
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 4d48c05..b7a296d 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -4337,20 +4337,7 @@ gfc_conv_structure (gfc_se * se, gfc_expr * expr, int init)
if (!c->expr || cm->attr.allocatable)
continue;
- if (cm->ts.type == BT_CLASS && !cm->attr.proc_pointer)
- {
- gfc_component *data;
- data = gfc_find_component (cm->ts.u.derived, "$data", true, true);
- if (!data->backend_decl)
- gfc_get_derived_type (cm->ts.u.derived);
- val = gfc_conv_initializer (c->expr, &cm->ts,
- TREE_TYPE (data->backend_decl),
- data->attr.dimension,
- data->attr.pointer);
-
- CONSTRUCTOR_APPEND_ELT (v, data->backend_decl, val);
- }
- else if (strcmp (cm->name, "$size") == 0)
+ if (strcmp (cm->name, "$size") == 0)
{
val = TYPE_SIZE_UNIT (gfc_get_derived_type (cm->ts.u.derived));
CONSTRUCTOR_APPEND_ELT (v, cm->backend_decl, val);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dfd3823..683050b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-05-17 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/43990
+ * gfortran.dg/class_21.f03: New.
+
2010-05-17 Jason Merrill <jason@redhat.com>
PR c++/44157
diff --git a/gcc/testsuite/gfortran.dg/class_21.f03 b/gcc/testsuite/gfortran.dg/class_21.f03
new file mode 100644
index 0000000..93b9616
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_21.f03
@@ -0,0 +1,18 @@
+! { dg-do compile }
+!
+! PR 43990: [OOP] ICE in output_constructor_regular_field, at varasm.c:4995
+!
+! Reported by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de>
+
+module m
+
+ type :: t
+ logical :: l = .true.
+ class(t),pointer :: cp => null()
+ end type
+
+ type(t),save :: default_t
+
+end module
+
+! { dg-final { cleanup-modules "m" } }