1 // Unsupported on AIX because we don't support the requisite "__clangast" 2 // section in XCOFF yet. 3 // UNSUPPORTED: aix 4 5 // Check that when depending on a precompiled module, we depend on the 6 // **top-level** module. Submodules don't have some information present (for 7 // example the path to the modulemap file) and depending on them might cause 8 // problems in the dependency scanner (e.g. generating empty `-fmodule-map-file=` 9 // arguments). 10 11 // RUN: rm -rf %t && mkdir %t 12 // RUN: cp %S/Inputs/modules-pch-common-submodule/* %t 13 14 // Scan dependencies of the PCH: 15 // 16 // RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch-common-submodule/cdb_pch.json > %t/cdb.json 17 // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full \ 18 // RUN: -generate-modules-path-args -module-files-dir %t/build > %t/result_pch.json 19 // RUN: cat %t/result_pch.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-PCH 20 // 21 // CHECK-PCH: { 22 // CHECK-PCH-NEXT: "modules": [ 23 // CHECK-PCH-NEXT: { 24 // CHECK-PCH-NEXT: "clang-module-deps": [], 25 // CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 26 // CHECK-PCH-NEXT: "command-line": [ 27 // CHECK-PCH-NEXT: "-cc1" 28 // CHECK-PCH: "-emit-module" 29 // CHECK-PCH: "-fmodules" 30 // CHECK-PCH: "-fmodule-name=ModCommon" 31 // CHECK-PCH: "-fno-implicit-modules" 32 // CHECK-PCH: ], 33 // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON:.*]]", 34 // CHECK-PCH-NEXT: "file-deps": [ 35 // CHECK-PCH-NEXT: "[[PREFIX]]/mod_common.h", 36 // CHECK-PCH-NEXT: "[[PREFIX]]/mod_common_sub.h", 37 // CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap" 38 // CHECK-PCH-NEXT: ], 39 // CHECK-PCH-NEXT: "name": "ModCommon" 40 // CHECK-PCH-NEXT: } 41 // CHECK-PCH-NEXT: ], 42 // CHECK-PCH-NEXT: "translation-units": [ 43 // CHECK-PCH-NEXT: { 44 // CHECK-PCH-NEXT: "clang-context-hash": "[[HASH_PCH:.*]]", 45 // CHECK-PCH-NEXT: "clang-module-deps": [ 46 // CHECK-PCH-NEXT: { 47 // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON]]", 48 // CHECK-PCH-NEXT: "module-name": "ModCommon" 49 // CHECK-PCH-NEXT: } 50 // CHECK-PCH-NEXT: ], 51 // CHECK-PCH-NEXT: "command-line": [ 52 // CHECK-PCH: "-fno-implicit-modules" 53 // CHECK-PCH-NEXT: "-fno-implicit-module-maps" 54 // CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON]]/ModCommon-{{.*}}.pcm" 55 // CHECK-PCH-NEXT: ], 56 // CHECK-PCH-NEXT: "file-deps": [ 57 // CHECK-PCH-NEXT: "[[PREFIX]]/pch.h" 58 // CHECK-PCH-NEXT: ], 59 // CHECK-PCH-NEXT: "input-file": "[[PREFIX]]/pch.h" 60 // CHECK-PCH-NEXT: } 61 // CHECK-PCH-NEXT: ] 62 // CHECK-PCH-NEXT: } 63 64 // Explicitly build the PCH: 65 // 66 // RUN: %deps-to-rsp %t/result_pch.json --module-name=ModCommon > %t/mod_common.cc1.rsp 67 // RUN: %deps-to-rsp %t/result_pch.json --tu-index=0 > %t/pch.rsp 68 // 69 // RUN: %clang @%t/mod_common.cc1.rsp 70 // RUN: %clang @%t/pch.rsp 71 72 // Scan dependencies of the TU: 73 // 74 // RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch-common-submodule/cdb_tu.json > %t/cdb.json 75 // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full \ 76 // RUN: -generate-modules-path-args -module-files-dir %t/build > %t/result_tu.json 77 // RUN: cat %t/result_tu.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-TU 78 // 79 // CHECK-TU: { 80 // CHECK-TU-NEXT: "modules": [ 81 // CHECK-TU-NEXT: { 82 // CHECK-TU-NEXT: "clang-module-deps": [], 83 // CHECK-TU-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 84 // CHECK-TU-NEXT: "command-line": [ 85 // CHECK-TU-NEXT: "-cc1" 86 // CHECK-TU: "-emit-module" 87 // CHECK-TU: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON:.*]]/ModCommon-{{.*}}.pcm" 88 // CHECK-TU: "-fmodules" 89 // CHECK-TU: "-fmodule-name=ModTU" 90 // CHECK-TU: "-fno-implicit-modules" 91 // CHECK-TU: ], 92 // CHECK-TU-NEXT: "context-hash": "[[HASH_MOD_TU:.*]]", 93 // CHECK-TU-NEXT: "file-deps": [ 94 // CHECK-TU-NEXT: "[[PREFIX]]/mod_tu.h", 95 // CHECK-TU-NEXT: "[[PREFIX]]/module.modulemap" 96 // CHECK-TU-NEXT: ], 97 // CHECK-TU-NEXT: "name": "ModTU" 98 // CHECK-TU-NEXT: } 99 // CHECK-TU-NEXT: ], 100 // CHECK-TU-NEXT: "translation-units": [ 101 // CHECK-TU-NEXT: { 102 // CHECK-TU-NEXT: "clang-context-hash": "[[HASH_TU:.*]]", 103 // CHECK-TU-NEXT: "clang-module-deps": [ 104 // CHECK-TU-NEXT: { 105 // CHECK-TU-NEXT: "context-hash": "[[HASH_MOD_TU]]" 106 // CHECK-TU-NEXT: "module-name": "ModTU" 107 // CHECK-TU-NEXT: } 108 // CHECK-TU-NEXT: ], 109 // CHECK-TU-NEXT: "command-line": [ 110 // CHECK-TU: "-fno-implicit-modules", 111 // CHECK-TU-NEXT: "-fno-implicit-module-maps", 112 // CHECK-TU-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU:.*]]/ModTU-{{.*}}.pcm" 113 // CHECK-TU-NEXT: ], 114 // CHECK-TU-NEXT: "file-deps": [ 115 // CHECK-TU-NEXT: "[[PREFIX]]/tu.c", 116 // CHECK-TU-NEXT: "[[PREFIX]]/pch.h.gch" 117 // CHECK-TU-NEXT: ], 118 // CHECK-TU-NEXT: "input-file": "[[PREFIX]]/tu.c" 119 // CHECK-TU-NEXT: } 120 // CHECK-TU-NEXT: ] 121 // CHECK-TU-NEXT: } 122 123 // Explicitly build the TU: 124 // 125 // RUN: %deps-to-rsp %t/result_tu.json --module-name=ModTU > %t/mod_tu.cc1.rsp 126 // RUN: %deps-to-rsp %t/result_tu.json --tu-index=0 > %t/tu.rsp 127 // 128 // RUN: %clang @%t/mod_tu.cc1.rsp 129 // RUN: %clang @%t/tu.rsp 130