]> granicus.if.org Git - clang/commitdiff
[OPENMP] Fix crash on reductions codegen for short circuit reduction operations.
authorAlexey Bataev <a.bataev@hotmail.com>
Wed, 29 Apr 2015 05:21:03 +0000 (05:21 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Wed, 29 Apr 2015 05:21:03 +0000 (05:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236084 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGAtomic.cpp
test/OpenMP/for_reduction_codegen.cpp

index 2de9cb268936175085b8a170b0ef6bb1662cfc87..edcc09df9d4c2db85c7b809f9008153d338dc10b 100644 (file)
@@ -1502,7 +1502,7 @@ void CodeGenFunction::EmitAtomicStore(RValue rvalue, LValue dest,
       atomics.getAtomicType(), SourceLocation()));
   // Try to write new value using cmpxchg operation
   auto Pair = atomics.EmitAtomicCompareExchange(OriginalRValue, NewRValue, AO);
-  PHI->addIncoming(Pair.first.getScalarVal(), ContBB);
+  PHI->addIncoming(Pair.first.getScalarVal(), Builder.GetInsertBlock());
   Builder.CreateCondBr(Pair.second, ExitBB, ContBB);
   EmitBlock(ExitBB, /*IsFinished=*/true);
 }
@@ -1592,7 +1592,7 @@ void CodeGenFunction::EmitAtomicUpdate(
   auto Pair = Atomics.EmitAtomicCompareExchange(OriginalRValue, NewRVal, AO);
   OldVal = IsScalar ? Pair.first.getScalarVal()
                     : Atomics.convertRValueToInt(Pair.first);
-  PHI->addIncoming(OldVal, ContBB);
+  PHI->addIncoming(OldVal, Builder.GetInsertBlock());
   Builder.CreateCondBr(Pair.second, ExitBB, ContBB);
   EmitBlock(ExitBB, /*IsFinished=*/true);
 }
index c7a8a6bc510b3aba8c53852a9ffd2fd553802d3c..c26961bf71f5e928ead7b95d053ac1df6eadcad6 100644 (file)
@@ -42,6 +42,12 @@ T tmain() {
     vec[i] = t_var;
     s_arr[i] = var;
   }
+#pragma omp parallel
+#pragma omp for reduction(&& : t_var)
+  for (int i = 0; i < 2; ++i) {
+    vec[i] = t_var;
+    s_arr[i] = var;
+  }
   return T();
 }