]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/34262 (MVBITS does not work for arrays)
authorTobias Burnus <burnus@net-b.de>
Thu, 29 Nov 2007 14:56:48 +0000 (15:56 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Thu, 29 Nov 2007 14:56:48 +0000 (15:56 +0100)
2007-11-29  Tobias Burnus  <burnus@net-b.de>

        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  <burnus@net-b.de>

        PR fortran/34262
        * gfortran.dg/mvbits_3.f90: New.

From-SVN: r130513

gcc/fortran/ChangeLog
gcc/fortran/intrinsic.c
gcc/fortran/iresolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/mvbits_3.f90 [new file with mode: 0644]

index b117d18ef1bdcc259c87ee16e0435af89af49ab6..a176c27cb3b58fc21feb295c22e036c11e12878c 100644 (file)
@@ -1,3 +1,10 @@
+2007-11-29  Tobias Burnus  <burnus@net-b.de>
+
+       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  <jakub@redhat.com>
 
        * trans-expr.c (gfc_trans_string_copy): Convert both dest and
index a67ec70b7e4aa75191a33c967805d4f593b5c516..467f7718a995e0c9e369450e1c8e78db38a310d6 100644 (file)
@@ -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)
     {
index b8470441885c732d6b121312bf3c6b0164a9b00a..a68e42e0affc96de72216d47f02614668c5eb347 100644 (file)
@@ -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;
 }
 
 
index f5090210c1c15665dd561e9d035be82a32fe059c..e062abc651cb55d9931503ffa4d51ff52d0cdfe3 100644 (file)
@@ -1,3 +1,8 @@
+2007-11-29  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/34262
+       * gfortran.dg/mvbits_3.f90: New.
+
 2007-11-28  Bob Wilson  <bob.wilson@acm.org>
        
        * 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 (file)
index 0000000..74f24e0
--- /dev/null
@@ -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