[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