[petsc-dev] Need help with Fortran code/compiler issue

Barry Smith bsmith at mcs.anl.gov
Thu Apr 7 13:46:11 CDT 2016


src/sys/classes/bag/f2003-src/fsrc/bagenum.F has the code fragment

     Subroutine PetscBagRegisterEnum(bag,addr,FArray,def,n,h,ierr)
      use,intrinsic :: iso_c_binding
      implicit none

      PetscBag   bag
      character(*)                n,h
      character(*)                FArray(*)
      PetscEnum                   :: def
      PetscErrorCode,intent(out)  :: ierr
      PetscReal addr(*)

      Type(C_Ptr),Dimension(:),Pointer :: CArray
      character(kind=c_char),pointer   :: nullc => null()
      PetscInt   :: i,Len
      Character(kind=C_char,len=256),Dimension(:),Pointer::list1

      do i=1,256
        if (len_trim(Farray(i)) .eq. 0) then
          Len = i-1
          goto 100
        endif
        if (len_trim(Farray(i)) .gt. 255) then
          ierr = PETSC_ERR_ARG_OUTOFRANGE
          return
        endif
      enddo
      ierr = PETSC_ERR_ARG_OUTOFRANGE
      return

 100  continue

      Allocate(list1(Len),stat=ierr);
      Allocate(CArray(Len+1),stat=ierr)
      do i=1,Len
         list1(i) = trim(FArray(i))//C_NULL_CHAR
      enddo

      CArray = (/(c_loc(list1(i)),i=1,Len),c_loc(nullc)/)
      call PetscBagRegisterEnumPrivate(bag,addr,CArray,def,n,h,ierr)
      DeAllocate(CArray)
      DeAllocate(list1)
      End Subroutine

which produces the following warning with one Fortran compiler:

/Users/petsc/petsc.clone-4/src/sys/objects/f2003-src/fsrc/optionenum.F:35:0:

       CArray = (/(c_loc(list1(i)),i=1,Len),c_loc(nullc)/)
 ^
Warning: 'list1.data' may be used uninitialized in this function [-Wmaybe-uninitialized]

  Do any Fortran programmers know if the code is correct or if this is an incorrect warning from the compiler?

   Thanks

    Barry






More information about the petsc-dev mailing list