aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/data.c15
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/data_4.f906
4 files changed, 25 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c8e31bf..205c717 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-25 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/20063
+ * data.c (gfc_assign_data_value_range): Call
+ create_character_initializer if last_ts is a character type.
+
2005-07-22 Manfred Hollstein <mh@suse.com>
* match.c (gfc_match_symbol): Fix uninitialised warnings.
diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c
index 5eeee0c..d614db4 100644
--- a/gcc/fortran/data.c
+++ b/gcc/fortran/data.c
@@ -459,12 +459,17 @@ gfc_assign_data_value_range (gfc_expr * lvalue, gfc_expr * rvalue,
last_con = con;
}
- /* We should never be overwriting an existing initializer. */
- gcc_assert (!init);
+ if (last_ts->type == BT_CHARACTER)
+ expr = create_character_intializer (init, last_ts, NULL, rvalue);
+ else
+ {
+ /* We should never be overwriting an existing initializer. */
+ gcc_assert (!init);
- expr = gfc_copy_expr (rvalue);
- if (!gfc_compare_types (&lvalue->ts, &expr->ts))
- gfc_convert_type (expr, &lvalue->ts, 0);
+ expr = gfc_copy_expr (rvalue);
+ if (!gfc_compare_types (&lvalue->ts, &expr->ts))
+ gfc_convert_type (expr, &lvalue->ts, 0);
+ }
if (last_con == NULL)
symbol->value = expr;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7de213d..11ec111 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2005-07-25 Jakub Jelinek <jakub@redhat.com>
+ PR fortran/20063
+ * gfortran.fortran-torture/execute/data_4.f90: New test.
+
PR middle-end/20303
* gcc.dg/visibility-d.c: New test.
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/data_4.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/data_4.f90
new file mode 100644
index 0000000..4b5c10e
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/execute/data_4.f90
@@ -0,0 +1,6 @@
+ CHARACTER*4 A(3),B(3),C(3)
+ DATA A /'A',"A",'A'/
+ DATA B /3*'A'/
+ DATA C /'A', 2*'A'/
+ IF (ANY(A.NE.B).OR.ANY(A.NE.C)) CALL ABORT
+ END