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