diff --git a/flang/lib/Common/Fortran.cpp b/flang/lib/Common/Fortran.cpp index 367a51f884e8a..eec83419f9eb2 100644 --- a/flang/lib/Common/Fortran.cpp +++ b/flang/lib/Common/Fortran.cpp @@ -136,7 +136,8 @@ bool AreCompatibleCUDADataAttrs(std::optional x, if (*x == CUDADataAttr::Device) { if ((y && (*y == CUDADataAttr::Managed || *y == CUDADataAttr::Unified || - *y == CUDADataAttr::Shared)) || + *y == CUDADataAttr::Shared || + *y == CUDADataAttr::Constant)) || (!y && (isCudaUnified || isCudaManaged))) { if (y && *y == CUDADataAttr::Shared && warning) { *warning = "SHARED attribute ignored"s; diff --git a/flang/test/Semantics/cuf10.cuf b/flang/test/Semantics/cuf10.cuf index 047503b3cca4e..24b596b1fa55d 100644 --- a/flang/test/Semantics/cuf10.cuf +++ b/flang/test/Semantics/cuf10.cuf @@ -2,6 +2,7 @@ module m real, device :: a(4,8) real, managed, allocatable :: b(:,:) + integer, constant :: x = 1 contains attributes(global) subroutine kernel(a,b,c,n,m) integer, value :: n @@ -23,4 +24,10 @@ module m call devsub(c,4) ! not checked in OpenACC construct end do end + attributes(global) subroutine sub1(x) + integer :: x + end + subroutine sub2() + call sub1<<<1,1>>>(x) ! actual constant to device dummy + end end