[flang-commits] [flang] [flang][cuda] Do not consider kernel result as host variable (PR #190626)

Valentin Clement バレンタイン クレメン via flang-commits flang-commits at lists.llvm.org
Mon Apr 6 09:23:46 PDT 2026


https://github.com/clementval created https://github.com/llvm/llvm-project/pull/190626

None

>From 71db8e1eff3a1136c6b5b549a82575e9dfafac06 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Mon, 6 Apr 2026 09:23:09 -0700
Subject: [PATCH] [flang][cuda] Do not consider kernel result as host variable

---
 flang/lib/Semantics/check-cuda.cpp | 4 ++--
 flang/test/Semantics/cuf25.cuf     | 8 ++++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/flang/lib/Semantics/check-cuda.cpp b/flang/lib/Semantics/check-cuda.cpp
index eb91eb8bac81c..e45f9fb8265e5 100644
--- a/flang/lib/Semantics/check-cuda.cpp
+++ b/flang/lib/Semantics/check-cuda.cpp
@@ -138,13 +138,13 @@ struct FindHostArray
   using Base::operator();
   Result operator()(const evaluate::Component &x) const {
     const Symbol &symbol{x.GetLastSymbol()};
-    if (symbol.IsFuncResult()) {
+    const Symbol &baseSymbol{x.base().GetFirstSymbol()};
+    if (symbol.IsFuncResult() || baseSymbol.IsFuncResult()) {
       return nullptr;
     }
     if (!IsHostArray(symbol)) {
       return nullptr;
     }
-    const Symbol &baseSymbol{x.base().GetFirstSymbol()};
     if (IsDummy(baseSymbol) && IsCUDADeviceContext(&baseSymbol.owner())) {
       return nullptr;
     }
diff --git a/flang/test/Semantics/cuf25.cuf b/flang/test/Semantics/cuf25.cuf
index 084ad3ccd4d1c..541a67a0542b1 100644
--- a/flang/test/Semantics/cuf25.cuf
+++ b/flang/test/Semantics/cuf25.cuf
@@ -4,6 +4,9 @@ module m
   type bar
     integer, allocatable :: m(:)
   end type
+  type r1
+    real :: origin(3)
+  end type r1
 contains
   attributes(global) subroutine g1( a )
     type(bar) :: a
@@ -11,4 +14,9 @@ contains
     a%m(i) = i
     return
   end subroutine
+  attributes(device) function rayConstructor(origin, dir) result(r)
+    real :: origin(3), dir(3)
+    type(r1) :: r
+    r%origin = origin
+  end function
 end module m



More information about the flang-commits mailing list