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



             Bug #: 57022

           Summary: [4.7/4.8/4.9 Regression] Inappropriate warning for use

                    of TRANSFER with arrays

    Classification: Unclassified

           Product: gcc

           Version: 4.9.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: fortran

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: domi...@lps.ens.fr

                CC: ja...@gcc.gnu.org, tkoe...@gcc.gnu.org





>From http://gcc.gnu.org/ml/fortran/2013-04/msg00191.html, when compiled by

gfortran 4.7.3, 4.8.0, and trunk with -Wall, the following code



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



module test_transfer



    use, intrinsic :: iso_fortran_env



    integer(int8)  :: test8(8)  = 0

    integer(int16) :: test16(4) = 0

    integer(int32) :: test32(2) = 0

    integer(int64) :: test64    = 0

    integer        :: test



contains



    subroutine transfers()



        select case(test)

        case(0)

            test64 = transfer(test8, test64)

        case(1)

            test64 = transfer(test16, test64)

        case(2)

            test64 = transfer(test32, test64)

        case(3)

            test8  = transfer(test64, test8, 8)

        case(4)

            test16 = transfer(test64, test16, 4)

        case(5)

            test32 = transfer(test64, test32, 2)

        end select



        return

    end subroutine transfers



end module test_transfer



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



generates the messages



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



test_transfer.f90:17.30:



            test64 = transfer(test8, test64)

                              1

Warning: Intrinsic TRANSFER at (1) has partly undefined result: source size 1 <

result size 8

test_transfer.f90:19.30:



            test64 = transfer(test16, test64)

                              1

Warning: Intrinsic TRANSFER at (1) has partly undefined result: source size 2 <

result size 8

test_transfer.f90:21.30:



            test64 = transfer(test32, test64)

                              1

Warning: Intrinsic TRANSFER at (1) has partly undefined result: source size 4 <

result size 8



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



There is no warning for revision 176696 (2011-07-23), but I see them for

revision 177649 (2011-08-11).



This is likely due to (exposed by) revision 177486: in

gfc_calculate_transfer_sizes source->expr_type == EXPR_VARIABLE.

Reply via email to