[flang-commits] [flang] [flang][OpenMP] Fix the attribute setting for OmpCommonBlock (PR #73676)
via flang-commits
flang-commits at lists.llvm.org
Tue Nov 28 09:48:43 PST 2023
https://github.com/shraiysh created https://github.com/llvm/llvm-project/pull/73676
This patch sets the `OmpCommonBlock` attribute everytime a common block object is resolved in openmp context. Also, removed the call to `CheckMultipleAppearances(.., OmpCommonBlock)` because that is simply not required - we need to check multiple apprearances for the directive or clause related flag and not for the the common block flag.
>From c1efcefc77eef60ec1d9998560a0dcd09797e2b1 Mon Sep 17 00:00:00 2001
From: Shraiysh Vaishay <shraiysh.vaishay at amd.com>
Date: Tue, 28 Nov 2023 11:44:30 -0600
Subject: [PATCH] [flang] Fix the attribute setting for OmpCommonBlock
This patch sets the `OmpCommonBlock` attribute everytime a common block
object is resolved in openmp context. Also, removed the call to
`CheckMultipleAppearances(.., OmpCommonBlock)` because that is simply
not required - we need to check multiple apprearances for the directive
or clause related flag and not for the the common block flag.
---
flang/lib/Semantics/resolve-directives.cpp | 20 +++++++++----------
flang/test/Semantics/OpenMP/common-block.f90 | 2 +-
.../OpenMP/declare-target-common-block.f90 | 2 +-
flang/test/Semantics/OpenMP/symbol01.f90 | 2 +-
4 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index da6c865ad56a3b1..93eac44c25e3f77 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -1989,16 +1989,15 @@ Symbol *OmpAttributeVisitor::ResolveOmpCommonBlockName(
return nullptr;
}
// First check if the Common Block is declared in the current scope
- if (auto *cur{GetContext().scope.FindCommonBlock(name->source)}) {
- name->symbol = cur;
- return cur;
- }
+ Symbol *sym = GetContext().scope.FindCommonBlock(name->source);
// Then check parent scope
- if (auto *prev{GetContext().scope.parent().FindCommonBlock(name->source)}) {
- name->symbol = prev;
- return prev;
- }
- return nullptr;
+ if (!sym)
+ sym = GetContext().scope.parent().FindCommonBlock(name->source);
+ if (!sym)
+ return nullptr;
+ sym->set(Symbol::Flag::OmpCommonBlock);
+ name->symbol = sym;
+ return sym;
}
// Use this function over ResolveOmpName when an omp object's scope needs
@@ -2152,8 +2151,7 @@ void OmpAttributeVisitor::ResolveOmpObject(
[&](const parser::Name &name) { // common block
if (auto *symbol{ResolveOmpCommonBlockName(&name)}) {
if (!dataCopyingAttributeFlags.test(ompFlag)) {
- CheckMultipleAppearances(
- name, *symbol, Symbol::Flag::OmpCommonBlock);
+ CheckMultipleAppearances(name, *symbol, ompFlag);
}
// 2.15.3 When a named common block appears in a list, it has the
// same meaning as if every explicit member of the common block
diff --git a/flang/test/Semantics/OpenMP/common-block.f90 b/flang/test/Semantics/OpenMP/common-block.f90
index e1ddd120da857b5..63b25e86d05f9be 100644
--- a/flang/test/Semantics/OpenMP/common-block.f90
+++ b/flang/test/Semantics/OpenMP/common-block.f90
@@ -4,7 +4,7 @@ program main
!CHECK: a size=4 offset=0: ObjectEntity type: REAL(4)
!CHECK: b size=8 offset=4: ObjectEntity type: INTEGER(4) shape: 1_8:2_8
!CHECK: c size=4 offset=12: ObjectEntity type: REAL(4)
- !CHECK: blk size=16 offset=0: CommonBlockDetails alignment=4: a b c
+ !CHECK: blk (OmpCommonBlock) size=16 offset=0: CommonBlockDetails alignment=4: a b c
real :: a, c
integer :: b(2)
common /blk/ a, b, c
diff --git a/flang/test/Semantics/OpenMP/declare-target-common-block.f90 b/flang/test/Semantics/OpenMP/declare-target-common-block.f90
index 33a093a03a22763..f8c7fd6ac7f2698 100644
--- a/flang/test/Semantics/OpenMP/declare-target-common-block.f90
+++ b/flang/test/Semantics/OpenMP/declare-target-common-block.f90
@@ -3,7 +3,7 @@
PROGRAM main
!CHECK: one (OmpDeclareTarget) size=4 offset=0: ObjectEntity type: REAL(4)
!CHECK: two (OmpDeclareTarget) size=4 offset=4: ObjectEntity type: REAL(4)
- !CHECK: numbers size=8 offset=0: CommonBlockDetails alignment=4: one two
+ !CHECK: numbers (OmpCommonBlock) size=8 offset=0: CommonBlockDetails alignment=4: one two
REAL :: one, two
COMMON /numbers/ one, two
!$omp declare target(/numbers/)
diff --git a/flang/test/Semantics/OpenMP/symbol01.f90 b/flang/test/Semantics/OpenMP/symbol01.f90
index 0b435a9ab9850b3..98d8bddbaf2fed1 100644
--- a/flang/test/Semantics/OpenMP/symbol01.f90
+++ b/flang/test/Semantics/OpenMP/symbol01.f90
@@ -20,7 +20,7 @@ end module md
program mm
!REF: /md
use :: md
- !DEF: /mm/c CommonBlockDetails
+ !DEF: /mm/c (OmpCommonBlock) CommonBlockDetails
!DEF: /mm/x ObjectEntity REAL(4)
!DEF: /mm/y ObjectEntity REAL(4)
common /c/x, y
More information about the flang-commits
mailing list