diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-07-25 09:51:12 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2005-07-25 09:51:12 +0200 |
commit | 31f74accb27dfe58e1926dbbcb0b9d57e55bde42 (patch) | |
tree | f2941d00c497cee2722fe86e247561fbdf30c097 /gcc | |
parent | 044ed7ecf6f07beb86a90f7d79b3f5b9424764db (diff) | |
download | gcc-31f74accb27dfe58e1926dbbcb0b9d57e55bde42.zip gcc-31f74accb27dfe58e1926dbbcb0b9d57e55bde42.tar.gz gcc-31f74accb27dfe58e1926dbbcb0b9d57e55bde42.tar.bz2 |
re PR fortran/20063 (n*'xxxx' disables padding)
PR fortran/20063
* data.c (gfc_assign_data_value_range): Call
create_character_initializer if last_ts is a character type.
* gfortran.fortran-torture/execute/data_4.f90: New test.
From-SVN: r102349
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/data.c | 15 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.fortran-torture/execute/data_4.f90 | 6 |
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 |