------- Comment #1 from dfranke at gcc dot gnu dot org  2007-05-25 11:45 -------
Shortened testcase to compare variable vs. parameter in tree dump:

$> cat pr32083.f90
PROGRAM TestInfinite
  integer(8), parameter :: bit_pattern_NegInf_i8_p = -4503599627370496_8
  integer(8) :: bit_pattern_NegInf_i8 = -4503599627370496_8

  integer(8) :: i
  real(8)    :: r

  r = transfer(bit_pattern_NegInf_i8,r)
  i = transfer(r,i)

  r = transfer(bit_pattern_NegInf_i8_p,r)
  i = transfer(r,i)
END PROGRAM TestInfinite

$> gfortran-svn -Wall -std=f95 -fdump-tree-original pr32083.f90
$> cat pr32083.f90.003t.original
MAIN__ ()
{
  static int8 bit_pattern_neginf_i8 = -0x10000000000000;
  real8 r;
  int8 i;

  _gfortran_set_std (2, 11, 0, 0, 0);
  {
    real8 transfer.0;

    __builtin_memcpy ((void *) &transfer.0, (void *) &bit_pattern_neginf_i8,
8);
    r = transfer.0;
  }
  {
    int8 transfer.1;

    __builtin_memcpy ((void *) &transfer.1, (void *) &r, 8);
    i = transfer.1;
  }
  r =  Inf;
  {
    int8 transfer.2;

    __builtin_memcpy ((void *) &transfer.2, (void *) &r, 8);
    i = transfer.2;
  }
}

While the first two transfer operations are translated into corresponding
blocks, the third is not. Observe the line
  r =  Inf;


-- 

dfranke at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dfranke at gcc dot gnu dot
                   |                            |org
OtherBugsDependingO|                            |31237
              nThis|                            |
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2007-05-25 11:45:00
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32083

Reply via email to