summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Sema/SemaOpenMP.cpp3
-rw-r--r--clang/test/OpenMP/for_loop_messages.cpp8
2 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 222d042b6da..bd68011c18b 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -4992,7 +4992,8 @@ public:
bool VisitMemberExpr(const MemberExpr *E) {
if (isa<CXXThisExpr>(E->getBase()->IgnoreParens())) {
const ValueDecl *VD = E->getMemberDecl();
- return checkDecl(E, VD);
+ if (isa<VarDecl>(VD) || isa<FieldDecl>(VD))
+ return checkDecl(E, VD);
}
return false;
}
diff --git a/clang/test/OpenMP/for_loop_messages.cpp b/clang/test/OpenMP/for_loop_messages.cpp
index 7c2663f6181..f5f6d0b7031 100644
--- a/clang/test/OpenMP/for_loop_messages.cpp
+++ b/clang/test/OpenMP/for_loop_messages.cpp
@@ -626,6 +626,8 @@ template <typename IT, int ST>
class TC {
int ii, iii, kk;
public:
+ enum { myconstant = 42 };
+ int ub();
int dotest_lt(IT begin, IT end) {
#pragma omp parallel
// expected-error@+3 3 {{the loop initializer expression depends on the current loop control variable}}
@@ -634,6 +636,12 @@ public:
for (ii = ii * 10 + 25; ii < ii / ii - 23; ii += 1)
;
+// Check that member function calls and enum constants in the condition is
+// handled.
+#pragma omp for
+ for (ii = 0; ii < ub() + this->myconstant; ii += 1) // expected-no-error
+ ;
+
#pragma omp parallel
// expected-error@+4 2 {{expected loop invariant expression or '<invariant1> * ii + <invariant2>' kind of expression}}
// expected-error@+3 {{expected loop invariant expression or '<invariant1> * TC::ii + <invariant2>' kind of expression}}
OpenPOWER on IntegriCloud