[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