https://github.com/jyu2-git created https://github.com/llvm/llvm-project/pull/73579
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. >From 6fade23fc38bf9efd393e2011c8ff5ea6aa01610 Mon Sep 17 00:00:00 2001 From: Jennifer Yu <jennifer...@intel.com> Date: Mon, 27 Nov 2023 10:41:24 -0800 Subject: [PATCH] Fix accsessing "PresentModifierLocs" array beyond its end. 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. --- clang/lib/Sema/SemaOpenMP.cpp | 6 +++--- clang/test/OpenMP/target_ast_print.cpp | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) 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) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits