[flang-commits] [flang] [flang][cuda] Take associate into account for host array diagnostic (PR #190673)
via flang-commits
flang-commits at lists.llvm.org
Mon Apr 6 13:33:18 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: Valentin Clement (バレンタイン クレメン) (clementval)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/190673.diff
2 Files Affected:
- (modified) flang/lib/Semantics/check-cuda.cpp (+4-3)
- (modified) flang/test/Semantics/cuf25.cuf (+22)
``````````diff
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
``````````
</details>
https://github.com/llvm/llvm-project/pull/190673
More information about the flang-commits
mailing list