forked from OSchip/llvm-project
[NFC][msan] Declare some getShadow vars later
This commit is contained in:
parent
e68215c0c1
commit
36138d8252
|
@ -1707,21 +1707,20 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FArgByVal = FArg.hasByValAttr();
|
bool FArgByVal = FArg.hasByValAttr();
|
||||||
bool FArgNoUndef = FArg.hasAttribute(Attribute::NoUndef);
|
unsigned Size = FArgByVal
|
||||||
bool FArgEagerCheck = MS.EagerChecks && !FArgByVal && FArgNoUndef;
|
|
||||||
unsigned Size =
|
|
||||||
FArg.hasByValAttr()
|
|
||||||
? DL.getTypeAllocSize(FArg.getParamByValType())
|
? DL.getTypeAllocSize(FArg.getParamByValType())
|
||||||
: DL.getTypeAllocSize(FArg.getType());
|
: DL.getTypeAllocSize(FArg.getType());
|
||||||
|
|
||||||
if (A == &FArg) {
|
if (A == &FArg) {
|
||||||
bool Overflow = ArgOffset + Size > kParamTLSSize;
|
bool Overflow = ArgOffset + Size > kParamTLSSize;
|
||||||
|
bool FArgEagerCheck = MS.EagerChecks && !FArgByVal &&
|
||||||
|
FArg.hasAttribute(Attribute::NoUndef);
|
||||||
|
|
||||||
if (FArgEagerCheck) {
|
if (FArgEagerCheck) {
|
||||||
*ShadowPtr = getCleanShadow(V);
|
*ShadowPtr = getCleanShadow(V);
|
||||||
setOrigin(A, getCleanOrigin());
|
setOrigin(A, getCleanOrigin());
|
||||||
break;
|
break;
|
||||||
} else if (FArgByVal) {
|
} else if (FArgByVal) {
|
||||||
Value *Base = getShadowPtrForArgument(&FArg, EntryIRB, ArgOffset);
|
|
||||||
// ByVal pointer itself has clean shadow. We copy the actual
|
// ByVal pointer itself has clean shadow. We copy the actual
|
||||||
// argument shadow to the underlying memory.
|
// argument shadow to the underlying memory.
|
||||||
// Figure out maximal valid memcpy alignment.
|
// Figure out maximal valid memcpy alignment.
|
||||||
|
@ -1738,6 +1737,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||||
CpShadowPtr, Constant::getNullValue(EntryIRB.getInt8Ty()),
|
CpShadowPtr, Constant::getNullValue(EntryIRB.getInt8Ty()),
|
||||||
Size, ArgAlign);
|
Size, ArgAlign);
|
||||||
} else {
|
} else {
|
||||||
|
Value *Base = getShadowPtrForArgument(&FArg, EntryIRB, ArgOffset);
|
||||||
const Align CopyAlign = std::min(ArgAlign, kShadowTLSAlignment);
|
const Align CopyAlign = std::min(ArgAlign, kShadowTLSAlignment);
|
||||||
Value *Cpy = EntryIRB.CreateMemCpy(CpShadowPtr, CopyAlign, Base,
|
Value *Cpy = EntryIRB.CreateMemCpy(CpShadowPtr, CopyAlign, Base,
|
||||||
CopyAlign, Size);
|
CopyAlign, Size);
|
||||||
|
@ -1746,12 +1746,12 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||||
}
|
}
|
||||||
*ShadowPtr = getCleanShadow(V);
|
*ShadowPtr = getCleanShadow(V);
|
||||||
} else {
|
} else {
|
||||||
// Shadow over TLS
|
|
||||||
Value *Base = getShadowPtrForArgument(&FArg, EntryIRB, ArgOffset);
|
|
||||||
if (Overflow) {
|
if (Overflow) {
|
||||||
// ParamTLS overflow.
|
// ParamTLS overflow.
|
||||||
*ShadowPtr = getCleanShadow(V);
|
*ShadowPtr = getCleanShadow(V);
|
||||||
} else {
|
} else {
|
||||||
|
// Shadow over TLS
|
||||||
|
Value *Base = getShadowPtrForArgument(&FArg, EntryIRB, ArgOffset);
|
||||||
*ShadowPtr = EntryIRB.CreateAlignedLoad(getShadowTy(&FArg), Base,
|
*ShadowPtr = EntryIRB.CreateAlignedLoad(getShadowTy(&FArg), Base,
|
||||||
kShadowTLSAlignment);
|
kShadowTLSAlignment);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue