75 lines · plain
1; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=1 -S -passes=msan 2>&1 | FileCheck -check-prefix=CHECK -check-prefix=CHECK-ORIGINS1 %s2; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=2 -S -passes=msan 2>&1 | FileCheck -check-prefix=CHECK -check-prefix=CHECK-ORIGINS2 %s3 4target 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"5target triple = "x86_64-unknown-linux-gnu"6 7 8; Check origin instrumentation of stores.9; Check that debug info for origin propagation code is set correctly.10 11@a8 = global i8 0, align 812@a4 = global i8 0, align 413@a2 = global i8 0, align 214@a1 = global i8 0, align 115 16; 8-aligned store => 8-aligned origin store, origin address is not realigned17define void @Store8(i8 %x) sanitize_memory {18entry:19 store i8 %x, ptr @a8, align 820 ret void21}22 23; CHECK-LABEL: @Store824; CHECK-ORIGINS1: [[ORIGIN:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls25; CHECK-ORIGINS2: [[ORIGIN0:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls26; CHECK-ORIGINS2: [[ORIGIN:%[01-9a-z]+]] = call i32 @__msan_chain_origin(i32 [[ORIGIN0]])27; CHECK: store i32 [[ORIGIN]], {{.*}}, align 828; CHECK: ret void29 30 31; 4-aligned store => 4-aligned origin store, origin address is not realigned32define void @Store4(i8 %x) sanitize_memory {33entry:34 store i8 %x, ptr @a4, align 435 ret void36}37 38; CHECK-LABEL: @Store439; CHECK-ORIGINS1: [[ORIGIN:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls40; CHECK-ORIGINS2: [[ORIGIN0:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls41; CHECK-ORIGINS2: [[ORIGIN:%[01-9a-z]+]] = call i32 @__msan_chain_origin(i32 [[ORIGIN0]])42; CHECK: store i32 [[ORIGIN]], {{.*}}, align 443; CHECK: ret void44 45 46; 2-aligned store => 4-aligned origin store, origin address is realigned47define void @Store2(i8 %x) sanitize_memory {48entry:49 store i8 %x, ptr @a2, align 250 ret void51}52 53; CHECK-LABEL: @Store254; CHECK-ORIGINS1: [[ORIGIN:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls55; CHECK-ORIGINS2: [[ORIGIN0:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls56; CHECK-ORIGINS2: [[ORIGIN:%[01-9a-z]+]] = call i32 @__msan_chain_origin(i32 [[ORIGIN0]])57; CHECK: store i32 [[ORIGIN]], {{.*}}, align 458; CHECK: ret void59 60 61; 1-aligned store => 4-aligned origin store, origin address is realigned62define void @Store1(i8 %x) sanitize_memory {63entry:64 store i8 %x, ptr @a1, align 165 ret void66}67 68; CHECK-LABEL: @Store169; CHECK-ORIGINS1: [[ORIGIN:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls70; CHECK-ORIGINS2: [[ORIGIN0:%[01-9a-z]+]] = load {{.*}} @__msan_param_origin_tls71; CHECK-ORIGINS2: [[ORIGIN:%[01-9a-z]+]] = call i32 @__msan_chain_origin(i32 [[ORIGIN0]])72; CHECK: store i32 [[ORIGIN]], {{.*}}, align 473 74; CHECK: ret void75