From e80bea03430eb4c626e7ca513a36489cee360d2e Mon Sep 17 00:00:00 2001 From: burnus Date: Thu, 29 Nov 2007 14:56:48 +0000 Subject: [PATCH] 2007-11-29 Tobias Burnus PR fortran/34262 * intrinsic.c (gfc_get_intrinsic_sub_symbol): Add comment. (gfc_intrinsic_sub_interface): Copy elemental state if needed. * iresolve.c (gfc_resolve_mvbits): Mark procedure as elemental. 2007-11-29 Tobias Burnus PR fortran/34262 * gfortran.dg/mvbits_3.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130513 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/intrinsic.c | 8 ++++++-- gcc/fortran/iresolve.c | 2 ++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/mvbits_3.f90 | 31 +++++++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/mvbits_3.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b117d18ef1b..a176c27cb3b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2007-11-29 Tobias Burnus + + PR fortran/34262 + * intrinsic.c (gfc_get_intrinsic_sub_symbol): Add comment. + (gfc_intrinsic_sub_interface): Copy elemental state if needed. + * iresolve.c (gfc_resolve_mvbits): Mark procedure as elemental. + 2007-11-28 Jakub Jelinek * trans-expr.c (gfc_trans_string_copy): Convert both dest and diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index a67ec70b7e4..467f7718a99 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -96,7 +96,8 @@ gfc_type_letter (bt type) } -/* Get a symbol for a resolved name. */ +/* Get a symbol for a resolved name. Note, if needed be, the elemental + attribute has be added afterwards. */ gfc_symbol * gfc_get_intrinsic_sub_symbol (const char *name) @@ -3501,7 +3502,10 @@ gfc_intrinsic_sub_interface (gfc_code *c, int error_flag) if (isym->resolve.s1 != NULL) isym->resolve.s1 (c); else - c->resolved_sym = gfc_get_intrinsic_sub_symbol (isym->lib_name); + { + c->resolved_sym = gfc_get_intrinsic_sub_symbol (isym->lib_name); + c->resolved_sym->attr.elemental = isym->elemental; + } if (gfc_pure (NULL) && !isym->elemental) { diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index b8470441885..a68e42e0aff 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -2581,6 +2581,8 @@ gfc_resolve_mvbits (gfc_code *c) name = gfc_get_string (PREFIX ("mvbits_i%d"), c->ext.actual->expr->ts.kind); c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); + /* Mark as elemental subroutine as this does not happen automatically. */ + c->resolved_sym->attr.elemental = 1; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f5090210c1c..e062abc651c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-11-29 Tobias Burnus + + PR fortran/34262 + * gfortran.dg/mvbits_3.f90: New. + 2007-11-28 Bob Wilson * lib/target-supports.exp (check_effective_target_mips_soft_float): diff --git a/gcc/testsuite/gfortran.dg/mvbits_3.f90 b/gcc/testsuite/gfortran.dg/mvbits_3.f90 new file mode 100644 index 00000000000..74f24e001ee --- /dev/null +++ b/gcc/testsuite/gfortran.dg/mvbits_3.f90 @@ -0,0 +1,31 @@ +! { dg-do run } +! +! PR fortran/ +! +! The trans-*.c part of the compiler did no know +! that mvbits is an elemental function. +! +! Test case contributed by P.H. Lundow. +! +program main + implicit none + integer :: a( 2 ), b( 2 ) + integer :: x, y + + a = 1 + b = 0 + x = 1 + y = 0 + + call mvbits (a, 0, 1, b, 1) + call mvbits (x, 0, 1, y, 1) + +! write (*, *) 'a: ', a +! write (*, *) 'x: ', x +! write (*, *) +! write (*, *) 'b: ', b +! write (*, *) 'y: ', y +! write (*, *) + + if ( any (b /= y) ) call abort() +end program main -- 2.11.0