Skip to content

[flang][cuda] Check for use of host array in device context #119756

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 16, 2024

Conversation

clementval
Copy link
Contributor

Now that variables have implicit attribute, we can check for illegal use of module host variable in device context.

@llvmbot llvmbot added flang Flang issues not falling into any other category flang:semantics labels Dec 12, 2024
@llvmbot
Copy link
Member

llvmbot commented Dec 12, 2024

@llvm/pr-subscribers-flang-semantics

Author: Valentin Clement (バレンタイン クレメン) (clementval)

Changes

Now that variables have implicit attribute, we can check for illegal use of module host variable in device context.


Full diff: https://github.com/llvm/llvm-project/pull/119756.diff

2 Files Affected:

  • (modified) flang/lib/Semantics/check-cuda.cpp (+6-8)
  • (modified) flang/test/Semantics/cuf09.cuf (+8-1)
diff --git a/flang/lib/Semantics/check-cuda.cpp b/flang/lib/Semantics/check-cuda.cpp
index 79b7a26ef222f8..dd3472aad40bcb 100644
--- a/flang/lib/Semantics/check-cuda.cpp
+++ b/flang/lib/Semantics/check-cuda.cpp
@@ -340,7 +340,7 @@ template <bool IsCUFKernelDo> class DeviceContextChecker {
   void ErrorIfHostSymbol(const A &expr, parser::CharBlock source) {
     if (const Symbol * hostArray{FindHostArray{}(expr)}) {
       context_.Say(source,
-          "Host array '%s' cannot be present in CUF kernel"_err_en_US,
+          "Host array '%s' cannot be present in device context"_err_en_US,
           hostArray->name());
     }
   }
@@ -387,13 +387,11 @@ template <bool IsCUFKernelDo> class DeviceContextChecker {
               Check(x.value());
             },
             [&](const common::Indirection<parser::AssignmentStmt> &x) {
-              if (IsCUFKernelDo) {
-                const evaluate::Assignment *assign{
-                    semantics::GetAssignment(x.value())};
-                if (assign) {
-                  ErrorIfHostSymbol(assign->lhs, source);
-                  ErrorIfHostSymbol(assign->rhs, source);
-                }
+              const evaluate::Assignment *assign{
+                  semantics::GetAssignment(x.value())};
+              if (assign) {
+                ErrorIfHostSymbol(assign->lhs, source);
+                ErrorIfHostSymbol(assign->rhs, source);
               }
               if (auto msg{ActionStmtChecker<IsCUFKernelDo>::WhyNotOk(x)}) {
                 context_.Say(source, std::move(*msg));
diff --git a/flang/test/Semantics/cuf09.cuf b/flang/test/Semantics/cuf09.cuf
index 195ddac11d575f..c551ecbff2cc06 100644
--- a/flang/test/Semantics/cuf09.cuf
+++ b/flang/test/Semantics/cuf09.cuf
@@ -1,5 +1,6 @@
 ! RUN: %python %S/test_errors.py %s %flang_fc1
 module m
+ integer :: m(100)
  contains
   attributes(device) subroutine devsub
     !ERROR: Statement may not appear in device code
@@ -15,6 +16,12 @@ module m
     !WARNING: I/O statement might not be supported on device
     write(12,'(10F4.1)'), x
   end
+  attributes(global) subroutine hostglobal(a)
+    integer :: a(*)
+    i = threadIdx%x
+    !ERROR: Host array 'm' cannot be present in device context
+    if (i .le. N) a(i) = m(i)
+  end subroutine
 end
 
 program main
@@ -96,7 +103,7 @@ program main
   !$cuf kernel do (2) <<<*, *>>>
   do j = 1, 10
      do i = 1, 10
-        !ERROR: Host array 'b' cannot be present in CUF kernel
+        !ERROR: Host array 'b' cannot be present in device context
         a_d(i,j) = b(i,j)
      enddo
   enddo

@clementval
Copy link
Contributor Author

Ping

@clementval clementval merged commit 67ae944 into llvm:main Dec 16, 2024
8 checks passed
@clementval clementval deleted the cuf_host_array_in_module branch December 16, 2024 21:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
flang:semantics flang Flang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants