------- 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