[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