[flang-commits] [flang] [flang][cuda] Restrict implicit use to non-cuda subprogram (PR #208808)

Valentin Clement バレンタイン クレメン via flang-commits flang-commits at lists.llvm.org
Fri Jul 10 11:51:51 PDT 2026


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

None

>From 40636d42b4e28a898a60ae1acca3680ff9bc5d40 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Fri, 10 Jul 2026 11:51:12 -0700
Subject: [PATCH] [flang][cuda] Restrict implicit use to non-cuda subprogram

---
 flang/lib/Semantics/resolve-names.cpp         | 11 +++++++++++
 flang/test/Driver/bbc-implicit-use-module.f90 | 18 ++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 5a92cfd738ef4..996c05d0e193b 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -3923,6 +3923,17 @@ void ModuleVisitor::AddImplicitUseModules() {
   if (InModuleFile() || currScope().kind() != Scope::Kind::Subprogram) {
     return;
   }
+  if (const Symbol *symbol{currScope().symbol()}) {
+    if (const auto *details{symbol->detailsIf<SubprogramDetails>()}) {
+      if (auto attrs{details->cudaSubprogramAttrs()}) {
+        if (*attrs == common::CUDASubprogramAttrs::Device ||
+            *attrs == common::CUDASubprogramAttrs::Global ||
+            *attrs == common::CUDASubprogramAttrs::Grid_Global) {
+          return;
+        }
+      }
+    }
+  }
   for (const std::string &module : context().implicitUseModules()) {
     if (module.empty()) {
       continue;
diff --git a/flang/test/Driver/bbc-implicit-use-module.f90 b/flang/test/Driver/bbc-implicit-use-module.f90
index c7c1af9b64231..86ece3d3a78a3 100644
--- a/flang/test/Driver/bbc-implicit-use-module.f90
+++ b/flang/test/Driver/bbc-implicit-use-module.f90
@@ -5,6 +5,8 @@
 ! RUN: bbc -module %t/self -implicit-use-module implicit_mod %t/implicit_mod.f90 -o /dev/null
 ! RUN: bbc -module %t %t/implicit_mod.f90 -o /dev/null
 ! RUN: not bbc -emit-hlfir -I %t -implicit-use-module implicit_mod %t/use_in_module.f90 -o - 2>&1 | FileCheck %s --check-prefix=MODULE-SCOPE
+! RUN: not bbc -emit-hlfir -fcuda -I %t -implicit-use-module implicit_mod %t/use_in_cuda_device.cuf -o - 2>&1 | FileCheck %s --check-prefix=CUDA-DEVICE
+! RUN: not bbc -emit-hlfir -fcuda -I %t -implicit-use-module implicit_mod %t/use_in_cuda_global.cuf -o - 2>&1 | FileCheck %s --check-prefix=CUDA-GLOBAL
 ! RUN: bbc -emit-hlfir -fopenacc -I %t -implicit-use-module implicit_mod %t/use_implicit.f90 -o - | FileCheck %s
 
 !--- implicit_mod.f90
@@ -34,7 +36,23 @@ module use_in_module
   integer :: x = module_value
 end module
 
+!--- use_in_cuda_device.cuf
+attributes(device) subroutine use_in_cuda_device
+  implicit none
+  integer :: x
+  x = module_value
+end subroutine
+
+!--- use_in_cuda_global.cuf
+attributes(global) subroutine use_in_cuda_global
+  implicit none
+  integer :: x
+  x = module_value
+end subroutine
+
 ! MODULE-SCOPE: No explicit type declared for 'module_value'
+! CUDA-DEVICE: No explicit type declared for 'module_value'
+! CUDA-GLOBAL: No explicit type declared for 'module_value'
 
 ! CHECK-LABEL: func.func @_QPuse_implicit()
 ! CHECK-DAG: fir.address_of(@_QMimplicit_modEmodule_value) : !fir.ref<i32>



More information about the flang-commits mailing list