Skip to content

Commit

Permalink
Fix accsessing "PresentModifierLocs" array beyond its end. (#73579)
Browse files Browse the repository at this point in the history
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 beyond array end.

To fix this using OMPC_DEFAULTMAP_unknow instead OMPC_DEFAULTMAP_poiner.
  • Loading branch information
jyu2-git committed Nov 29, 2023
1 parent db96a9c commit 953d675
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 3 deletions.
6 changes: 3 additions & 3 deletions clang/lib/Sema/SemaOpenMP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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];
Expand Down
4 changes: 4 additions & 0 deletions clang/test/OpenMP/target_ast_print.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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) {
Expand Down

0 comments on commit 953d675

Please sign in to comment.