From: Alexey Bataev Date: Tue, 28 Apr 2015 13:20:05 +0000 (+0000) Subject: [OPENMP] Fix crash on loop control vars explicitly marked as private. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7e8c486a458649c5ac0c5b0ef534c2297cf02337;p=clang [OPENMP] Fix crash on loop control vars explicitly marked as private. It is allowed to mark loop control vars as private in 'private' or 'lastprivate' clause, so no need to assert here. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235985 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGStmtOpenMP.cpp b/lib/CodeGen/CGStmtOpenMP.cpp index e445e7668e..6a4b5ecaa3 100644 --- a/lib/CodeGen/CGStmtOpenMP.cpp +++ b/lib/CodeGen/CGStmtOpenMP.cpp @@ -578,15 +578,12 @@ static void EmitPrivateLoopCounters(CodeGenFunction &CGF, ArrayRef Counters) { for (auto *E : Counters) { auto VD = cast(cast(E)->getDecl()); - bool IsRegistered = LoopScope.addPrivate(VD, [&]() -> llvm::Value * { + (void)LoopScope.addPrivate(VD, [&]() -> llvm::Value *{ // Emit var without initialization. auto VarEmission = CGF.EmitAutoVarAlloca(*VD); CGF.EmitAutoVarCleanups(VarEmission); return VarEmission.getAllocatedAddress(); }); - assert(IsRegistered && "counter already registered as private"); - // Silence the warning about unused variable. - (void)IsRegistered; } } diff --git a/test/OpenMP/for_private_codegen.cpp b/test/OpenMP/for_private_codegen.cpp index e87473bf39..f4d18340c8 100644 --- a/test/OpenMP/for_private_codegen.cpp +++ b/test/OpenMP/for_private_codegen.cpp @@ -115,6 +115,12 @@ int main() { vec[i] = t_var; s_arr[i] = var; } + int i; +#pragma omp parallel +#pragma omp for private(i) + for (i = 0; i < 2; ++i) { + ; + } return tmain(); #endif }