brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.2 KiB · 13a50c2 Raw
190 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=1 -msan-eager-checks -S -passes='module(msan)' 2>&1 | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK %s3; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=1 -S -passes='msan<eager-checks>' 2>&1 | FileCheck -allow-deprecated-dag-overlap --check-prefix=CHECK %s4 5target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"6target triple = "x86_64-unknown-linux-gnu"7 8define noundef i32 @NormalRet() nounwind uwtable sanitize_memory {9; CHECK-LABEL: @NormalRet(10; CHECK-NEXT:    call void @llvm.donothing()11; CHECK-NEXT:    ret i32 12312;13  ret i32 12314}15 16define i32 @PartialRet() nounwind uwtable sanitize_memory {17; CHECK-LABEL: @PartialRet(18; CHECK-NEXT:    call void @llvm.donothing()19; CHECK-NEXT:    store i32 0, ptr @__msan_retval_tls, align 820; CHECK-NEXT:    store i32 0, ptr @__msan_retval_origin_tls, align 421; CHECK-NEXT:    ret i32 12322;23  ret i32 12324}25 26define noundef i32 @LoadedRet() nounwind uwtable sanitize_memory {27; CHECK-LABEL: @LoadedRet(28; CHECK-NEXT:    call void @llvm.donothing()29; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 0 to ptr30; CHECK-NEXT:    [[O:%.*]] = load i32, ptr [[P]], align 431; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[P]] to i6432; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 8796093022208033; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr34; CHECK-NEXT:    [[TMP4:%.*]] = add i64 [[TMP2]], 1759218604441635; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr36; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP3]], align 437; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 438; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[_MSLD]], 039; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1:![0-9]+]]40; CHECK:       7:41; CHECK-NEXT:    call void @__msan_warning_with_origin_noreturn(i32 [[TMP6]]) #[[ATTR3:[0-9]+]]42; CHECK-NEXT:    unreachable43; CHECK:       8:44; CHECK-NEXT:    ret i32 [[O]]45;46  %p = inttoptr i64 0 to ptr47  %o = load i32, ptr %p48  ret i32 %o49}50 51 52define void @NormalArg(i32 noundef %a) nounwind uwtable sanitize_memory {53; CHECK-LABEL: @NormalArg(54; CHECK-NEXT:    call void @llvm.donothing()55; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 0 to ptr56; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[P]] to i6457; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 8796093022208058; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr59; CHECK-NEXT:    [[TMP4:%.*]] = add i64 [[TMP2]], 1759218604441660; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr61; CHECK-NEXT:    store i32 0, ptr [[TMP3]], align 462; CHECK-NEXT:    store i32 [[A:%.*]], ptr [[P]], align 463; CHECK-NEXT:    ret void64;65  %p = inttoptr i64 0 to ptr66  store i32 %a, ptr %p67  ret void68}69 70define void @NormalArgAfterNoUndef(i32 noundef %a, i32 %b) nounwind uwtable sanitize_memory {71; CHECK-LABEL: @NormalArgAfterNoUndef(72; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 873; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr getelementptr (i8, ptr @__msan_param_origin_tls, i64 8), align 474; CHECK-NEXT:    call void @llvm.donothing()75; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 0 to ptr76; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[P]] to i6477; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 8796093022208078; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr79; CHECK-NEXT:    [[TMP6:%.*]] = add i64 [[TMP4]], 1759218604441680; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr81; CHECK-NEXT:    store i32 [[TMP1]], ptr [[TMP5]], align 482; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP1]], 083; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]84; CHECK:       8:85; CHECK-NEXT:    store i32 [[TMP2]], ptr [[TMP7]], align 486; CHECK-NEXT:    br label [[TMP9]]87; CHECK:       9:88; CHECK-NEXT:    store i32 [[B:%.*]], ptr [[P]], align 489; CHECK-NEXT:    ret void90;91  %p = inttoptr i64 0 to ptr92  store i32 %b, ptr %p93  ret void94}95 96define void @PartialArg(i32 %a) nounwind uwtable sanitize_memory {97; CHECK-LABEL: @PartialArg(98; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @__msan_param_tls, align 899; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr @__msan_param_origin_tls, align 4100; CHECK-NEXT:    call void @llvm.donothing()101; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 0 to ptr102; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[P]] to i64103; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 87960930222080104; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr105; CHECK-NEXT:    [[TMP6:%.*]] = add i64 [[TMP4]], 17592186044416106; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr107; CHECK-NEXT:    store i32 [[TMP1]], ptr [[TMP5]], align 4108; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[TMP1]], 0109; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]110; CHECK:       8:111; CHECK-NEXT:    store i32 [[TMP2]], ptr [[TMP7]], align 4112; CHECK-NEXT:    br label [[TMP9]]113; CHECK:       9:114; CHECK-NEXT:    store i32 [[A:%.*]], ptr [[P]], align 4115; CHECK-NEXT:    ret void116;117  %p = inttoptr i64 0 to ptr118  store i32 %a, ptr %p119  ret void120}121 122define void @CallNormal() nounwind uwtable sanitize_memory {123; CHECK-LABEL: @CallNormal(124; CHECK-NEXT:    call void @llvm.donothing()125; CHECK-NEXT:    [[R:%.*]] = call i32 @NormalRet() #[[ATTR0:[0-9]+]]126; CHECK-NEXT:    call void @NormalArg(i32 [[R]]) #[[ATTR0]]127; CHECK-NEXT:    ret void128;129  %r = call i32 @NormalRet() nounwind uwtable sanitize_memory130  call void @NormalArg(i32 %r) nounwind uwtable sanitize_memory131  ret void132}133 134define void @CallNormalArgAfterNoUndef() nounwind uwtable sanitize_memory {135; CHECK-LABEL: @CallNormalArgAfterNoUndef(136; CHECK-NEXT:    call void @llvm.donothing()137; CHECK-NEXT:    [[R:%.*]] = call i32 @NormalRet() #[[ATTR0]]138; CHECK-NEXT:    store i32 0, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8139; CHECK-NEXT:    call void @NormalArgAfterNoUndef(i32 [[R]], i32 [[R]]) #[[ATTR0]]140; CHECK-NEXT:    ret void141;142  %r = call i32 @NormalRet() nounwind uwtable sanitize_memory143  call void @NormalArgAfterNoUndef(i32 %r, i32 %r) nounwind uwtable sanitize_memory144  ret void145}146 147define void @CallWithLoaded() nounwind uwtable sanitize_memory {148; CHECK-LABEL: @CallWithLoaded(149; CHECK-NEXT:    call void @llvm.donothing()150; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 0 to ptr151; CHECK-NEXT:    [[O:%.*]] = load i32, ptr [[P]], align 4152; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64153; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080154; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr155; CHECK-NEXT:    [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416156; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr157; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP3]], align 4158; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4159; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i32 [[_MSLD]], 0160; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]161; CHECK:       7:162; CHECK-NEXT:    call void @__msan_warning_with_origin_noreturn(i32 [[TMP6]]) #[[ATTR3]]163; CHECK-NEXT:    unreachable164; CHECK:       8:165; CHECK-NEXT:    call void @NormalArg(i32 [[O]]) #[[ATTR0]]166; CHECK-NEXT:    ret void167;168  %p = inttoptr i64 0 to ptr169  %o = load i32, ptr %p170  call void @NormalArg(i32 %o) nounwind uwtable sanitize_memory171  ret void172}173 174define void @CallPartial() nounwind uwtable sanitize_memory {175; CHECK-LABEL: @CallPartial(176; CHECK-NEXT:    call void @llvm.donothing()177; CHECK-NEXT:    store i32 0, ptr @__msan_retval_tls, align 8178; CHECK-NEXT:    [[R:%.*]] = call i32 @PartialRet() #[[ATTR0]]179; CHECK-NEXT:    [[_MSRET:%.*]] = load i32, ptr @__msan_retval_tls, align 8180; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr @__msan_retval_origin_tls, align 4181; CHECK-NEXT:    store i32 [[_MSRET]], ptr @__msan_param_tls, align 8182; CHECK-NEXT:    store i32 [[TMP1]], ptr @__msan_param_origin_tls, align 4183; CHECK-NEXT:    call void @PartialArg(i32 [[R]]) #[[ATTR0]]184; CHECK-NEXT:    ret void185;186  %r = call i32 @PartialRet() nounwind uwtable sanitize_memory187  call void @PartialArg(i32 %r) nounwind uwtable sanitize_memory188  ret void189}190