forked from OSchip/llvm-project
[OPENMP] Fix capturing of boolean variables in debug mode.
If the variables is boolean and we generating inner function with real types, the codegen may crash because of not loading boolean value from memory. llvm-svn: 316011
This commit is contained in:
parent
c596e9088f
commit
7ba57afd6e
|
@ -501,9 +501,10 @@ CodeGenFunction::GenerateOpenMPCapturedStmtFunction(const CapturedStmt &S) {
|
|||
llvm::Value *CallArg;
|
||||
auto I = LocalAddrs.find(Arg);
|
||||
if (I != LocalAddrs.end()) {
|
||||
LValue LV =
|
||||
WrapperCGF.MakeAddrLValue(I->second.second, Arg->getType(),
|
||||
AlignmentSource::Decl);
|
||||
LValue LV = WrapperCGF.MakeAddrLValue(
|
||||
I->second.second,
|
||||
I->second.first ? I->second.first->getType() : Arg->getType(),
|
||||
AlignmentSource::Decl);
|
||||
CallArg = WrapperCGF.EmitLoadOfScalar(LV, SourceLocation());
|
||||
} else {
|
||||
auto EI = VLASizes.find(Arg);
|
||||
|
@ -516,7 +517,7 @@ CodeGenFunction::GenerateOpenMPCapturedStmtFunction(const CapturedStmt &S) {
|
|||
CallArg = WrapperCGF.EmitLoadOfScalar(LV, SourceLocation());
|
||||
}
|
||||
}
|
||||
CallArgs.emplace_back(CallArg);
|
||||
CallArgs.emplace_back(WrapperCGF.EmitFromMemory(CallArg, Arg->getType()));
|
||||
}
|
||||
CGM.getOpenMPRuntime().emitOutlinedFunctionCall(WrapperCGF, S.getLocStart(),
|
||||
F, CallArgs);
|
||||
|
|
|
@ -11,7 +11,7 @@ int main() {
|
|||
int c[10][10][10];
|
||||
#pragma omp target parallel firstprivate(a, b) map(tofrom \
|
||||
: c) map(tofrom \
|
||||
: bb)
|
||||
: bb) if (a)
|
||||
{
|
||||
int &f = c[1][1][1];
|
||||
int &g = a;
|
||||
|
@ -54,7 +54,7 @@ int main() {
|
|||
return 0;
|
||||
}
|
||||
|
||||
// CHECK: define internal void @__omp_offloading{{[^(]+}}([10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8 addrspace(1)* noalias{{[^)]+}})
|
||||
// CHECK: define internal void @__omp_offloading{{[^(]+}}([10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8 addrspace(1)* noalias{{[^,]+}}, i1 {{[^)]+}})
|
||||
// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
|
||||
// CHECK: call void [[NONDEBUG_WRAPPER:.+]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]]* {{[^,]+}}, i64 {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8* {{[^)]+}})
|
||||
|
||||
|
|
Loading…
Reference in New Issue