1 // RUN: rm -rf %t && mkdir -p %t && cd %t 2 // RUN: %clangxx -S -no-canonical-prefixes -ftime-trace -ftime-trace-granularity=0 -ftime-trace-verbose -o out %s 3 // RUN: cat out.json \ 4 // RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \ 5 // RUN: | FileCheck %s 6 // RUN: %clangxx -S -no-canonical-prefixes -ftime-trace=new-name.json -ftime-trace-granularity=0 -ftime-trace-verbose -o out %s 7 // RUN: cat new-name.json \ 8 // RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \ 9 // RUN: | FileCheck %s 10 // RUN: mkdir dir1 dir2 11 // RUN: %clangxx -S -no-canonical-prefixes -ftime-trace=dir1 -ftime-trace-granularity=0 -ftime-trace-verbose -o out %s 12 // RUN: cat dir1/out.json \ 13 // RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \ 14 // RUN: | FileCheck %s 15 // RUN: %clangxx -S -no-canonical-prefixes -ftime-trace=dir2/ -ftime-trace-granularity=0 -ftime-trace-verbose -o out %s 16 // RUN: cat dir2/out.json \ 17 // RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \ 18 // RUN: | FileCheck %s 19 20 // CHECK: "beginningOfTime": {{[0-9]{16},}} 21 // CHECK-NEXT: "traceEvents": [ 22 // CHECK: "args": 23 // CHECK: "detail": 24 // CHECK: "dur": 25 // CHECK: "name": 26 // CHECK-NEXT: "ph": 27 // CHECK-NEXT: "pid": 28 // CHECK-NEXT: "tid": 29 // CHECK-NEXT: "ts": 30 // CHECK: "name": "{{clang|llvm}}{{.*}}" 31 // CHECK: "name": "process_name" 32 // CHECK: "name": "thread_name" 33 34 // RUN: mkdir d e f && cp %s d/a.cpp && touch d/b.c 35 36 /// TODO: Support -fno-integrated-as. 37 // 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 // COMPILE1: -cc1{{.*}} "-ftime-trace=e/a.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 39 40 // 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 // COMPILE2: -cc1{{.*}} "-ftime-trace=f/a.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 42 // COMPILE2: -cc1{{.*}} "-ftime-trace=f/b.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 43 44 /// -o specifies the link output. Create ${output}-${basename}.json. 45 // 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 // LINK1: -cc1{{.*}} "-ftime-trace=e/x-a.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 47 // LINK1: -cc1{{.*}} "-ftime-trace=e/x-b.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 48 49 /// -dumpdir is f/g, not ending with a path separator. We create f/g${basename}.json. 50 // 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 // LINK2: -cc1{{.*}} "-ftime-trace=f/ga.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 52 // LINK2: -cc1{{.*}} "-ftime-trace=f/gb.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 53 54 // 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 // LINK3: -cc1{{.*}} "-ftime-trace=e{{/|\\\\}}a-{{[^.]*}}.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 56 // LINK3: -cc1{{.*}} "-ftime-trace=e{{/|\\\\}}b-{{[^.]*}}.json" "-ftime-trace-granularity=0" "-ftime-trace-verbose" 57 58 // RUN: %clang -### -ftime-trace -ftime-trace=e -ftime-trace-granularity=1 -ftime-trace-verbose -xassembler d/a.cpp 2>&1 | \ 59 // RUN: FileCheck %s --check-prefix=UNUSED 60 // UNUSED: warning: argument unused during compilation: '-ftime-trace' 61 // UNUSED-NEXT: warning: argument unused during compilation: '-ftime-trace=e' 62 // UNUSED-NEXT: warning: argument unused during compilation: '-ftime-trace-granularity=1' 63 // UNUSED-NEXT: warning: argument unused during compilation: '-ftime-trace-verbose' 64 // UNUSED-NOT: warning: 65 66 template <typename T> 67 struct Struct { 68 T Num; 69 }; 70 71 int main() { 72 Struct<int> S; 73 74 return 0; 75 } 76