Skip to content

Commit fbb2d93

Browse files
authored
[msan][x86] Fix shadow for FP80 or long double (#72706)
FP80 is passed using stack.
1 parent a3f17ba commit fbb2d93

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4748,6 +4748,8 @@ struct VarArgAMD64Helper : public VarArgHelperBase {
47484748
ArgKind classifyArgument(Value *arg) {
47494749
// A very rough approximation of X86_64 argument classification rules.
47504750
Type *T = arg->getType();
4751+
if (T->isX86_FP80Ty())
4752+
return AK_Memory;
47514753
if (T->isFPOrFPVectorTy() || T->isX86_MMXTy())
47524754
return AK_FloatingPoint;
47534755
if (T->isIntegerTy() && T->getPrimitiveSizeInBits() <= 64)

llvm/test/Instrumentation/MemorySanitizer/X86/vararg_shadow.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ define linkonce_odr dso_local void @_Z4testIeEvT_(x86_fp80 noundef %arg) sanitiz
205205
; CHECK-NEXT: store i80 [[_MSLD]], ptr @__msan_param_tls, align 8
206206
; CHECK-NEXT: store i32 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
207207
; CHECK-NEXT: store i80 [[_MSLD]], ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 24) to ptr), align 8
208-
; CHECK-NEXT: store i80 [[_MSLD]], ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_va_arg_tls to i64), i64 64) to ptr), align 8
209-
; CHECK-NEXT: store i64 0, ptr @__msan_va_arg_overflow_size_tls, align 8
208+
; CHECK-NEXT: store i80 [[_MSLD]], ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_va_arg_tls to i64), i64 176) to ptr), align 8
209+
; CHECK-NEXT: store i64 16, ptr @__msan_va_arg_overflow_size_tls, align 8
210210
; CHECK-NEXT: call void (x86_fp80, i32, ...) @_Z5test2IeEvT_iz(x86_fp80 noundef [[TMP7]], i32 noundef 1, x86_fp80 noundef [[TMP7]])
211211
; CHECK-NEXT: ret void
212212
;

0 commit comments

Comments
 (0)