[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