From: Mike Rice Date: Wed, 17 Jul 2019 15:18:45 +0000 (+0000) Subject: [OPENMP]Fix crash in LoopCounterRefChecker when MemberExpr is not Var or Field X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fdb5d4d9fc8ba1e881281107f8acedfb461c9ace;p=clang [OPENMP]Fix crash in LoopCounterRefChecker when MemberExpr is not Var or Field checkDecl is only valid for VarDecls or FieldDecls, since getCanonicalDecl expects only these. Prevent other Decl kinds (such as CXXMethodDecls and EnumConstantDecls) from entering and asserting. Differential Revision: https://reviews.llvm.org/D64842 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@366336 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaOpenMP.cpp b/lib/Sema/SemaOpenMP.cpp index 222d042b6d..bd68011c18 100644 --- a/lib/Sema/SemaOpenMP.cpp +++ b/lib/Sema/SemaOpenMP.cpp @@ -4992,7 +4992,8 @@ public: bool VisitMemberExpr(const MemberExpr *E) { if (isa(E->getBase()->IgnoreParens())) { const ValueDecl *VD = E->getMemberDecl(); - return checkDecl(E, VD); + if (isa(VD) || isa(VD)) + return checkDecl(E, VD); } return false; } diff --git a/test/OpenMP/for_loop_messages.cpp b/test/OpenMP/for_loop_messages.cpp index 7c2663f618..f5f6d0b703 100644 --- a/test/OpenMP/for_loop_messages.cpp +++ b/test/OpenMP/for_loop_messages.cpp @@ -626,6 +626,8 @@ template 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 ' * ii + ' kind of expression}} // expected-error@+3 {{expected loop invariant expression or ' * TC::ii + ' kind of expression}}