[flang-commits] [flang] Revert "[flang][cuda] Emit error when a device actual argument is used in host intrinsic" (PR #174019)
via flang-commits
flang-commits at lists.llvm.org
Tue Dec 30 13:05:40 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: Valentin Clement (バレンタイン クレメン) (clementval)
<details>
<summary>Changes</summary>
Reverts llvm/llvm-project#<!-- -->172914
---
Full diff: https://github.com/llvm/llvm-project/pull/174019.diff
4 Files Affected:
- (modified) flang/lib/Semantics/check-call.cpp (-36)
- (modified) flang/lib/Semantics/resolve-names.cpp (-12)
- (modified) flang/test/Lower/CUDA/cuda-data-transfer.cuf (+1-11)
- (modified) flang/test/Semantics/cuf23.cuf (-7)
``````````diff
diff --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp
index b084746a3f787..5f276d9b9f4f8 100644
--- a/flang/lib/Semantics/check-call.cpp
+++ b/flang/lib/Semantics/check-call.cpp
@@ -18,7 +18,6 @@
#include "flang/Parser/message.h"
#include "flang/Semantics/scope.h"
#include "flang/Semantics/tools.h"
-#include "llvm/ADT/StringSet.h"
#include <map>
#include <string>
@@ -341,15 +340,6 @@ static bool DefersSameTypeParameters(
return true;
}
-// List of intrinsics that are skipped when checking for device actual
-// arguments.
-static const llvm::StringSet<> cudaSkippedIntrinsics = {
- "__builtin_c_f_pointer", "__builtin_c_loc"};
-// List of intrinsics that can have a device actual argument if it is an
-// allocatable or pointer.
-static const llvm::StringSet<> cudaAllowedIntrinsics = {"size", "lbound",
- "ubound", "shape", "allocated", "associated", "kind", "present"};
-
static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy,
const std::string &dummyName, evaluate::Expr<evaluate::SomeType> &actual,
characteristics::TypeAndShape &actualType, bool isElemental,
@@ -1150,32 +1140,6 @@ static void CheckExplicitDataArg(const characteristics::DummyDataObject &dummy,
dummyName, toStr(dummyDataAttr), toStr(actualDataAttr));
}
}
- // Emit an error message if an actual argument passed to a host intrinsic is
- // on the device.
- if (intrinsic && !FindCUDADeviceContext(scope) &&
- !FindOpenACCConstructContaining(scope)) {
- if (!cudaSkippedIntrinsics.contains(intrinsic->name)) {
- std::optional<common::CUDADataAttr> actualDataAttr;
- if (const auto *actualObject{actualLastSymbol
- ? actualLastSymbol->detailsIf<ObjectEntityDetails>()
- : nullptr}) {
- actualDataAttr = actualObject->cudaDataAttr();
- }
- if (actualDataAttr && *actualDataAttr == common::CUDADataAttr::Device) {
- // Allocatable or pointer with device attribute have their descriptor in
- // managed memory. It is allowed to pass them to some inquiry
- // intrinsics.
- if (!actualLastSymbol || !IsAllocatableOrPointer(*actualLastSymbol) ||
- (IsAllocatableOrPointer(*actualLastSymbol) &&
- !cudaAllowedIntrinsics.contains(intrinsic->name))) {
- messages.Say(
- "Actual argument %s associated with host intrinsic %s is on the device"_err_en_US,
- actualLastSymbol ? actualLastSymbol->name() : "",
- intrinsic->name);
- }
- }
- }
- }
// Warning for breaking F'2023 change with character allocatables
if (intrinsic && dummy.intent != common::Intent::In) {
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 6b59eb94c1c9b..5cc887791048d 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -1081,8 +1081,6 @@ class DeclarationVisitor : public ArraySpecVisitor,
bool Pre(const parser::SaveStmt &);
bool Pre(const parser::BasedPointer &);
void Post(const parser::BasedPointer &);
- bool Pre(const parser::CUFKernelDoConstruct &);
- void Post(const parser::CUFKernelDoConstruct &);
void PointerInitialization(
const parser::Name &, const parser::InitialDataTarget &);
@@ -9280,16 +9278,6 @@ void DeclarationVisitor::LegacyDataInitialization(const parser::Name &name,
}
}
-bool DeclarationVisitor::Pre(const parser::CUFKernelDoConstruct &x) {
- // Treat CUDA kernel do construct as OpenACC construct.
- PushScope(Scope::Kind::OpenACCConstruct, nullptr);
- return true;
-}
-
-void DeclarationVisitor::Post(const parser::CUFKernelDoConstruct &x) {
- PopScope();
-}
-
void ResolveNamesVisitor::HandleCall(
Symbol::Flag procFlag, const parser::Call &call) {
common::visit(
diff --git a/flang/test/Lower/CUDA/cuda-data-transfer.cuf b/flang/test/Lower/CUDA/cuda-data-transfer.cuf
index e0c23a1d5df8f..015947430b07c 100644
--- a/flang/test/Lower/CUDA/cuda-data-transfer.cuf
+++ b/flang/test/Lower/CUDA/cuda-data-transfer.cuf
@@ -22,15 +22,6 @@ module mod1
end function
end interface
- interface
- function somefunction(d, n)
- integer :: n
- real(8), device :: d(n,n)
- real(8) :: somefunction(n)
- end function
- end interface
-
-
contains
function dev1(a)
integer, device :: a(:)
@@ -456,10 +447,9 @@ end subroutine
! CHECK: cuf.data_transfer
subroutine sub23(n)
- use mod1
integer :: n
real(8), device :: d(n,n), x(n)
- x = somefunction(d,2) ! Was triggering Unsupported CUDA data transfer
+ x = sum(d,dim=2) ! Was triggering Unsupported CUDA data transfer
end subroutine
! CHECK-LABEL: func.func @_QPsub23
diff --git a/flang/test/Semantics/cuf23.cuf b/flang/test/Semantics/cuf23.cuf
index 73f13d1d46a17..8c03c18d9b0db 100644
--- a/flang/test/Semantics/cuf23.cuf
+++ b/flang/test/Semantics/cuf23.cuf
@@ -53,10 +53,3 @@ attributes(global) subroutine global_with_block()
print*, a ! ok
end block
end subroutine
-
-subroutine intrinsic_error(n)
- integer :: n
- real(8), device :: d(n,n), x(n)
-!ERROR: Actual argument d associated with host intrinsic sum is on the device
- x = sum(d,dim=2)
-end subroutine
``````````
</details>
https://github.com/llvm/llvm-project/pull/174019
More information about the flang-commits
mailing list