This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/36909] New: INTENT(IN) formal -> No need to call _gfortran_internal_unpack


Currently, even for a INTENT(IN) variable _gfortran_internal_unpack is called.

    D.1036 = _gfortran_internal_pack (&parm.1);
    foo (D.1036);
    if ((integer(kind=4)[0:] *) parm.1.data != (integer(kind=4)[0:] *) D.1036)
      {
        _gfortran_internal_unpack (&parm.1, D.1036);
        if (D.1036 != 0B)
              __builtin_free (D.1037);
      }

For INTENT(IN) the  _gfortran_internal_unpack  call can be eliminated for good.
I think the rest can stay and also for INTENT(OUT) the status quo is OK.


Test case:

program test
  implicit none
  integer :: a(3,3)
  call foo(a(1,:))
contains
  subroutine foo(x)
    integer,intent(in) :: x(3)
  end subroutine foo
end program test


-- 
           Summary: INTENT(IN) formal -> No need to call
                    _gfortran_internal_unpack
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: burnus at gcc dot gnu dot org


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]