Sorry for the delay. Merged in r244090. Cheers, Hans
On Tue, Aug 4, 2015 at 3:05 AM, Bataev, Alexey <a.bat...@hotmail.com> wrote: > Hans, > This patch fixes crash in clang. Could you backport it to 3.7 branch? > > Best regards, > Alexey Bataev > ============= > Software Engineer > Intel Compiler Team > > > 04.08.2015 11:10, Alexey Bataev пишет: > >> Author: abataev >> Date: Tue Aug 4 03:10:48 2015 >> New Revision: 243964 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=243964&view=rev >> Log: >> [OPENMP] Fix compiler crash during data-sharing attributes analysis. >> >> If a global variable is marked as private in OpenMP construct and then is >> used in of the private clauses of the same construct, it might cause >> compiler crash because of incorrect capturing. >> >> Modified: >> cfe/trunk/lib/Sema/SemaOpenMP.cpp >> cfe/trunk/test/OpenMP/simd_linear_messages.cpp >> >> Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=243964&r1=243963&r2=243964&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Tue Aug 4 03:10:48 2015 >> @@ -657,7 +657,9 @@ void Sema::InitDataSharingAttributesStac >> bool Sema::IsOpenMPCapturedVar(VarDecl *VD) { >> assert(LangOpts.OpenMP && "OpenMP is not allowed"); >> VD = VD->getCanonicalDecl(); >> - if (DSAStack->getCurrentDirective() != OMPD_unknown) { >> + if (DSAStack->getCurrentDirective() != OMPD_unknown && >> + (!DSAStack->isClauseParsingMode() || >> + DSAStack->getParentDirective() != OMPD_unknown)) { >> if (DSAStack->isLoopControlVariable(VD) || >> (VD->hasLocalStorage() && >> isParallelOrTaskRegion(DSAStack->getCurrentDirective())) || >> >> Modified: cfe/trunk/test/OpenMP/simd_linear_messages.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/simd_linear_messages.cpp?rev=243964&r1=243963&r2=243964&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/OpenMP/simd_linear_messages.cpp (original) >> +++ cfe/trunk/test/OpenMP/simd_linear_messages.cpp Tue Aug 4 03:10:48 >> 2015 >> @@ -156,6 +156,7 @@ namespace C { >> using A::x; >> } >> +int f; >> int main(int argc, char **argv) { >> double darr[100]; >> // expected-note@+1 {{in instantiation of function template >> specialization 'test_template<-4, double, int>' requested here}} >> @@ -167,6 +168,8 @@ int main(int argc, char **argv) { >> S5 g(5); // expected-note {{'g' defined here}} >> int i; >> int &j = i; // expected-note {{'j' defined here}} >> + #pragma omp simd linear(f) linear(f) // expected-error {{linear >> variable cannot be linear}} expected-note {{defined as linear}} >> + for (int k = 0; k < argc; ++k) ++k; >> #pragma omp simd linear // expected-error {{expected '(' after >> 'linear'}} >> for (int k = 0; k < argc; ++k) ++k; >> #pragma omp simd linear ( // expected-error {{expected expression}} >> expected-error {{expected ')'}} expected-note {{to match this '('}} >> >> >> > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits