]> granicus.if.org Git - clang/commitdiff
[OPENMP] Fix crash on codegen for 'task' directive with no shared variables.
authorAlexey Bataev <a.bataev@hotmail.com>
Tue, 24 Nov 2015 13:01:44 +0000 (13:01 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Tue, 24 Nov 2015 13:01:44 +0000 (13:01 +0000)
If 'task' region does not have shared variables codegen could crash on calculation of size of list of shared variables.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@253977 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGOpenMPRuntime.cpp
test/OpenMP/task_private_codegen.cpp

index f9fe8d2ecdaff0fe47c5b335e2ed65d7bea3350d..9c484de2847c09cf1a8ab4d887a01238a00d6ca5 100644 (file)
@@ -2317,7 +2317,7 @@ void CGOpenMPRuntime::emitTaskCall(
                                      CGF.Builder.getInt32(/*C=*/0))
           : CGF.Builder.getInt32(Final.getInt() ? FinalFlag : 0);
   TaskFlags = CGF.Builder.CreateOr(TaskFlags, CGF.Builder.getInt32(Flags));
-  auto *SharedsSize = getTypeSize(CGF, SharedsTy);
+  auto *SharedsSize = CGM.getSize(C.getTypeSizeInChars(SharedsTy));
   llvm::Value *AllocArgs[] = {emitUpdateLocation(CGF, Loc),
                               getThreadID(CGF, Loc), TaskFlags,
                               KmpTaskTWithPrivatesTySize, SharedsSize,
index f5224730d1c0c81ff85ba3d24ee9d81eb8a782b3..1455fd11a91d9642f1071319d8c448ea5e45cb7d 100644 (file)
@@ -138,6 +138,8 @@ int main() {
     s_arr[0] = var;
     sivar = 8;
   }
+#pragma omp task
+  g+=1;
   return tmain<int>();
 #endif
 }
@@ -188,6 +190,7 @@ int main() {
 
 // Start task.
 // CHECK: call i32 @__kmpc_omp_task([[LOC]], i32 [[GTID]], i8* [[RES]])
+// CHECK: call i32 @__kmpc_omp_task([[LOC]], i32 [[GTID]], i8*
 
 // CHECK: = call i{{.+}} [[TMAIN_INT:@.+]]()