[clang] 4e159e4 - [clang] Fix OpenMP critical hint parameter check
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 7 17:06:23 PST 2022
Author: Peixin-Qiao
Date: 2022-03-08T09:04:31+08:00
New Revision: 4e159e4c7b975c4c091e175fde0a340ca643ccd3
URL: https://github.com/llvm/llvm-project/commit/4e159e4c7b975c4c091e175fde0a340ca643ccd3
DIFF: https://github.com/llvm/llvm-project/commit/4e159e4c7b975c4c091e175fde0a340ca643ccd3.diff
LOG: [clang] Fix OpenMP critical hint parameter check
The paramemter of hint clause in OpenMP critical hint should be
non-negative. The omp_lock_hint_none is 0 in omp.h.
Reviewed By: Alexey Bataev
Differential Revision: https://reviews.llvm.org/D121101
Added:
Modified:
clang/lib/Sema/SemaOpenMP.cpp
clang/test/OpenMP/critical_messages.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index c6236e622c078..2fd8707501652 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -21402,7 +21402,8 @@ OMPClause *Sema::ActOnOpenMPHintClause(Expr *Hint, SourceLocation StartLoc,
// OpenMP [2.13.2, critical construct, Description]
// ... where hint-expression is an integer constant expression that evaluates
// to a valid lock hint.
- ExprResult HintExpr = VerifyPositiveIntegerConstantInClause(Hint, OMPC_hint);
+ ExprResult HintExpr =
+ VerifyPositiveIntegerConstantInClause(Hint, OMPC_hint, false);
if (HintExpr.isInvalid())
return nullptr;
return new (Context)
diff --git a/clang/test/OpenMP/critical_messages.cpp b/clang/test/OpenMP/critical_messages.cpp
index 8536caf224e3f..9a7267cf27a8a 100644
--- a/clang/test/OpenMP/critical_messages.cpp
+++ b/clang/test/OpenMP/critical_messages.cpp
@@ -67,10 +67,14 @@ int tmain(int argc, char **argv) { // expected-note {{declared here}}
foo();
#pragma omp critical (name2) hint(argc) // expected-error {{integral constant expression}} expected-note 0+{{constant expression}}
foo();
- #pragma omp critical (name) hint(N) // expected-error {{argument to 'hint' clause must be a strictly positive integer value}} expected-error {{constructs with the same name must have a 'hint' clause with the same value}} expected-note {{'hint' clause with value '4'}}
+ #pragma omp critical (name) hint(N) // expected-error {{argument to 'hint' clause must be a non-negative integer value}} expected-error {{constructs with the same name must have a 'hint' clause with the same value}} expected-note {{'hint' clause with value '4'}}
foo();
#pragma omp critical hint(N) // expected-error {{the name of the construct must be specified in presence of 'hint' clause}}
foo();
+
+ const int omp_lock_hint_none = 0;
+ #pragma omp critical (name3) hint(omp_lock_hint_none)
+ foo();
return 0;
}
@@ -132,7 +136,7 @@ int main(int argc, char **argv) { // expected-note {{declared here}}
foo();
#pragma omp critical (name) hint(23) // expected-note {{previous 'hint' clause with value '23'}}
foo();
- #pragma omp critical hint(-5) // expected-error {{argument to 'hint' clause must be a strictly positive integer value}}
+ #pragma omp critical hint(-5) // expected-error {{argument to 'hint' clause must be a non-negative integer value}}
foo();
#pragma omp critical hint(1) // expected-error {{the name of the construct must be specified in presence of 'hint' clause}}
foo();
More information about the cfe-commits
mailing list