[flang-commits] [flang] 92b595b - [flang][cuda] Take associate into account for host array diagnostic (#190673)
via flang-commits
flang-commits at lists.llvm.org
Mon Apr 6 13:43:59 PDT 2026
Author: Valentin Clement (バレンタイン クレメン)
Date: 2026-04-06T20:43:52Z
New Revision: 92b595b9b4ca71aad9e7cc7d32e4b90a9b051a5b
URL: https://github.com/llvm/llvm-project/commit/92b595b9b4ca71aad9e7cc7d32e4b90a9b051a5b
DIFF: https://github.com/llvm/llvm-project/commit/92b595b9b4ca71aad9e7cc7d32e4b90a9b051a5b.diff
LOG: [flang][cuda] Take associate into account for host array diagnostic (#190673)
Added:
Modified:
flang/lib/Semantics/check-cuda.cpp
flang/test/Semantics/cuf25.cuf
Removed:
################################################################################
diff --git a/flang/lib/Semantics/check-cuda.cpp b/flang/lib/Semantics/check-cuda.cpp
index e45f9fb8265e5..fcfbf29972ca9 100644
--- a/flang/lib/Semantics/check-cuda.cpp
+++ b/flang/lib/Semantics/check-cuda.cpp
@@ -116,8 +116,9 @@ struct DeviceExprChecker
};
static bool IsHostArray(const Symbol &symbol) {
+ const Symbol &resolved{GetAssociationRoot(symbol)};
if (const auto *details{
- symbol.GetUltimate().detailsIf<semantics::ObjectEntityDetails>()}) {
+ resolved.detailsIf<semantics::ObjectEntityDetails>()}) {
if (details->cudaDataAttr() &&
(*details->cudaDataAttr() == common::CUDADataAttr::Device ||
*details->cudaDataAttr() == common::CUDADataAttr::Constant ||
@@ -137,8 +138,8 @@ struct FindHostArray
FindHostArray() : Base(*this) {}
using Base::operator();
Result operator()(const evaluate::Component &x) const {
- const Symbol &symbol{x.GetLastSymbol()};
- const Symbol &baseSymbol{x.base().GetFirstSymbol()};
+ const Symbol &symbol{x.GetLastSymbol().GetUltimate()};
+ const Symbol &baseSymbol{GetAssociationRoot(x.base().GetFirstSymbol())};
if (symbol.IsFuncResult() || baseSymbol.IsFuncResult()) {
return nullptr;
}
diff --git a/flang/test/Semantics/cuf25.cuf b/flang/test/Semantics/cuf25.cuf
index 541a67a0542b1..729e9bfa4af6f 100644
--- a/flang/test/Semantics/cuf25.cuf
+++ b/flang/test/Semantics/cuf25.cuf
@@ -20,3 +20,25 @@ contains
r%origin = origin
end function
end module m
+
+program main
+ implicit none
+ integer, parameter :: nx = 400, ny = 200
+ integer :: i, j
+ type r1
+ real :: v(3)
+ end type r1
+ type(r1) :: fb(nx, ny)
+ type(r1), device :: fb_d(nx, ny)
+
+ associate (fb => fb_d)
+ !$cuf kernel do (2) <<<*,*>>>
+ do j = 1, ny
+ do i = 1, nx
+ fb(i,j)%v(1) = real(i)/nx
+ fb(i,j)%v(2) = real(j)/ny
+ fb(i,j)%v(3) = 0.2
+ end do
+ end do
+ end associate
+end program
More information about the flang-commits
mailing list