[flang-commits] [flang] Revert "[flang][cuda] Emit error when a device actual argument is used in host intrinsic" (PR #174019)

Valentin Clement バレンタイン クレメン via flang-commits flang-commits at lists.llvm.org
Tue Dec 30 13:05:11 PST 2025


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

Reverts llvm/llvm-project#172914

>From 3d03f73453e70e3cdc4b036199864709e497650a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Valentin=20Clement=20=28=E3=83=90=E3=83=AC=E3=83=B3?=
 =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=B3=20=E3=82=AF=E3=83=AC=E3=83=A1?=
 =?UTF-8?q?=E3=83=B3=29?= <clementval at gmail.com>
Date: Tue, 30 Dec 2025 13:04:59 -0800
Subject: [PATCH] =?UTF-8?q?Revert=20"[flang][cuda]=20Emit=20error=20when?=
 =?UTF-8?q?=20a=20device=20actual=20argument=20is=20used=20in=20hos?=
 =?UTF-8?q?=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit 68a0b93b1f582ac40fac512b8064af0f8771fe39.
---
 flang/lib/Semantics/check-call.cpp           | 36 --------------------
 flang/lib/Semantics/resolve-names.cpp        | 12 -------
 flang/test/Lower/CUDA/cuda-data-transfer.cuf | 12 +------
 flang/test/Semantics/cuf23.cuf               |  7 ----
 4 files changed, 1 insertion(+), 66 deletions(-)

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



More information about the flang-commits mailing list