
Adds a hint to the warning message to disable a warning and updates the tests to expect this. Also fixes a bug in the storage of canonical spelling of error flags so that they are not used after free.
105 lines
3.8 KiB
Plaintext
105 lines
3.8 KiB
Plaintext
! RUN: %python %S/test_errors.py %s %flang_fc1
|
|
! Exercise CUDA data attribute checks
|
|
module m
|
|
type :: t1
|
|
integer :: i
|
|
end type
|
|
type :: t2
|
|
real, unified :: r(10) ! ok
|
|
end type
|
|
real, constant :: mc ! ok
|
|
real, constant :: mci = 1. ! ok
|
|
!ERROR: Object 'mcl' with ATTRIBUTES(CONSTANT) may not be allocatable, pointer, or target
|
|
real, constant, allocatable :: mcl
|
|
!ERROR: Object 'mcp' with ATTRIBUTES(CONSTANT) may not be allocatable, pointer, or target
|
|
real, constant, pointer :: mcp
|
|
!ERROR: Object 'mct' with ATTRIBUTES(CONSTANT) may not be allocatable, pointer, or target
|
|
real, constant, target :: mct
|
|
real, device :: md ! ok
|
|
real, device :: mdi = 1.
|
|
real, device, allocatable :: mdl ! ok
|
|
real, device, pointer :: mdp ! ok at module level
|
|
real, device, target :: mdt ! ok
|
|
!ERROR: Object 'ms' with ATTRIBUTES(SHARED) must be declared in a device subprogram
|
|
real, shared :: ms
|
|
!ERROR: Object 'msi' with ATTRIBUTES(SHARED) must be declared in a device subprogram
|
|
real, shared :: msi = 1.
|
|
!ERROR: Object 'msl' with ATTRIBUTES(SHARED) may not be allocatable, pointer, or target
|
|
real, shared, allocatable :: msl
|
|
!ERROR: Object 'msp' with ATTRIBUTES(SHARED) may not be allocatable, pointer, or target
|
|
real, shared, pointer :: msp
|
|
!ERROR: Object 'mst' with ATTRIBUTES(SHARED) may not be allocatable, pointer, or target
|
|
real, shared, target :: mst
|
|
!ERROR: Object 'msa' with ATTRIBUTES(SHARED) must be declared in a device subprogram
|
|
real, shared :: msa(*)
|
|
real, managed :: mm ! ok
|
|
real, managed :: mmi = 1. ! ok
|
|
real, managed, allocatable :: mml ! ok
|
|
!ERROR: Object 'mmp' with ATTRIBUTES(MANAGED) must also be allocatable, automatic, explicit shape, or a dummy argument
|
|
real, managed, pointer :: mmp(:)
|
|
real, managed, target :: mmt
|
|
!WARNING: Object 'mp' with ATTRIBUTES(PINNED) should also be allocatable [-Wcuda-usage]
|
|
real, pinned :: mp
|
|
!WARNING: Object 'mpi' with ATTRIBUTES(PINNED) should also be allocatable [-Wcuda-usage]
|
|
real, pinned :: mpi = 1.
|
|
real, pinned, allocatable :: mpl ! ok
|
|
!ERROR: Object 'mpp' with ATTRIBUTES(PINNED) may not be a pointer [-Wcuda-usage]
|
|
real, pinned, pointer :: mpp
|
|
!WARNING: Object 'mpt' with ATTRIBUTES(PINNED) should also be allocatable [-Wcuda-usage]
|
|
real, pinned, target :: mpt ! ok
|
|
!ERROR: ATTRIBUTES(TEXTURE) is obsolete and no longer supported
|
|
real, texture, pointer :: mt
|
|
!ERROR: 'bigint' has intrinsic type 'INTEGER(16)' that is not available on the device
|
|
integer(16), device :: bigint
|
|
!ERROR: Object 'um' with ATTRIBUTES(UNIFIED) must be declared in a host subprogram
|
|
real, unified :: um
|
|
|
|
type :: t3
|
|
!ERROR: Component 'r' with ATTRIBUTES(DEVICE) must also be allocatable or pointer
|
|
real, device :: r
|
|
real, device, pointer :: rp ! ok
|
|
real, device, allocatable :: ra ! ok
|
|
real, device, pointer, contiguous :: rpc ! ok
|
|
end type
|
|
|
|
contains
|
|
attributes(device) subroutine devsubr(n,da,rs)
|
|
integer, intent(in) :: n
|
|
real, device :: da(*) ! ok
|
|
real, managed :: ma(n) ! ok
|
|
!WARNING: Pointer 'dp' may not be associated in a device subprogram [-Wcuda-usage]
|
|
real, device, pointer :: dp
|
|
real, constant :: rc ! ok
|
|
real, shared :: rs ! ok
|
|
!ERROR: Object 'u' with ATTRIBUTES(UNIFIED) must be declared in a host subprogram
|
|
real, unified :: u
|
|
end subroutine
|
|
|
|
subroutine host()
|
|
!ERROR: Object 'rc' with ATTRIBUTES(CONSTANT) may not be declared in a host subprogram
|
|
real, constant :: rc
|
|
end subroutine
|
|
|
|
attributes(global) subroutine devsubr2()
|
|
real, shared :: rs
|
|
|
|
rs = 1 ! ok
|
|
end subroutine
|
|
|
|
subroutine host2()
|
|
real, unified :: ru ! ok
|
|
type(t1), unified :: tu ! ok
|
|
type(t2) :: t ! ok
|
|
|
|
block
|
|
real, device :: a(100) ! ok
|
|
end block
|
|
end subroutine
|
|
|
|
|
|
end module
|
|
|
|
program p
|
|
real, unified :: um ! ok
|
|
end program
|