[flang-commits] [flang] [flang][OpenMP] Do not emit an error for CRITICAL inside DEFAULT(NONE) (PR #216403)
via flang-commits
flang-commits at lists.llvm.org
Fri Aug 14 14:14:51 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-openmp
Author: Leandro Lupori (luporl)
<details>
<summary>Changes</summary>
Fixes #<!-- -->197394
---
Full diff: https://github.com/llvm/llvm-project/pull/216403.diff
3 Files Affected:
- (modified) flang/lib/Semantics/resolve-directives.cpp (+14-2)
- (modified) flang/test/Semantics/OpenMP/default-none.f90 (+12)
- (added) flang/test/Semantics/OpenMP/default-none02.f90 (+23)
``````````diff
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index 15bb84d7e486f..fa7d2b1957b91 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -2725,6 +2725,7 @@ void OmpAttributeVisitor::CreateImplicitSymbols(
dirContext.defaultDSA == Symbol::Flag::OmpNone) {
checkDefaultNone = true;
}
+ bool hasDefaultNoneError{false};
if (checkDefaultNone) {
auto defaultNoneError = [&](parser::CharBlock loc, const Symbol *sym) {
if (crayPtr) {
@@ -2736,6 +2737,7 @@ void OmpAttributeVisitor::CreateImplicitSymbols(
"The DEFAULT(NONE) clause requires that '%s' must be listed in a data-sharing attribute clause"_err_en_US,
sym->name());
}
+ hasDefaultNoneError = true;
};
if (dsa.test(Symbol::Flag::OmpPrivate) ||
crayPtrDSA.test(Symbol::Flag::OmpPrivate)) {
@@ -2779,14 +2781,18 @@ void OmpAttributeVisitor::CreateImplicitSymbols(
if (dirContext.defaultDSA == Symbol::Flag::OmpPrivate ||
dirContext.defaultDSA == Symbol::Flag::OmpFirstPrivate ||
- dirContext.defaultDSA == Symbol::Flag::OmpShared) {
+ dirContext.defaultDSA == Symbol::Flag::OmpShared ||
+ (dirContext.defaultDSA == Symbol::Flag::OmpNone &&
+ !hasDefaultNoneError)) {
// 1) default
// Allowed only with parallel, teams and task generating constructs.
if (!parallelDir && !taskGenDir && !teamsDir) {
return;
}
dsa = {dirContext.defaultDSA};
- makeSymbol(dsa);
+ if (dirContext.defaultDSA != Symbol::Flag::OmpNone) {
+ makeSymbol(dsa);
+ }
PRINT_IMPLICIT_RULE("1) default");
} else if (parallelDir) {
// 2) parallel -> shared
@@ -2828,6 +2834,12 @@ void OmpAttributeVisitor::CreateImplicitSymbols(
PRINT_IMPLICIT_RULE("7) taskgen: firstprivate");
}
}
+ if (hasDefaultNoneError &&
+ (dsa.none() || dsa == Symbol::Flags{Symbol::Flag::OmpNone})) {
+ // Set DSA to avoid reporting the same error multiple times.
+ dsa = {Symbol::Flag::OmpShared};
+ makeSymbol(dsa);
+ }
prevDSA = dsa;
}
}
diff --git a/flang/test/Semantics/OpenMP/default-none.f90 b/flang/test/Semantics/OpenMP/default-none.f90
index a56657ccee467..0eb6e22ebd7ab 100644
--- a/flang/test/Semantics/OpenMP/default-none.f90
+++ b/flang/test/Semantics/OpenMP/default-none.f90
@@ -73,3 +73,15 @@ subroutine internal()
!$omp end parallel
end subroutine internal
end subroutine host_assoc
+
+subroutine parallel_critical()
+ integer :: i
+ !$omp parallel default(none)
+ !$omp critical
+ !$omp parallel
+ do i = 1, 10
+ end do
+ !$omp end parallel
+ !$omp end critical
+ !$omp end parallel
+end subroutine
diff --git a/flang/test/Semantics/OpenMP/default-none02.f90 b/flang/test/Semantics/OpenMP/default-none02.f90
new file mode 100644
index 0000000000000..d2d2c876af65c
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/default-none02.f90
@@ -0,0 +1,23 @@
+!RUN: %python %S/../test_errors.py %s %flang -fopenmp
+! Negative tests for default(none)
+
+! Check that the same error is not displayed for every use of a symbol.
+subroutine repeated_error()
+ real :: B
+
+ !$omp parallel default(none)
+ ! ERROR: The DEFAULT(NONE) clause requires that 'b' must be listed in a data-sharing attribute clause
+ B = B + 1.0 + B
+ !$omp end parallel
+
+ !$omp parallel default(none)
+ !$omp critical
+ ! ERROR: The DEFAULT(NONE) clause requires that 'b' must be listed in a data-sharing attribute clause
+ B = B + 2.0 + B
+ !$omp parallel default(none)
+ ! ERROR: The DEFAULT(NONE) clause requires that 'b' must be listed in a data-sharing attribute clause
+ B = B + 3.0 + B
+ !$omp end parallel
+ !$omp end critical
+ !$omp end parallel
+end subroutine
``````````
</details>
https://github.com/llvm/llvm-project/pull/216403
More information about the flang-commits
mailing list