[NFC][msan] Declare some getShadow vars later

This commit is contained in:
Vitaly Buka 2022-01-13 15:53:57 -08:00
parent e68215c0c1
commit 36138d8252
1 changed files with 9 additions and 9 deletions

View File

@ -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);
} }