173 lines · c
1// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=0 %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-02// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=edge -fsanitize-coverage=0 %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-03// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-04// CHECK-SANITIZE-COVERAGE-0-NOT: fsanitize-coverage-type5// CHECK-SANITIZE-COVERAGE-0: -fsanitize=address6 7// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC8// RUN: %clang --target=x86_64-linux-gnu -fsanitize=kernel-address -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC9// RUN: %clang --target=x86_64-linux-gnu -fsanitize=hwaddress -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC10// RUN: %clang --target=x86_64-linux-gnu -fsanitize=kernel-hwaddress -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC11// RUN: %clang --target=x86_64-linux-gnu -fsanitize=memory -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC12// RUN: %clang --target=x86_64-linux-gnu -fsanitize=kernel-memory -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC13// RUN: %clang --target=x86_64-linux-gnu -fsanitize=leak -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC14// RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC15// RUN: %clang --target=x86_64-linux-gnu -fsanitize=bounds -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC16// RUN: %clang --target=x86_64-linux-gnu -fsanitize=bool -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC17// RUN: %clang --target=x86_64-linux-gnu -fsanitize=dataflow -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC18// RUN: %clang --target=x86_64-linux-gnu -fsanitize=thread -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC19// RUN: %clang --target=x86_64-linux-gnu -fsanitize=kcfi -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC20// RUN: %clang --target=x86_64-linux-gnu -fsanitize=alloc-token -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC21// RUN: %clang --target=x86_64-linux-gnu -fsanitize=cfi -fsanitize-coverage=func,trace-pc -flto -fvisibility=default -fno-sanitize-ignorelist -resource-dir=/dev/null %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC22// RUN: %clang --target=%itanium_abi_triple -fsanitize=float-divide-by-zero -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC23// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC24// CHECK-SANITIZE-COVERAGE-FUNC: fsanitize-coverage-type=125 26// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=bb %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-BB27// CHECK-SANITIZE-COVERAGE-BB: fsanitize-coverage-type=228 29// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=edge %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-EDGE30// CHECK-SANITIZE-COVERAGE-EDGE: fsanitize-coverage-type=331 32// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=edge,indirect-calls %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FUNC_INDIR33// CHECK-SANITIZE-COVERAGE-FUNC_INDIR: fsanitize-coverage-type=334// CHECK-SANITIZE-COVERAGE-FUNC_INDIR: fsanitize-coverage-indirect-calls35 36// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=1 %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-137// CHECK-SANITIZE-COVERAGE-1: warning: argument '-fsanitize-coverage=1' is deprecated, use '-fsanitize-coverage=trace-pc-guard' instead38 39// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=func %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_FUNC_BB_EDGE_DEPRECATED40// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=bb %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_FUNC_BB_EDGE_DEPRECATED41// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=edge %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_FUNC_BB_EDGE_DEPRECATED42// CHECK_FUNC_BB_EDGE_DEPRECATED: warning: argument '-fsanitize-coverage=[func|bb|edge]' is deprecated, use '-fsanitize-coverage=[func|bb|edge],[trace-pc-guard|trace-pc],[control-flow]' instead43 44// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=edge,indirect-calls,trace-pc,trace-cmp,trace-loads,trace-stores,trace-div,trace-gep %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANITIZE-COVERAGE-FEATURES45// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-type=346// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-indirect-calls47// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-trace-cmp48// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-trace-div49// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-trace-gep50// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-trace-pc51// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-trace-loads52// CHECK-SANITIZE-COVERAGE-FEATURES: -fsanitize-coverage-trace-stores53 54// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=func,edge,indirect-calls,trace-cmp -fno-sanitize-coverage=edge,indirect-calls %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MASK55// CHECK-MASK: -fsanitize-coverage-type=156// CHECK-MASK: -fsanitize-coverage-trace-cmp57// CHECK-MASK-NOT: -fsanitize-coverage-58 59// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=foobar %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-INVALID-VALUE60// CHECK-INVALID-VALUE: error: unsupported argument 'foobar' to option '-fsanitize-coverage='61 62// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=func -fsanitize-coverage=edge %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-INCOMPATIBLE63// CHECK-INCOMPATIBLE: error: invalid argument '-fsanitize-coverage=func' not allowed with '-fsanitize-coverage=edge'64 65// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=8bit-counters %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-8BIT66// CHECK-8BIT: warning: argument '-fsanitize-coverage=8bit-counters' is deprecated, use '-fsanitize-coverage=trace-pc-guard' instead67// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=trace-bb %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-TRACE-BB68// CHECK-TRACE-BB: warning: argument '-fsanitize-coverage=trace-bb' is deprecated, use '-fsanitize-coverage=trace-pc-guard' instead69 70// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-TRACE_PC_EDGE71// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=edge,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-TRACE_PC_EDGE72// CHECK-TRACE_PC_EDGE: -fsanitize-coverage-type=373// CHECK-TRACE_PC_EDGE: -fsanitize-coverage-trace-pc74// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=func,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-TRACE_PC_FUNC75// CHECK-TRACE_PC_FUNC: -fsanitize-coverage-type=176// CHECK-TRACE_PC_FUNC: -fsanitize-coverage-trace-pc77 78// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-TRACE_PC_GUARD_EDGE79// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=edge,trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-TRACE_PC_GUARD_EDGE80// CHECK-TRACE_PC_GUARD_EDGE: -fsanitize-coverage-type=381// CHECK-TRACE_PC_GUARD_EDGE: -fsanitize-coverage-trace-pc-guard82// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=func,trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-TRACE_PC_GUARD_FUNC83// CHECK-TRACE_PC_GUARD_FUNC: -fsanitize-coverage-type=184// CHECK-TRACE_PC_GUARD_FUNC: -fsanitize-coverage-trace-pc-guard85 86// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=stack-depth %s \87// RUN: -### 2>&1 | FileCheck %s --check-prefix=CHECK-STACK-DEPTH88// RUN: %clang --target=x86_64-linux-gnu \89// RUN: -fsanitize-coverage=trace-pc-guard,stack-depth %s -### 2>&1 | \90// RUN: FileCheck %s --check-prefix=CHECK-STACK-DEPTH-PC-GUARD91// CHECK-STACK-DEPTH: -fsanitize-coverage-type=192// CHECK-STACK-DEPTH: -fsanitize-coverage-stack-depth93// CHECK-STACK-DEPTH-PC-GUARD: -fsanitize-coverage-type=394// CHECK-STACK-DEPTH-PC-GUARD: -fsanitize-coverage-trace-pc-guard95// CHECK-STACK-DEPTH-PC-GUARD: -fsanitize-coverage-stack-depth96 97// RUN: %clang --target=x86_64-linux-gnu \98// RUN: -fsanitize-coverage-stack-depth-callback-min=100 %s -### 2>&1 | \99// RUN: FileCheck %s --check-prefix=CHECK-STACK-DEPTH-CALLBACK100// RUN: %clang --target=x86_64-linux-gnu \101// RUN: -fsanitize-coverage-stack-depth-callback-min=0 %s -### 2>&1 | \102// RUN: FileCheck %s --check-prefix=CHECK-STACK-DEPTH-CALLBACK-ZERO103// RUN: not %clang --target=x86_64-linux-gnu \104// RUN: -fsanitize-coverage-stack-depth-callback-min=-10 %s -### 2>&1 | \105// RUN: FileCheck %s --check-prefix=CHECK-STACK-DEPTH-CALLBACK-NEGATIVE106// CHECK-STACK-DEPTH-CALLBACK-NOT: error:107// CHECK-STACK-DEPTH-CALLBACK: -fsanitize-coverage-stack-depth-callback-min=100108// CHECK-STACK-DEPTH-CALLBACK-ZERO-NOT: -fsanitize-coverage-stack-depth-callback-min=0109// CHECK-STACK-DEPTH-CALLBACK-NEGATIVE: error: invalid value '-10' in '-fsanitize-coverage-stack-depth-callback-min=-10'110 111// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=trace-cmp,indirect-calls %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-TYPE-NECESSARY112// CHECK-NO-TYPE-NECESSARY-NOT: error:113// CHECK-NO-TYPE-NECESSARY: -fsanitize-coverage-indirect-calls114// CHECK-NO-TYPE-NECESSARY: -fsanitize-coverage-trace-cmp115 116// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address -fsanitize-coverage=func -fsanitize-coverage=trace-cmp %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-EXTEND-LEGACY117// CHECK-EXTEND-LEGACY: -fsanitize-coverage-type=1118// CHECK-EXTEND-LEGACY: -fsanitize-coverage-trace-cmp119 120// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=no-prune,trace-pc %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_NOPRUNE121// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=no-prune,func,trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_NOPRUNE122// CHECK_NOPRUNE: -fsanitize-coverage-no-prune123 124// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=inline-8bit-counters %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_INLINE8BIT125// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=bb,inline-8bit-counters %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_INLINE8BIT126// CHECK_INLINE8BIT-NOT: warning:127// CHECK_INLINE8BIT: -fsanitize-coverage-inline-8bit-counters128 129// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=inline-8bit-counters,pc-table %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_PC_TABLE_FOR_INLINE8BIT130// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=trace-pc-guard,pc-table %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_PC_TABLE_FOR_INLINE8BIT131// CHECK_PC_TABLE_FOR_INLINE8BIT: -fsanitize-coverage-pc-table132 133// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=inline-bool-flag %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_INLINE_BOOL_FLAG134// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=bb,inline-bool-flag %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_INLINE_BOOL_FLAG135// CHECK_INLINE_BOOL_FLAG-NOT: warning:136// CHECK_INLINE_BOOL_FLAG: -fsanitize-coverage-inline-bool-flag137 138// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=inline-bool-flag,pc-table %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_PC_TABLE_FOR_INLINEBOOL139// RUN: %clang --target=x86_64-linux-gnu -fsanitize-coverage=trace-pc-guard,pc-table %s -### 2>&1 | FileCheck %s --check-prefix=CHECK_PC_TABLE_FOR_INLINEBOOL140// CHECK_PC_TABLE_FOR_INLINEBOOL: -fsanitize-coverage-pc-table141 142// RUN: %clang_cl --target=i386-pc-win32 -fsanitize=address -fsanitize-coverage=func,trace-pc-guard -c -### -- %s 2>&1 | FileCheck %s -check-prefix=CLANG-CL-COVERAGE143// CLANG-CL-COVERAGE-NOT: error:144// CLANG-CL-COVERAGE-NOT: warning:145// CLANG-CL-COVERAGE-NOT: argument unused146// CLANG-CL-COVERAGE-NOT: unknown argument147// CLANG-CL-COVERAGE: -fsanitize-coverage-type=1148// CLANG-CL-COVERAGE: -fsanitize=address149 150// RUN: %clang --target=x86_64-linux-gnu -fsanitize=safe-stack -fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-VS-SAFESTACK151// CHECK-VS-SAFESTACK: -fsanitize-coverage-trace-pc-guard152// CHECK-VS-SAFESTACK: -fsanitize=safe-stack153 154// RUN: %clang --target=x86_64-linux-gnu -fsanitize=safe-stack -fsanitize-coverage=trace-pc-guard -fno-sanitize=safe-stack %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SAFESTACK155// CHECK-NO-SAFESTACK-NOT: error:156// CHECK-NO-SAFESTACK-NOT: warning:157// CHECK-NO-SAFESTACK-NOT: argument unused158// CHECK-NO-SAFESTACK-NOT: unknown argument159// CHECK-NO-SAFESTACK-NOT: -fsanitize=safe-stack160// CHECK-NO-SAFESTACK: -fsanitize-coverage-trace-pc-guard161 162// RUN: %clang --target=x86_64-linux-gnu -fsanitize=shadow-call-stack -fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-VS-SHADOWCALLSTACK163// CHECK-VS-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard164// CHECK-VS-SHADOWCALLSTACK: -fsanitize=shadow-call-stack165 166// RUN: %clang --target=x86_64-linux-gnu -fsanitize=shadow-call-stack -fsanitize-coverage=trace-pc-guard -fno-sanitize=shadow-call-stack %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SAFESTACK167// CHECK-NO-SHADOWCALLSTACK-NOT: error:168// CHECK-NO-SHADOWCALLSTACK-NOT: warning:169// CHECK-NO-SHADOWCALLSTACK-NOT: argument unused170// CHECK-NO-SHADOWCALLSTACK-NOT: unknown argument171// CHECK-NO-SHADOWCALLSTACK-NOT: -fsanitize=shadow-call-stack172// CHECK-NO-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard173