[clang] Fix accsessing "PresentModifierLocs" array beyond its end. (PR #73579)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 27 14:33:04 PST 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: None (jyu2-git)
<details>
<summary>Changes</summary>
Currently PresentModifierLocs defined with size DefaultmapKindNum; where DefaultmapKindNum = OMPC_DEFAULTMAP_pointer + 1
Before 5.0 variable-category can not be omitted. For the test like \#pragma omp target map(tofrom: errors) defaultmap(present)
error would be mitted.
After 5.0 that is allowd.
When try to:
PresentModifierLocs[DMC->getDefaultmapKind()] =
DMC->getDefaultmapModifierLoc();
It is accessed beyound array end.
---
Full diff: https://github.com/llvm/llvm-project/pull/73579.diff
2 Files Affected:
- (modified) clang/lib/Sema/SemaOpenMP.cpp (+3-3)
- (modified) clang/test/OpenMP/target_ast_print.cpp (+4)
``````````diff
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 3a5f4b12ce29621..e400f248d15aa34 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -161,7 +161,7 @@ class DSAStackTy {
LoopControlVariablesMapTy LCVMap;
DefaultDataSharingAttributes DefaultAttr = DSA_unspecified;
SourceLocation DefaultAttrLoc;
- DefaultmapInfo DefaultmapMap[OMPC_DEFAULTMAP_unknown];
+ DefaultmapInfo DefaultmapMap[OMPC_DEFAULTMAP_unknown + 1];
OpenMPDirectiveKind Directive = OMPD_unknown;
/// GenericLoopDirective with bind clause is mapped to other directives,
/// like for, distribute and simd. Presently, set MappedDirective to
@@ -3689,7 +3689,7 @@ class DSAAttrChecker final : public StmtVisitor<DSAAttrChecker, void> {
bool ErrorFound = false;
bool TryCaptureCXXThisMembers = false;
CapturedStmt *CS = nullptr;
- const static unsigned DefaultmapKindNum = OMPC_DEFAULTMAP_pointer + 1;
+ const static unsigned DefaultmapKindNum = OMPC_DEFAULTMAP_unknown + 1;
llvm::SmallVector<Expr *, 4> ImplicitFirstprivate;
llvm::SmallVector<Expr *, 4> ImplicitPrivate;
llvm::SmallVector<Expr *, 4> ImplicitMap[DefaultmapKindNum][OMPC_MAP_delete];
@@ -6276,7 +6276,7 @@ StmtResult Sema::ActOnOpenMPExecutableDirective(
SmallVector<Expr *, 4> ImplicitPrivates(
DSAChecker.getImplicitPrivate().begin(),
DSAChecker.getImplicitPrivate().end());
- const unsigned DefaultmapKindNum = OMPC_DEFAULTMAP_pointer + 1;
+ const unsigned DefaultmapKindNum = OMPC_DEFAULTMAP_unknown + 1;
SmallVector<Expr *, 4> ImplicitMaps[DefaultmapKindNum][OMPC_MAP_delete];
SmallVector<OpenMPMapModifierKind, NumberOfOMPMapClauseModifiers>
ImplicitMapModifiers[DefaultmapKindNum];
diff --git a/clang/test/OpenMP/target_ast_print.cpp b/clang/test/OpenMP/target_ast_print.cpp
index d3daed053cc2ea5..45907e93321a824 100644
--- a/clang/test/OpenMP/target_ast_print.cpp
+++ b/clang/test/OpenMP/target_ast_print.cpp
@@ -1110,6 +1110,8 @@ T tmain(T argc, T *argv) {
foo();
#pragma omp target thread_limit(C)
foo();
+ #pragma omp target defaultmap(present)
+ foo();
return 0;
}
@@ -1123,6 +1125,8 @@ T tmain(T argc, T *argv) {
// OMP51-NEXT: foo()
// OMP51-NEXT: #pragma omp target thread_limit(C)
// OMP51-NEXT: foo()
+// OMP51-NEXT: #pragma omp target defaultmap(present)
+// OMP51-NEXT: foo()
// OMP51-LABEL: int main(int argc, char **argv) {
int main (int argc, char **argv) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/73579
More information about the cfe-commits
mailing list