[clang] 3adc9ae - [OpenMP 5.0] Fix PR-45212: Shouldn't error out while using overloaded operator for map clause
via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 7 16:08:21 PDT 2020
Author: cchen
Date: 2020-08-07T18:07:48-05:00
New Revision: 3adc9aeb250cb9a9d4e5abf7ee5752e142ffe9b8
URL: https://github.com/llvm/llvm-project/commit/3adc9aeb250cb9a9d4e5abf7ee5752e142ffe9b8
DIFF: https://github.com/llvm/llvm-project/commit/3adc9aeb250cb9a9d4e5abf7ee5752e142ffe9b8.diff
LOG: [OpenMP 5.0] Fix PR-45212: Shouldn't error out while using overloaded operator for map clause
LValue map checker should handle CXXOperatorCallExpr
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D85563
Added:
Modified:
clang/lib/Sema/SemaOpenMP.cpp
clang/test/OpenMP/target_map_messages.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index aa5613e8ce46..a493f3114dc2 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -16955,6 +16955,11 @@ class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {
Components.emplace_back(CTE, nullptr);
return true;
}
+ bool VisitCXXOperatorCallExpr(CXXOperatorCallExpr *COCE) {
+ assert(!RelevantExpr && "RelevantExpr is expected to be nullptr");
+ Components.emplace_back(COCE, nullptr);
+ return true;
+ }
bool VisitStmt(Stmt *) {
emitErrorMsg();
return false;
diff --git a/clang/test/OpenMP/target_map_messages.cpp b/clang/test/OpenMP/target_map_messages.cpp
index 1d962f8f091f..7311f6acd823 100644
--- a/clang/test/OpenMP/target_map_messages.cpp
+++ b/clang/test/OpenMP/target_map_messages.cpp
@@ -499,6 +499,23 @@ S3 h;
typedef int from;
+struct dim {
+ double x, y;
+};
+
+template<typename T>
+class Array1D
+{
+ public:
+ unsigned n1;
+ unsigned size;
+ T * dptr;
+
+ inline T& operator() (unsigned i1) { return dptr[i1]; }
+
+ Array1D() {n1=0;size=0;dptr=nullptr;}
+};
+
template <typename T, int I> // expected-note {{declared here}}
T tmain(T argc) {
const T d = 5;
@@ -837,6 +854,16 @@ int main(int argc, char **argv) {
Arr[0] = 2; // lt50-error {{original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage}}
}
+ Array1D<dim> pos;
+
+#pragma omp target enter data map(to:pos)
+#pragma omp target enter data map(to:pos.dptr[0:pos.size])
+#pragma omp target teams distribute parallel for
+ for(int i=0; i<100; i++) {
+ pos(i).x = i;
+ pos(i).y = i+1;
+ }
+
return tmain<int, 3>(argc)+tmain<from, 4>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 3>' requested here}} expected-note {{in instantiation of function template specialization 'tmain<int, 4>' requested here}}
}
#endif
More information about the cfe-commits
mailing list