
Fortran's intrinsic numeric and relational operators can be overridden with explicit interfaces so long as one or more of the dummy arguments have the DEVICE attribute. Semantics already allows this without complaint, but fails to replace the operations with the defined specific procedure calls when analyzing expressions.
37 lines
968 B
Plaintext
37 lines
968 B
Plaintext
! RUN: %python %S/test_errors.py %s %flang_fc1
|
|
|
|
module mod1
|
|
contains
|
|
attributes(global) subroutine sub1(adev)
|
|
real :: adev(10)
|
|
integer :: tid
|
|
tid = threadIdx%x
|
|
! Use to crash the compiler. Make sure we have the proper semantic error.
|
|
!ERROR: Actual argument for 'i=' has bad type 'REAL(4)'
|
|
adev(tid + 1) = scale(real(tid), 2.0)
|
|
end subroutine sub1
|
|
end module
|
|
|
|
subroutine sub1()
|
|
real, device :: adev(10), bdev(10)
|
|
real :: ahost(10)
|
|
|
|
!ERROR: More than one reference to a CUDA object on the right hand side of the assignment
|
|
ahost = adev + bdev
|
|
|
|
ahost = adev + adev
|
|
|
|
end subroutine
|
|
|
|
logical function compare_h(a,b)
|
|
!ERROR: Derived type 'h' not found
|
|
type(h) :: a, b
|
|
!ERROR: 'a' is not an object of derived type; it is implicitly typed
|
|
!ERROR: 'b' is not an object of derived type; it is implicitly typed
|
|
compare_h = (a%h .eq. b%h)
|
|
end
|
|
|
|
attributes(global) subroutine sub2()
|
|
if (threadIdx%x == 1) print *, "I'm number one"
|
|
end subroutine
|