16da811fdSJan Svoboda // Some command-line arguments used for compiling translation units are not 25b6c0837SJan Svoboda // compatible with the semantics of modules or are likely to differ between 35b6c0837SJan Svoboda // identical modules discovered from different translation units. This test 45b6c0837SJan Svoboda // checks such arguments are removed from the command-lines: '-include', 5509223daSBen Langmuir // '-dwarf-debug-flag' and '-main-file-name'. Similarly, several arguments 6509223daSBen Langmuir // such as '-fmodules-cache-path=' are only relevant for implicit modules, and 7509223daSBen Langmuir // are removed to better-canonicalize the compilation. 86da811fdSJan Svoboda 96da811fdSJan Svoboda // RUN: rm -rf %t && mkdir %t 106da811fdSJan Svoboda // RUN: cp %S/Inputs/removed-args/* %t 11509223daSBen Langmuir // RUN: touch %t/build-session 12c7eede5dSArgyrios Kyrtzidis // RUN: touch %t/tu.proftext 13c7eede5dSArgyrios Kyrtzidis // RUN: llvm-profdata merge %t/tu.proftext -o %t/tu.profdata 146da811fdSJan Svoboda 156da811fdSJan Svoboda // RUN: sed "s|DIR|%/t|g" %S/Inputs/removed-args/cdb.json.template > %t/cdb.json 16c4b13f7aSJan Svoboda // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/result.json 17c4b13f7aSJan Svoboda // RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t 186da811fdSJan Svoboda // 19c4b13f7aSJan Svoboda // CHECK: { 206da811fdSJan Svoboda // CHECK-NEXT: "modules": [ 216da811fdSJan Svoboda // CHECK-NEXT: { 226da811fdSJan Svoboda // CHECK-NEXT: "clang-module-deps": [], 236da811fdSJan Svoboda // CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 246da811fdSJan Svoboda // CHECK-NEXT: "command-line": [ 256da811fdSJan Svoboda // CHECK-NEXT: "-cc1" 26060b2534SJan Svoboda // CHECK-NOT: "-fdebug-compilation-dir=" 27060b2534SJan Svoboda // CHECK-NOT: "-fcoverage-compilation-dir=" 28758bca64SBen Langmuir // CHECK-NOT: "-coverage-notes-file 29758bca64SBen Langmuir // CHECK-NOT: "-coverage-data-file 30c7eede5dSArgyrios Kyrtzidis // CHECK-NOT: "-fprofile-instrument-use-path 315b6c0837SJan Svoboda // CHECK-NOT: "-dwarf-debug-flags" 325b6c0837SJan Svoboda // CHECK-NOT: "-main-file-name" 336da811fdSJan Svoboda // CHECK-NOT: "-include" 34509223daSBen Langmuir // CHECK-NOT: "-fmodules-cache-path= 35509223daSBen Langmuir // CHECK-NOT: "-fmodules-validate-once-per-build-session" 36509223daSBen Langmuir // CHECK-NOT: "-fbuild-session-timestamp= 37509223daSBen Langmuir // CHECK-NOT: "-fmodules-prune-interval= 38509223daSBen Langmuir // CHECK-NOT: "-fmodules-prune-after= 396da811fdSJan Svoboda // CHECK: ], 406da811fdSJan Svoboda // CHECK-NEXT: "context-hash": "[[HASH_MOD_HEADER:.*]]", 416da811fdSJan Svoboda // CHECK-NEXT: "file-deps": [ 42*9d4837f4SJan Svoboda // CHECK-NEXT: "[[PREFIX]]/module.modulemap", 43*9d4837f4SJan Svoboda // CHECK-NEXT: "[[PREFIX]]/mod_header.h" 446da811fdSJan Svoboda // CHECK-NEXT: ], 4568eb3b20SArtem Chikin // CHECK-NEXT: "link-libraries": [], 466da811fdSJan Svoboda // CHECK-NEXT: "name": "ModHeader" 476da811fdSJan Svoboda // CHECK-NEXT: }, 486da811fdSJan Svoboda // CHECK-NEXT: { 496da811fdSJan Svoboda // CHECK-NEXT: "clang-module-deps": [], 506da811fdSJan Svoboda // CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 516da811fdSJan Svoboda // CHECK-NEXT: "command-line": [ 526da811fdSJan Svoboda // CHECK-NEXT: "-cc1" 53060b2534SJan Svoboda // CHECK-NOT: "-fdebug-compilation-dir= 54060b2534SJan Svoboda // CHECK-NOT: "-fcoverage-compilation-dir= 55758bca64SBen Langmuir // CHECK-NOT: "-coverage-notes-file 56758bca64SBen Langmuir // CHECK-NOT: "-coverage-data-file 57c7eede5dSArgyrios Kyrtzidis // CHECK-NOT: "-fprofile-instrument-use-path 58509223daSBen Langmuir // CHECK-NOT: "-dwarf-debug-flags" 59509223daSBen Langmuir // CHECK-NOT: "-main-file-name" 606da811fdSJan Svoboda // CHECK-NOT: "-include" 61509223daSBen Langmuir // CHECK-NOT: "-fmodules-cache-path= 62509223daSBen Langmuir // CHECK-NOT: "-fmodules-validate-once-per-build-session" 63509223daSBen Langmuir // CHECK-NOT: "-fbuild-session-timestamp= 64509223daSBen Langmuir // CHECK-NOT: "-fmodules-prune-interval= 65509223daSBen Langmuir // CHECK-NOT: "-fmodules-prune-after= 666da811fdSJan Svoboda // CHECK: ], 676da811fdSJan Svoboda // CHECK-NEXT: "context-hash": "[[HASH_MOD_TU:.*]]", 686da811fdSJan Svoboda // CHECK-NEXT: "file-deps": [ 69*9d4837f4SJan Svoboda // CHECK-NEXT: "[[PREFIX]]/module.modulemap", 70*9d4837f4SJan Svoboda // CHECK-NEXT: "[[PREFIX]]/mod_tu.h" 716da811fdSJan Svoboda // CHECK-NEXT: ], 7268eb3b20SArtem Chikin // CHECK-NEXT: "link-libraries": [], 736da811fdSJan Svoboda // CHECK-NEXT: "name": "ModTU" 746da811fdSJan Svoboda // CHECK-NEXT: } 756da811fdSJan Svoboda // CHECK-NEXT: ], 766da811fdSJan Svoboda // CHECK-NEXT: "translation-units": [ 776da811fdSJan Svoboda // CHECK-NEXT: { 7883902c40SBen Langmuir // CHECK: "clang-context-hash": "[[HASH_TU:.*]]", 796da811fdSJan Svoboda // CHECK-NEXT: "clang-module-deps": [ 806da811fdSJan Svoboda // CHECK-NEXT: { 816da811fdSJan Svoboda // CHECK-NEXT: "context-hash": "[[HASH_MOD_HEADER]]", 826da811fdSJan Svoboda // CHECK-NEXT: "module-name": "ModHeader" 836da811fdSJan Svoboda // CHECK-NEXT: }, 846da811fdSJan Svoboda // CHECK-NEXT: { 856da811fdSJan Svoboda // CHECK-NEXT: "context-hash": "[[HASH_MOD_TU]]", 866da811fdSJan Svoboda // CHECK-NEXT: "module-name": "ModTU" 876da811fdSJan Svoboda // CHECK-NEXT: } 886da811fdSJan Svoboda // CHECK-NEXT: ] 89509223daSBen Langmuir // CHECK-NEXT: "command-line": [ 9083902c40SBen Langmuir // CHECK-NEXT: "-cc1", 91509223daSBen Langmuir // CHECK-NOT: "-fmodules-cache-path= 92509223daSBen Langmuir // CHECK-NOT: "-fmodules-validate-once-per-build-session" 9383902c40SBen Langmuir // CHECK-NOT: "-fbuild-session-timestamp= 94509223daSBen Langmuir // CHECK-NOT: "-fbuild-session-file= 95509223daSBen Langmuir // CHECK-NOT: "-fmodules-prune-interval= 96509223daSBen Langmuir // CHECK-NOT: "-fmodules-prune-after= 97509223daSBen Langmuir // CHECK: ], 9863310243SArgyrios Kyrtzidis 9963310243SArgyrios Kyrtzidis // Check for removed args for PCH invocations. 10063310243SArgyrios Kyrtzidis 10163310243SArgyrios Kyrtzidis // RUN: split-file %s %t 10263310243SArgyrios Kyrtzidis // RUN: sed "s|DIR|%/t|g" %t/cdb-pch.json.template > %t/cdb-pch.json 10363310243SArgyrios Kyrtzidis // RUN: clang-scan-deps -compilation-database %t/cdb-pch.json -format experimental-full > %t/result-pch.json 10463310243SArgyrios Kyrtzidis // RUN: cat %t/result-pch.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=PCH 10563310243SArgyrios Kyrtzidis // 10663310243SArgyrios Kyrtzidis // PCH-NOT: "-fdebug-compilation-dir=" 10763310243SArgyrios Kyrtzidis // PCH-NOT: "-fcoverage-compilation-dir=" 10863310243SArgyrios Kyrtzidis // PCH-NOT: "-coverage-notes-file 10963310243SArgyrios Kyrtzidis // PCH-NOT: "-coverage-data-file 11063310243SArgyrios Kyrtzidis // PCH-NOT: "-fprofile-instrument-use-path 11163310243SArgyrios Kyrtzidis // PCH-NOT: "-include" 11263310243SArgyrios Kyrtzidis // PCH-NOT: "-fmodules-cache-path= 11363310243SArgyrios Kyrtzidis // PCH-NOT: "-fmodules-validate-once-per-build-session" 11463310243SArgyrios Kyrtzidis // PCH-NOT: "-fbuild-session-timestamp= 11563310243SArgyrios Kyrtzidis // PCH-NOT: "-fmodules-prune-interval= 11663310243SArgyrios Kyrtzidis // PCH-NOT: "-fmodules-prune-after= 11763310243SArgyrios Kyrtzidis 11863310243SArgyrios Kyrtzidis //--- cdb-pch.json.template 11963310243SArgyrios Kyrtzidis [ 12063310243SArgyrios Kyrtzidis { 12163310243SArgyrios Kyrtzidis "directory": "DIR", 12263310243SArgyrios Kyrtzidis "command": "clang -x c-header DIR/header.h -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache -fdebug-compilation-dir=DIR/debug -fcoverage-compilation-dir=DIR/coverage -ftest-coverage -fprofile-instr-use=DIR/tu.profdata -o DIR/header.h.pch -serialize-diagnostics DIR/header.h.pch.diag ", 12363310243SArgyrios Kyrtzidis "file": "DIR/header.h.pch" 12463310243SArgyrios Kyrtzidis } 12563310243SArgyrios Kyrtzidis ] 126