@@ -1707,21 +1707,20 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
1707
1707
}
1708
1708
1709
1709
bool FArgByVal = FArg.hasByValAttr ();
1710
- bool FArgNoUndef = FArg.hasAttribute (Attribute::NoUndef);
1711
- bool FArgEagerCheck = MS.EagerChecks && !FArgByVal && FArgNoUndef;
1712
- unsigned Size =
1713
- FArg.hasByValAttr ()
1714
- ? DL.getTypeAllocSize (FArg.getParamByValType ())
1715
- : DL.getTypeAllocSize (FArg.getType ());
1710
+ unsigned Size = FArgByVal
1711
+ ? DL.getTypeAllocSize (FArg.getParamByValType ())
1712
+ : DL.getTypeAllocSize (FArg.getType ());
1716
1713
1717
1714
if (A == &FArg) {
1718
1715
bool Overflow = ArgOffset + Size > kParamTLSSize ;
1716
+ bool FArgEagerCheck = MS.EagerChecks && !FArgByVal &&
1717
+ FArg.hasAttribute (Attribute::NoUndef);
1718
+
1719
1719
if (FArgEagerCheck) {
1720
1720
*ShadowPtr = getCleanShadow (V);
1721
1721
setOrigin (A, getCleanOrigin ());
1722
1722
break ;
1723
1723
} else if (FArgByVal) {
1724
- Value *Base = getShadowPtrForArgument (&FArg, EntryIRB, ArgOffset);
1725
1724
// ByVal pointer itself has clean shadow. We copy the actual
1726
1725
// argument shadow to the underlying memory.
1727
1726
// Figure out maximal valid memcpy alignment.
@@ -1738,6 +1737,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
1738
1737
CpShadowPtr, Constant::getNullValue (EntryIRB.getInt8Ty ()),
1739
1738
Size, ArgAlign);
1740
1739
} else {
1740
+ Value *Base = getShadowPtrForArgument (&FArg, EntryIRB, ArgOffset);
1741
1741
const Align CopyAlign = std::min (ArgAlign, kShadowTLSAlignment );
1742
1742
Value *Cpy = EntryIRB.CreateMemCpy (CpShadowPtr, CopyAlign, Base,
1743
1743
CopyAlign, Size);
@@ -1746,12 +1746,12 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
1746
1746
}
1747
1747
*ShadowPtr = getCleanShadow (V);
1748
1748
} else {
1749
- // Shadow over TLS
1750
- Value *Base = getShadowPtrForArgument (&FArg, EntryIRB, ArgOffset);
1751
1749
if (Overflow) {
1752
1750
// ParamTLS overflow.
1753
1751
*ShadowPtr = getCleanShadow (V);
1754
1752
} else {
1753
+ // Shadow over TLS
1754
+ Value *Base = getShadowPtrForArgument (&FArg, EntryIRB, ArgOffset);
1755
1755
*ShadowPtr = EntryIRB.CreateAlignedLoad (getShadowTy (&FArg), Base,
1756
1756
kShadowTLSAlignment );
1757
1757
}
0 commit comments