PACK intrinsic bug?

Dominique Dhumieres dominiq@lps.ens.fr
Tue Aug 12 18:14:00 GMT 2008


As far as i can tell the problem is not with PACK, but with
exprs(:)(1:1)== some expr, as shown by the following reduced code:

module xparams
  integer,parameter :: exprbeg=100,exprend=154
  character(*),dimension(exprbeg:exprend),parameter :: &
      exprs=(/'nint()  ','log10() ','sqrt()  ','acos()  ','asin()  ',   &
      'atan()  ','cosh()  ','sinh()  ','tanh()  ','int()   ',           &
      'cos()   ','sin()   ','tan()   ','exp()   ','log()   ','abs()   ',&
      'delta() ','step()  ','rect()  ','max(,)  ','min(,)  ','bj0()   ',&
      'bj1()   ','bjn(,)  ','by0()   ','by1()   ','byn(,)  ','logb(,) ',&
      'erf()   ','erfc()  ','lgamma()','gamma() ','csch()  ','sech()  ',&
      'coth()  ','lif(,,) ','gaus()  ','sinc()  ','atan2(,)','mod(,)  ',&
      'nthrt(,)','ramp()  ','fbi()   ','fbiq()  ','uran(,) ','aif(,,,)',&
      'sgn()   ','cbrt()  ','fact()  ','somb()  ','bk0()   ','bk1()   ',&
      'bkn(,)  ','bbi(,,) ','bbiq(,,)'/)
  logical :: tmp(55,26)
  character(26) :: al = 'abcdefghijklmnopqrstuvwxyz'
end

program pack_bug
  use xparams
    do i = 1, 1
      tmp(:,i) = (exprs(:)(1:1)==al(i:i))
      print '(55L)', exprs(:)(1:1)=='a'
      print '(55L)', tmp(:,i)
    end do
end

giving

FFFTTTFFFFFFFFFTFFFFFFFFFFFFFFFFFFFFFFTFFFFFFTFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

The first line is correct, but not the second one.

Unless someone has a better example, I'll submit a PR
ASAP.

Dominique



More information about the Fortran mailing list