[flang-commits] [flang] [flang][cuda] Take associate into account for host array diagnostic (PR #190673)
Valentin Clement バレンタイン クレメン via flang-commits
flang-commits at lists.llvm.org
Mon Apr 6 13:32:40 PDT 2026
https://github.com/clementval created https://github.com/llvm/llvm-project/pull/190673
None
>From 875c7e72c1beb33e0c8c5e3d12da356b4c90041b Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Mon, 6 Apr 2026 13:32:05 -0700
Subject: [PATCH] [flang][cuda] Take associate into account for host array
diagnostic
---
flang/lib/Semantics/check-cuda.cpp | 7 ++++---
flang/test/Semantics/cuf25.cuf | 22 ++++++++++++++++++++++
2 files changed, 26 insertions(+), 3 deletions(-)
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