[flang-commits] [flang] 44d33f3 - [Flang][OpenMP] Do not consider procedure names for data-sharing

Kiran Chandramohan via flang-commits flang-commits at lists.llvm.org
Thu Feb 9 10:33:21 PST 2023


Author: Kiran Chandramohan
Date: 2023-02-09T18:33:01Z
New Revision: 44d33f3aa30cf6ac3e3790859735a643b08de91b

URL: https://github.com/llvm/llvm-project/commit/44d33f3aa30cf6ac3e3790859735a643b08de91b
DIFF: https://github.com/llvm/llvm-project/commit/44d33f3aa30cf6ac3e3790859735a643b08de91b.diff

LOG: [Flang][OpenMP] Do not consider procedure names for data-sharing

An incorrect error was issued for procedure names occuring in OpenMP
regions with default clause set to NONE. Fix is to ignore all cases
where names are various kinds of procedures.

Fixes issue https://github.com/flang-compiler/f18-llvm-project/issues/1350

Reviewed By: peixin

Differential Revision: https://reviews.llvm.org/D143384

Added: 
    flang/test/Semantics/OpenMP/omp-default-none.f90

Modified: 
    flang/lib/Semantics/resolve-directives.cpp

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index 98821c0ebdd2b..6c876ec69db60 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -1497,7 +1497,7 @@ void OmpAttributeVisitor::Post(const parser::OpenMPExecutableAllocate &x) {
 void OmpAttributeVisitor::Post(const parser::Name &name) {
   auto *symbol{name.symbol};
   if (symbol && !dirContext_.empty() && GetContext().withinConstruct) {
-    if (!symbol->owner().IsDerivedType() && !symbol->has<ProcEntityDetails>() &&
+    if (!symbol->owner().IsDerivedType() && !IsProcedure(*symbol) &&
         !IsObjectWithDSA(*symbol) && !IsNamedConstant(*symbol)) {
       // TODO: create a separate function to go through the rules for
       //       predetermined, explicitly determined, and implicitly

diff  --git a/flang/test/Semantics/OpenMP/omp-default-none.f90 b/flang/test/Semantics/OpenMP/omp-default-none.f90
new file mode 100644
index 0000000000000..d027f46f00584
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/omp-default-none.f90
@@ -0,0 +1,41 @@
+!RUN: %python %S/../test_errors.py %s %flang -fopenmp
+! Positive tests for default(none)
+subroutine sb2(x)
+  real :: x
+end subroutine
+
+subroutine sb1
+  integer :: i
+  real :: a(10), b(10), k
+  inc(x) = x + 1.0
+  abstract interface
+    function iface(a, b)
+      real, intent(in) :: a, b
+      real :: iface
+    end function
+  end interface
+  procedure(iface) :: compute
+  procedure(iface), pointer :: ptr => NULL()
+  ptr => fn2
+  !$omp parallel default(none) shared(a,b,k) private(i)
+  do i = 1, 10
+    b(i) = k + sin(a(i)) + inc(a(i)) + fn1(a(i)) + compute(a(i),k) + add(k, k)
+    call sb3(b(i))
+    call sb2(a(i))
+  end do
+  !$omp end parallel
+contains
+ function fn1(x)
+   real :: x, fn1
+   fn1 = x
+ end function
+ function fn2(x, y)
+   real, intent(in) :: x, y
+   real :: fn2
+   fn2 = x + y
+ end function
+ subroutine sb3(x)
+   real :: x
+   print *, x
+ end subroutine
+end subroutine


        


More information about the flang-commits mailing list