r235985 - [OPENMP] Fix crash on loop control vars explicitly marked as private.

Alexey Bataev a.bataev at hotmail.com
Tue Apr 28 06:20:05 PDT 2015


Author: abataev
Date: Tue Apr 28 08:20:05 2015
New Revision: 235985

URL: http://llvm.org/viewvc/llvm-project?rev=235985&view=rev
Log:
[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.

Modified:
    cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
    cfe/trunk/test/OpenMP/for_private_codegen.cpp

Modified: cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp?rev=235985&r1=235984&r2=235985&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp Tue Apr 28 08:20:05 2015
@@ -578,15 +578,12 @@ static void EmitPrivateLoopCounters(Code
                                     ArrayRef<Expr *> Counters) {
   for (auto *E : Counters) {
     auto VD = cast<VarDecl>(cast<DeclRefExpr>(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;
   }
 }
 

Modified: cfe/trunk/test/OpenMP/for_private_codegen.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/for_private_codegen.cpp?rev=235985&r1=235984&r2=235985&view=diff
==============================================================================
--- cfe/trunk/test/OpenMP/for_private_codegen.cpp (original)
+++ cfe/trunk/test/OpenMP/for_private_codegen.cpp Tue Apr 28 08:20:05 2015
@@ -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<int>();
 #endif
 }





More information about the cfe-commits mailing list