[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