83 lines · plain
1; Test -sanitizer-coverage-experimental-tracing2 3; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc -S | FileCheck %s --check-prefix=CHECK_PC4; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -S | FileCheck %s --check-prefix=CHECK_PC_GUARD5; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -S -mtriple=x86_64-apple-macosx | FileCheck %s --check-prefix=CHECK_PC_GUARD_DARWIN6 7target 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"8target triple = "x86_64-unknown-linux-gnu"9define void @foo(ptr %a) sanitize_address {10entry:11 %tobool = icmp eq ptr %a, null12 br i1 %tobool, label %if.end, label %if.then13 14 if.then: ; preds = %entry15 store i32 0, ptr %a, align 416 br label %if.end17 18 if.end: ; preds = %entry, %if.then19 ret void20}21 22define available_externally void @external_bar(ptr %a) sanitize_address {23entry:24 ret void25}26 27declare void @longjmp(ptr) noreturn28 29; We expect three coverage points here for each BB.30define void @cond_longjmp(i1 %cond, ptr %jmp_buf) sanitize_address {31entry:32 br i1 %cond, label %lj, label %done33done:34 ret void35lj:36 call void @longjmp(ptr %jmp_buf)37 unreachable38}39 40 41; CHECK_PC-LABEL: define void @foo42; CHECK_PC: call void @__sanitizer_cov_trace_pc43; CHECK_PC: call void @__sanitizer_cov_trace_pc44; CHECK_PC: call void @__sanitizer_cov_trace_pc45; CHECK_PC-NOT: call void @__sanitizer_cov_trace_pc46; CHECK_PC: ret void47; CHECK_PC-NOT: call void @__sanitizer_cov_module_init48; CHECK_PC-LABEL: @cond_longjmp49; CHECK_PC: call void @__sanitizer_cov_trace_pc50; CHECK_PC: call void @__sanitizer_cov_trace_pc51; CHECK_PC: ret void52; CHECK_PC: call void @__sanitizer_cov_trace_pc53; CHECK_PC: call void @longjmp54; CHECK_PC: unreachable55 56; CHECK_PC_GUARD: section "__sancov_guards", comdat($foo), align 457; CHECK_PC_GUARD-LABEL: define void @foo58; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard59; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard60; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard61; CHECK_PC_GUARD-NOT: call void @__sanitizer_cov_trace_pc62; CHECK_PC_GUARD: ret void63; CHECK_PC_GUARD-LABEL: @external_bar64; CHECK_PC_GUARD-NOT: call void @__sanitizer_cov_trace_pc65; CHECK_PC_GUARD: ret void66; CHECK_PC_GUARD-LABEL: @cond_longjmp67; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard68; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard69; CHECK_PC_GUARD: ret void70; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard71; CHECK_PC_GUARD: call void @longjmp72; CHECK_PC_GUARD: unreachable73 74; CHECK_PC_GUARD: call void @__sanitizer_cov_trace_pc_guard_init(ptr @__start___sancov_guards, ptr @__stop___sancov_guards)75 76; CHECK_PC_GUARD_DARWIN-LABEL: define void @foo77; CHECK_PC_GUARD_DARWIN: call void @__sanitizer_cov_trace_pc_guard78; CHECK_PC_GUARD_DARWIN: call void @__sanitizer_cov_trace_pc_guard79; CHECK_PC_GUARD_DARWIN: call void @__sanitizer_cov_trace_pc_guard80; CHECK_PC_GUARD_DARWIN-NOT: call void @__sanitizer_cov_trace_pc81; CHECK_PC_GUARD_DARWIN: ret void82; CHECK_PC_GUARD_DARWIN: call void @__sanitizer_cov_trace_pc_guard_init(ptr @"\01section$start$__DATA$__sancov_guards", ptr @"\01section$end$__DATA$__sancov_guards")83