-
Notifications
You must be signed in to change notification settings - Fork 10.8k
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
[Flang][OpenMP] Avoid default none errors for seq loop indices in par… #76258
[Flang][OpenMP] Avoid default none errors for seq loop indices in par… #76258
Conversation
@kiranchandramohan what more is needed to make this PR ready? |
@llvm/pr-subscribers-flang-semantics @llvm/pr-subscribers-flang-openmp Author: Kiran Chandramohan (kiranchandramohan) Changes…allel Full diff: https://github.com/llvm/llvm-project/pull/76258.diff 2 Files Affected:
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index d7b13631ab4df0..b30b81cf90c951 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -1946,7 +1946,11 @@ void OmpAttributeVisitor::Post(const parser::Name &name) {
if (Symbol * found{currScope().FindSymbol(name.source)}) {
if (symbol != found) {
name.symbol = found; // adjust the symbol within region
- } else if (GetContext().defaultDSA == Symbol::Flag::OmpNone) {
+ } else if (GetContext().defaultDSA == Symbol::Flag::OmpNone &&
+ // Exclude indices of sequential loops that are privatised in
+ // the scope of the parallel region, and not in this scope.
+ // TODO: check whether this should be caught in IsObjectWithDSA
+ !symbol->test(Symbol::Flag::OmpPrivate)) {
context_.Say(name.source,
"The DEFAULT(NONE) clause requires that '%s' must be listed in "
"a data-sharing attribute clause"_err_en_US,
diff --git a/flang/test/Semantics/OpenMP/resolve05.f90 b/flang/test/Semantics/OpenMP/resolve05.f90
index 00f4860302183d..c4cebb48ac5c2b 100644
--- a/flang/test/Semantics/OpenMP/resolve05.f90
+++ b/flang/test/Semantics/OpenMP/resolve05.f90
@@ -17,7 +17,20 @@ subroutine default_none()
!$omp end parallel
end subroutine default_none
+! Test that indices of sequential loops are privatised and hence do not error
+! for DEFAULT(NONE)
+subroutine default_none_seq_loop
+ integer :: i
+
+ !$omp parallel do default(none)
+ do i = 1, 10
+ do j = 1, 20
+ enddo
+ enddo
+end subroutine
+
program mm
call default_none()
+ call default_none_seq_loop()
!TODO: private, firstprivate, shared
end
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, this does fix the bug. Thanks!
…allel