xref: /llvm-project/clang/test/Driver/ftime-trace.cpp (revision ecaacd14c35996ad6ee53da6af6c9f4cf36d9110)
199f933b6SFangrui Song // RUN: rm -rf %t && mkdir -p %t && cd %t
2*ecaacd14SUtkarsh Saxena // RUN: %clangxx -S -no-canonical-prefixes -ftime-trace -ftime-trace-granularity=0 -ftime-trace-verbose -o out %s
399f933b6SFangrui Song // RUN: cat out.json \
499f933b6SFangrui Song // RUN:   | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \
599f933b6SFangrui Song // RUN:   | FileCheck %s
6*ecaacd14SUtkarsh Saxena // RUN: %clangxx -S -no-canonical-prefixes -ftime-trace=new-name.json -ftime-trace-granularity=0 -ftime-trace-verbose -o out %s
799f933b6SFangrui Song // RUN: cat new-name.json \
899f933b6SFangrui Song // RUN:   | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \
999f933b6SFangrui Song // RUN:   | FileCheck %s
1099f933b6SFangrui Song // RUN: mkdir dir1 dir2
11*ecaacd14SUtkarsh Saxena // RUN: %clangxx -S -no-canonical-prefixes -ftime-trace=dir1 -ftime-trace-granularity=0 -ftime-trace-verbose -o out %s
1299f933b6SFangrui Song // RUN: cat dir1/out.json \
1399f933b6SFangrui Song // RUN:   | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \
1499f933b6SFangrui Song // RUN:   | FileCheck %s
15*ecaacd14SUtkarsh Saxena // RUN: %clangxx -S -no-canonical-prefixes -ftime-trace=dir2/ -ftime-trace-granularity=0 -ftime-trace-verbose -o out %s
1699f933b6SFangrui Song // RUN: cat dir2/out.json \
1799f933b6SFangrui Song // RUN:   | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \
1899f933b6SFangrui Song // RUN:   | FileCheck %s
1999f933b6SFangrui Song 
2099f933b6SFangrui Song // CHECK:      "beginningOfTime": {{[0-9]{16},}}
2199f933b6SFangrui Song // CHECK-NEXT: "traceEvents": [
2299f933b6SFangrui Song // CHECK:      "args":
2399f933b6SFangrui Song // CHECK:      "detail":
2499f933b6SFangrui Song // CHECK:      "dur":
2599f933b6SFangrui Song // CHECK:      "name":
2699f933b6SFangrui Song // CHECK-NEXT: "ph":
2799f933b6SFangrui Song // CHECK-NEXT: "pid":
2899f933b6SFangrui Song // CHECK-NEXT: "tid":
2999f933b6SFangrui Song // CHECK-NEXT: "ts":
3099f933b6SFangrui Song // CHECK:      "name": "{{clang|llvm}}{{.*}}"
3199f933b6SFangrui Song // CHECK:      "name": "process_name"
3299f933b6SFangrui Song // CHECK:      "name": "thread_name"
3399f933b6SFangrui Song 
3449b87b05SFangrui Song // RUN: mkdir d e f && cp %s d/a.cpp && touch d/b.c
3549b87b05SFangrui Song 
362f999327SFangrui Song /// TODO: Support -fno-integrated-as.
37*ecaacd14SUtkarsh Saxena // RUN: %clang -### -c -ftime-trace -ftime-trace-granularity=0 -ftime-trace-verbose -fintegrated-as d/a.cpp -o e/a.o 2>&1 | FileCheck %s --check-prefix=COMPILE1
38*ecaacd14SUtkarsh Saxena // COMPILE1: -cc1{{.*}} "-ftime-trace=e/a.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
3949b87b05SFangrui Song 
40*ecaacd14SUtkarsh Saxena // RUN: %clang -### -c -ftime-trace -ftime-trace-granularity=0 -ftime-trace-verbose d/a.cpp d/b.c -dumpdir f/ 2>&1 | FileCheck %s --check-prefix=COMPILE2
41*ecaacd14SUtkarsh Saxena // COMPILE2: -cc1{{.*}} "-ftime-trace=f/a.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
42*ecaacd14SUtkarsh Saxena // COMPILE2: -cc1{{.*}} "-ftime-trace=f/b.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
4349b87b05SFangrui Song 
4449b87b05SFangrui Song /// -o specifies the link output. Create ${output}-${basename}.json.
45*ecaacd14SUtkarsh Saxena // RUN: %clang -### -ftime-trace -ftime-trace-granularity=0 -ftime-trace-verbose d/a.cpp d/b.c -o e/x 2>&1 | FileCheck %s --check-prefix=LINK1
46*ecaacd14SUtkarsh Saxena // LINK1: -cc1{{.*}} "-ftime-trace=e/x-a.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
47*ecaacd14SUtkarsh Saxena // LINK1: -cc1{{.*}} "-ftime-trace=e/x-b.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
4849b87b05SFangrui Song 
4949b87b05SFangrui Song /// -dumpdir is f/g, not ending with a path separator. We create f/g${basename}.json.
50*ecaacd14SUtkarsh Saxena // RUN: %clang -### -ftime-trace -ftime-trace-granularity=0 -ftime-trace-verbose d/a.cpp d/b.c -o e/x -dumpdir f/g 2>&1 | FileCheck %s --check-prefix=LINK2
51*ecaacd14SUtkarsh Saxena // LINK2: -cc1{{.*}} "-ftime-trace=f/ga.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
52*ecaacd14SUtkarsh Saxena // LINK2: -cc1{{.*}} "-ftime-trace=f/gb.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
5349b87b05SFangrui Song 
54*ecaacd14SUtkarsh Saxena // RUN: %clang -### -ftime-trace=e -ftime-trace-granularity=0 -ftime-trace-verbose d/a.cpp d/b.c -o f/x -dumpdir f/ 2>&1 | FileCheck %s --check-prefix=LINK3
55*ecaacd14SUtkarsh Saxena // LINK3: -cc1{{.*}} "-ftime-trace=e{{/|\\\\}}a-{{[^.]*}}.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
56*ecaacd14SUtkarsh Saxena // LINK3: -cc1{{.*}} "-ftime-trace=e{{/|\\\\}}b-{{[^.]*}}.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose"
5749b87b05SFangrui Song 
58*ecaacd14SUtkarsh Saxena // RUN: %clang -### -ftime-trace -ftime-trace=e -ftime-trace-granularity=1 -ftime-trace-verbose -xassembler d/a.cpp 2>&1 | \
59c01ea051SFangrui Song // RUN:   FileCheck %s --check-prefix=UNUSED
6049b87b05SFangrui Song // UNUSED:      warning: argument unused during compilation: '-ftime-trace'
61c01ea051SFangrui Song // UNUSED-NEXT: warning: argument unused during compilation: '-ftime-trace=e'
62c01ea051SFangrui Song // UNUSED-NEXT: warning: argument unused during compilation: '-ftime-trace-granularity=1'
63*ecaacd14SUtkarsh Saxena // UNUSED-NEXT: warning: argument unused during compilation: '-ftime-trace-verbose'
64c01ea051SFangrui Song // UNUSED-NOT:  warning:
6549b87b05SFangrui Song 
6699f933b6SFangrui Song template <typename T>
6799f933b6SFangrui Song struct Struct {
6899f933b6SFangrui Song   T Num;
6999f933b6SFangrui Song };
7099f933b6SFangrui Song 
7199f933b6SFangrui Song int main() {
7299f933b6SFangrui Song   Struct<int> S;
7399f933b6SFangrui Song 
7499f933b6SFangrui Song   return 0;
7599f933b6SFangrui Song }
76