[OPENMP]Fix PR37283: Assertion failure on openmp task with by reference
array. If the firstprivate variable is a reference, we may incorrectly classify the kind of the private copy. Use the type of the private copy instead of the original shared variable. llvm-svn: 356098
This commit is contained in:
parent
f653e56a67
commit
ab41ea6282
|
@ -4705,7 +4705,7 @@ static void emitPrivatesInit(CodeGenFunction &CGF,
|
|||
// Check if the variable is the target-based BasePointersArray,
|
||||
// PointersArray or SizesArray.
|
||||
LValue SharedRefLValue;
|
||||
QualType Type = OriginalVD->getType();
|
||||
QualType Type = PrivateLValue.getType();
|
||||
const FieldDecl *SharedField = CapturesInfo.lookup(OriginalVD);
|
||||
if (IsTargetTask && !SharedField) {
|
||||
assert(isa<ImplicitParamDecl>(OriginalVD) &&
|
||||
|
|
|
@ -473,12 +473,13 @@ struct St {
|
|||
~St() {}
|
||||
};
|
||||
|
||||
void array_func(int n, float a[n], St s[2]) {
|
||||
void array_func(int n, float a[n], St s[2], int(& p)[1]) {
|
||||
// ARRAY: call i8* @__kmpc_omp_task_alloc(
|
||||
// ARRAY: call i32 @__kmpc_omp_task(
|
||||
// ARRAY: store float** %{{.+}}, float*** %{{.+}},
|
||||
// ARRAY: store %struct.St** %{{.+}}, %struct.St*** %{{.+}},
|
||||
#pragma omp task firstprivate(a, s)
|
||||
// ARRAY: store [1 x i32]* %{{.+}}, [1 x i32]** %{{.+}},
|
||||
#pragma omp task firstprivate(a, s, p)
|
||||
;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue