mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:56:42 +00:00

Establish a set of optional usage warnings, and enable some only in "-pedantic" mode that, in our subjective experience with application codes, seem to issue frequently without indicating usage that really needs to be corrected. By default, with this patch the compiler should appear to be somewhat less persnickety but not less informative. Differential Revision: https://reviews.llvm.org/D150710
37 lines
1.5 KiB
Fortran
37 lines
1.5 KiB
Fortran
! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
|
|
! Check errors in TRANSFER()
|
|
|
|
subroutine subr(o)
|
|
integer, intent(in), optional :: o
|
|
type empty
|
|
end type
|
|
type(empty) :: empty1(1)
|
|
type hasdescriptor
|
|
real, allocatable :: allocatable
|
|
end type
|
|
type(hasdescriptor) hasDesc
|
|
real :: empty2(0)
|
|
character(0) :: empty3(1)
|
|
integer, pointer :: source(:)
|
|
integer, allocatable :: ia
|
|
integer, pointer :: ip
|
|
!ERROR: Element size of MOLD= array may not be zero when SOURCE= is not empty
|
|
print *, transfer(1., empty1)
|
|
print *, transfer(1., empty2) ! ok
|
|
!ERROR: Element size of MOLD= array may not be zero when SOURCE= is not empty
|
|
print *, transfer(1., empty3)
|
|
!WARNING: Element size of MOLD= array may not be zero unless SOURCE= is empty
|
|
print *, transfer(source, empty1)
|
|
print *, transfer(source, empty2) ! ok
|
|
!WARNING: Element size of MOLD= array may not be zero unless SOURCE= is empty
|
|
print *, transfer(source, empty3)
|
|
!ERROR: SIZE= argument may not be the optional dummy argument 'o'
|
|
print *, transfer(1., empty2, size=o)
|
|
!WARNING: SIZE= argument that is allocatable or pointer must be present at execution; parenthesize to silence this warning
|
|
print *, transfer(1., empty2, size=ia)
|
|
!WARNING: SIZE= argument that is allocatable or pointer must be present at execution; parenthesize to silence this warning
|
|
print *, transfer(1., empty2, size=ip)
|
|
!WARNING: Source of TRANSFER contains allocatable or pointer component %allocatable
|
|
print *, transfer(hasDesc, 1)
|
|
end
|