diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/iresolve.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/reshape-complex.f90 | 11 |
4 files changed, 31 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 31179f0..87e1047 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2005-05-18 Thomas Koenig <Thomas.Koenig@online.de> + + PR libfortran/21127 + * fortran/iresolve.c (gfc_resolve_reshape): Add + gfc_type_letter (BT_COMPLEX) for complex to + to resolved function name. + 2005-05-18 Erik Edelmann <erik.edelmann@iki.fi> * array.c (gfc_match_array_constructor): Support [ ... ] diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 746b97d..e939287 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -1137,8 +1137,14 @@ gfc_resolve_reshape (gfc_expr * f, gfc_expr * source, gfc_expr * shape, case 4: case 8: /* case 16: */ - f->value.function.name = - gfc_get_string (PREFIX("reshape_%d"), source->ts.kind); + if (source->ts.type == BT_COMPLEX) + f->value.function.name = + gfc_get_string (PREFIX("reshape_%c%d"), + gfc_type_letter (BT_COMPLEX), source->ts.kind); + else + f->value.function.name = + gfc_get_string (PREFIX("reshape_%d"), source->ts.kind); + break; default: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7ee682a..74b3701 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-05-18 Thomas Koenig <Thomas.Koenig@online.de> + + PR libfortran/21127 + * gfortran.dg/reshape-complex.f90: New test. + 2005-05-18 Erik Edelmann <erik.edelmann@iki.fi> * gfortran.dg/array_constructor_1.f90: New test. diff --git a/gcc/testsuite/gfortran.dg/reshape-complex.f90 b/gcc/testsuite/gfortran.dg/reshape-complex.f90 new file mode 100644 index 0000000..87c8049 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/reshape-complex.f90 @@ -0,0 +1,11 @@ +! { dg-do run } +! PR 21127: Reshape of complex didn't work. +program main + complex, dimension(8) :: b + complex, dimension(2,2) :: a + integer :: i + b = (/(i,i=1,8)/) + a = reshape(b(1:8:2),shape(a)) + if (a(1,1) /= (1.0, 0.0) .or. a(2,1) /= (3.0, 0.0) .or. & + a(1,2) /= (5.0, 0.0) .or. a(2,2) /= (7.0, 0.0)) call abort +end |