Clang Project

clang_source_code/test/CodeGen/xray-instrumentation-bundles.cpp
1// RUN: %clang_cc1 -fxray-instrument -fxray-instrumentation-bundle=none -x c++ \
2// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
3// RUN:     | FileCheck --check-prefixes CHECK,NOFUNCTION,NOCUSTOM,NOTYPED %s
4// RUN: %clang_cc1 -fxray-instrument -fxray-instrumentation-bundle=function -x c++ \
5// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
6// RUN:     | FileCheck --check-prefixes CHECK,FUNCTION,NOCUSTOM,NOTYPED %s
7// RUN: %clang_cc1 -fxray-instrument \
8// RUN:     -fxray-instrumentation-bundle=custom -x c++ \
9// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
10// RUN:     | FileCheck --check-prefixes CHECK,NOFUNCTION,CUSTOM,NOTYPED %s
11// RUN: %clang_cc1 -fxray-instrument \
12// RUN:     -fxray-instrumentation-bundle=typed -x c++ \
13// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
14// RUN:     | FileCheck --check-prefixes CHECK,NOFUNCTION,NOCUSTOM,TYPED %s
15// RUN: %clang_cc1 -fxray-instrument \
16// RUN:     -fxray-instrumentation-bundle=custom,typed -x c++ \
17// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
18// RUN:     | FileCheck --check-prefixes CHECK,NOFUNCTION,CUSTOM,TYPED %s
19// RUN: %clang_cc1 -fxray-instrument \
20// RUN:     -fxray-instrumentation-bundle=function,custom -x c++ \
21// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
22// RUN:     | FileCheck --check-prefixes CHECK,FUNCTION,CUSTOM,NOTYPED %s
23// RUN: %clang_cc1 -fxray-instrument \
24// RUN:     -fxray-instrumentation-bundle=function,typed -x c++ \
25// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
26// RUN:     | FileCheck --check-prefixes CHECK,FUNCTION,NOCUSTOM,TYPED %s
27// RUN: %clang_cc1 -fxray-instrument \
28// RUN:     -fxray-instrumentation-bundle=function,custom,typed -x c++ \
29// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
30// RUN:     | FileCheck --check-prefixes CHECK,FUNCTION,CUSTOM,TYPED %s
31// RUN: %clang_cc1 -fxray-instrument \
32// RUN:     -fxray-instrumentation-bundle=function \
33// RUN:     -fxray-instrumentation-bundle=custom \
34// RUN:     -fxray-instrumentation-bundle=typed -x c++ \
35// RUN:     -std=c++11 -triple x86_64-unknown-unknown -emit-llvm -o - %s \
36// RUN:     | FileCheck --check-prefixes CHECK,FUNCTION,CUSTOM,TYPED %s
37
38// CHECK: define void @_Z16alwaysInstrumentv() #[[ALWAYSATTR:[0-9]+]] {
39[[clang::xray_always_instrument]] void alwaysInstrument() {
40  static constexpr char kPhase[] = "always";
41  __xray_customevent(kPhase, 6);
42  __xray_typedevent(1, kPhase, 6);
43  // CUSTOM: call void @llvm.xray.customevent(i8*{{.*}}, i32 6)
44  // NOCUSTOM-NOT: call void @llvm.xray.customevent(i8*{{.*}}, i32 6)
45  // TYPED: call void @llvm.xray.typedevent(i16 {{.*}}, i8*{{.*}}, i32 6)
46  // NOTYPED-NOT: call void @llvm.xray.typedevent(i16 {{.*}}, i8*{{.*}}, i32 6)
47}
48
49// FUNCTION: attributes #[[ALWAYSATTR]] = {{.*}} "function-instrument"="xray-always" {{.*}}
50// NOFUNCTION-NOT: attributes #[[ALWAYSATTR]] = {{.*}} "function-instrument"="xray-always" {{.*}}
51