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



Richard Biener <rguenth at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|WAITING                     |NEW



--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> 2012-10-22 
14:05:36 UTC ---

Confirmed.  Note that due to a Frontend issue (wrong decls for check_i8?)

without LTO no inlining takes place.  As soon as we inline we have



  _gfortran_set_options (7, &options.0[0]);

  _10 = 0xffffffff00000000565d7b7b;

  _7 = _10;

  _8 = -3784425932234851461;

  if (_7 != _8)

    goto <bb 3>;



from



  D.1880 = -3784425932234851461;

  check_i8 (&D.1880, &C.1881);



With the simplified



subroutine check_i8 (a, b)

  integer(kind=8), intent(in) :: a, b

  if (a /= b) call abort()

end subroutine check_i8



program test

  implicit none



  integer(kind=8) :: i8



  i8 = 3_8

  call check_i8(i8**43_8,3_8**43_8)



end program test



I can get non-LTO to inline check_i8 with -fwhole-prgram.



I think your bisection is wrong and



2012-10-18  Richard Guenther  <rguent...@suse.de>



        * lto-streamer.h (enum LTO_tags): Add LTO_integer_cst.

        * lto-streamer-in.c (lto_input_tree): Use it.

        * lto-streamer-out.c (lto_output_tree): Likewise, for

        !TREE_OVERFLOW integer constants only.

        * tree-streamer-in.c (unpack_ts_int_cst_value_fields): New function.

        (unpack_value_fields): Call it.

        (streamer_read_integer_cst): Simplify.

        * tree-streamer-out.c (pack_ts_int_cst_value_fields): New function.

        (streamer_pack_tree_bitfields): Call it.

        (streamer_write_integer_cst): Adjust.



must be the issue.  Very likely we have an INTEGER_CST with TREE_OVERFLOW

flag set.

Reply via email to