[flang-commits] [flang] [flang][OpenMP][Semantics] Modify a semantic check which was tightly checking list items in IS_DEVICE_PTR to be only dummy arguments. (PR #74370)

Raghu Maddhipatla via flang-commits flang-commits at lists.llvm.org
Mon Dec 4 13:11:03 PST 2023


https://github.com/raghavendhra created https://github.com/llvm/llvm-project/pull/74370

Modifying https://github.com/llvm/llvm-project/pull/71255

Changed semantic check to only check for, "Variable in IS_DEVICE_PTR clause must be a dummy argument that does not have the ALLOCATABLE, POINTER or VALUE attribute." Earlier there was an additional semantic check "Variable in IS_DEVICE_PTR clause must be a dummy argument" which might be incorrect.

>From f3ac7647a52b50d2679056b3d722c7de7afcad8b Mon Sep 17 00:00:00 2001
From: Raghu Maddhipatla <Raghu.Maddhipatla at amd.com>
Date: Mon, 4 Dec 2023 15:05:44 -0600
Subject: [PATCH] [flang][OpenMP][Semantics] Modify a semantic check which was
 tightly checking list items in IS_DEVICE_PTR to be only dummy arguments.

---
 flang/lib/Semantics/check-omp-structure.cpp | 7 ++-----
 flang/test/Semantics/OpenMP/target01.f90    | 1 -
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index 2f4eb9a854270..c2362d225130d 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -2994,11 +2994,8 @@ void OmpStructureChecker::Enter(const parser::OmpClause::IsDevicePtr &x) {
         context_.Say(itr->second->source,
             "Variable '%s' in IS_DEVICE_PTR clause must be of type C_PTR"_err_en_US,
             source.ToString());
-      } else if (!(IsDummy(*symbol))) {
-        context_.Say(itr->second->source,
-            "Variable '%s' in IS_DEVICE_PTR clause must be a dummy argument"_err_en_US,
-            source.ToString());
-      } else if (IsAllocatableOrPointer(*symbol) || IsValue(*symbol)) {
+      } else if (IsDummy(*symbol) &&
+          (IsAllocatableOrPointer(*symbol) || IsValue(*symbol))) {
         context_.Say(itr->second->source,
             "Variable '%s' in IS_DEVICE_PTR clause must be a dummy argument that does not have the ALLOCATABLE, POINTER or VALUE attribute."_err_en_US,
             source.ToString());
diff --git a/flang/test/Semantics/OpenMP/target01.f90 b/flang/test/Semantics/OpenMP/target01.f90
index 485fa1f2530c3..2ce9a1af7cc80 100644
--- a/flang/test/Semantics/OpenMP/target01.f90
+++ b/flang/test/Semantics/OpenMP/target01.f90
@@ -39,7 +39,6 @@ subroutine bar(b1, b2, b3)
   type(c_ptr), pointer :: b2
   type(c_ptr), value :: b3
 
-  !ERROR: Variable 'c' in IS_DEVICE_PTR clause must be a dummy argument
   !$omp target is_device_ptr(c)
     y = y + 1
   !$omp end target



More information about the flang-commits mailing list