1 // Unsupported on AIX because we don't support the requisite "__clangast" 2 // section in XCOFF yet. 3 // UNSUPPORTED: aix 4 5 // RUN: rm -rf %t && mkdir %t 6 // RUN: cp %S/Inputs/modules-pch/* %t 7 8 // Scan dependencies of the PCH: 9 // 10 // RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_pch.json > %t/cdb.json 11 // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full \ 12 // RUN: -generate-modules-path-args -module-files-dir %t/build > %t/result_pch.json 13 // RUN: cat %t/result_pch.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-PCH 14 // 15 // Check we didn't build the PCH during dependency scanning. 16 // RUN: not cat %/t/pch.h.gch 17 // 18 // CHECK-PCH: { 19 // CHECK-PCH-NEXT: "modules": [ 20 // CHECK-PCH-NEXT: { 21 // CHECK-PCH-NEXT: "clang-module-deps": [], 22 // CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 23 // CHECK-PCH-NEXT: "command-line": [ 24 // CHECK-PCH-NEXT: "-cc1" 25 // CHECK-PCH: "-emit-module" 26 // CHECK-PCH: "-fmodules" 27 // CHECK-PCH-NOT: "-fimplicit-module-maps" 28 // CHECK-PCH: "-fmodule-name=ModCommon1" 29 // CHECK-PCH: "-fno-implicit-modules" 30 // CHECK-PCH: ], 31 // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_1:.*]]", 32 // CHECK-PCH-NEXT: "file-deps": [ 33 // CHECK-PCH-NEXT: "[[PREFIX]]/mod_common_1.h", 34 // CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap" 35 // CHECK-PCH-NEXT: ], 36 // CHECK-PCH-NEXT: "name": "ModCommon1" 37 // CHECK-PCH-NEXT: }, 38 // CHECK-PCH-NEXT: { 39 // CHECK-PCH-NEXT: "clang-module-deps": [], 40 // CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 41 // CHECK-PCH-NEXT: "command-line": [ 42 // CHECK-PCH-NEXT: "-cc1" 43 // CHECK-PCH: "-emit-module" 44 // CHECK-PCH: "-fmodules" 45 // CHECK-PCH-NOT: "-fimplicit-module-maps" 46 // CHECK-PCH: "-fmodule-name=ModCommon2" 47 // CHECK-PCH: "-fno-implicit-modules" 48 // CHECK-PCH: ], 49 // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_2:.*]]", 50 // CHECK-PCH-NEXT: "file-deps": [ 51 // CHECK-PCH-NEXT: "[[PREFIX]]/mod_common_2.h", 52 // CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap" 53 // CHECK-PCH-NEXT: ], 54 // CHECK-PCH-NEXT: "name": "ModCommon2" 55 // CHECK-PCH-NEXT: }, 56 // CHECK-PCH-NEXT: { 57 // CHECK-PCH-NEXT: "clang-module-deps": [ 58 // CHECK-PCH-NEXT: { 59 // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_2]]", 60 // CHECK-PCH-NEXT: "module-name": "ModCommon2" 61 // CHECK-PCH-NEXT: } 62 // CHECK-PCH-NEXT: ], 63 // CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 64 // CHECK-PCH-NEXT: "command-line": [ 65 // CHECK-PCH-NEXT: "-cc1" 66 // CHECK-PCH: "-emit-module" 67 // CHECK-PCH: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_2]]/ModCommon2-{{.*}}.pcm" 68 // CHECK-PCH: "-fmodules" 69 // CHECK-PCH-NOT: "-fimplicit-module-maps" 70 // CHECK-PCH: "-fmodule-name=ModPCH" 71 // CHECK-PCH: "-fno-implicit-modules" 72 // CHECK-PCH: ], 73 // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_PCH:.*]]", 74 // CHECK-PCH-NEXT: "file-deps": [ 75 // CHECK-PCH-NEXT: "[[PREFIX]]/mod_pch.h", 76 // CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap" 77 // CHECK-PCH-NEXT: ], 78 // CHECK-PCH-NEXT: "name": "ModPCH" 79 // CHECK-PCH-NEXT: } 80 // CHECK-PCH-NEXT: ], 81 // CHECK-PCH-NEXT: "translation-units": [ 82 // CHECK-PCH-NEXT: { 83 // CHECK-PCH-NEXT: "clang-context-hash": "[[HASH_PCH:.*]]", 84 // CHECK-PCH-NEXT: "clang-module-deps": [ 85 // CHECK-PCH-NEXT: { 86 // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_1]]", 87 // CHECK-PCH-NEXT: "module-name": "ModCommon1" 88 // CHECK-PCH-NEXT: }, 89 // CHECK-PCH-NEXT: { 90 // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_PCH]]", 91 // CHECK-PCH-NEXT: "module-name": "ModPCH" 92 // CHECK-PCH-NEXT: } 93 // CHECK-PCH-NEXT: ], 94 // CHECK-PCH-NEXT: "command-line": [ 95 // CHECK-PCH: "-fno-implicit-modules", 96 // CHECK-PCH-NEXT: "-fno-implicit-module-maps", 97 // CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_COMMON_1]]/ModCommon1-{{.*}}.pcm", 98 // CHECK-PCH-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_PCH]]/ModPCH-{{.*}}.pcm" 99 // CHECK-PCH-NEXT: ], 100 // CHECK-PCH-NEXT: "file-deps": [ 101 // CHECK-PCH-NEXT: "[[PREFIX]]/pch.h" 102 // CHECK-PCH-NEXT: ], 103 // CHECK-PCH-NEXT: "input-file": "[[PREFIX]]/pch.h" 104 // CHECK-PCH-NEXT: } 105 // CHECK-PCH-NEXT: ] 106 // CHECK-PCH-NEXT: } 107 108 // Explicitly build the PCH: 109 // 110 // RUN: %deps-to-rsp %t/result_pch.json --module-name=ModCommon1 > %t/mod_common_1.cc1.rsp 111 // RUN: %deps-to-rsp %t/result_pch.json --module-name=ModCommon2 > %t/mod_common_2.cc1.rsp 112 // RUN: %deps-to-rsp %t/result_pch.json --module-name=ModPCH > %t/mod_pch.cc1.rsp 113 // RUN: %deps-to-rsp %t/result_pch.json --tu-index=0 > %t/pch.rsp 114 // 115 // RUN: %clang @%t/mod_common_1.cc1.rsp 116 // RUN: %clang @%t/mod_common_2.cc1.rsp 117 // RUN: %clang @%t/mod_pch.cc1.rsp 118 // RUN: %clang @%t/pch.rsp 119 120 // Scan dependencies of the TU: 121 // 122 // RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_tu.json > %t/cdb.json 123 // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full \ 124 // RUN: -generate-modules-path-args -module-files-dir %t/build > %t/result_tu.json 125 // RUN: cat %t/result_tu.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-TU 126 // 127 // CHECK-TU: { 128 // CHECK-TU-NEXT: "modules": [ 129 // CHECK-TU-NEXT: { 130 // CHECK-TU-NEXT: "clang-module-deps": [], 131 // CHECK-TU-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 132 // CHECK-TU-NEXT: "command-line": [ 133 // CHECK-TU-NEXT: "-cc1", 134 // CHECK-TU: "-emit-module", 135 // CHECK-TU-NOT: "-fimplicit-module-maps", 136 // CHECK-TU: "-fmodule-name=ModTU", 137 // CHECK-TU: "-fno-implicit-modules", 138 // CHECK-TU: ], 139 // CHECK-TU-NEXT: "context-hash": "[[HASH_MOD_TU:.*]]", 140 // CHECK-TU-NEXT: "file-deps": [ 141 // CHECK-TU-NEXT: "[[PREFIX]]/mod_tu.h", 142 // CHECK-TU-NEXT: "[[PREFIX]]/module.modulemap" 143 // CHECK-TU-NEXT: ], 144 // CHECK-TU-NEXT: "name": "ModTU" 145 // CHECK-TU-NEXT: } 146 // CHECK-TU-NEXT: ], 147 // CHECK-TU-NEXT: "translation-units": [ 148 // CHECK-TU-NEXT: { 149 // CHECK-TU-NEXT: "clang-context-hash": "[[HASH_TU:.*]]", 150 // CHECK-TU-NEXT: "clang-module-deps": [ 151 // CHECK-TU-NEXT: { 152 // CHECK-TU-NEXT: "context-hash": "[[HASH_MOD_TU]]", 153 // CHECK-TU-NEXT: "module-name": "ModTU" 154 // CHECK-TU-NEXT: } 155 // CHECK-TU-NEXT: ], 156 // CHECK-TU-NEXT: "command-line": [ 157 // CHECK-TU: "-fno-implicit-modules", 158 // CHECK-TU-NEXT: "-fno-implicit-module-maps", 159 // CHECK-TU-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU]]/ModTU-{{.*}}.pcm" 160 // CHECK-TU-NEXT: ], 161 // CHECK-TU-NEXT: "file-deps": [ 162 // CHECK-TU-NEXT: "[[PREFIX]]/tu.c", 163 // CHECK-TU-NEXT: "[[PREFIX]]/pch.h.gch" 164 // CHECK-TU-NEXT: ], 165 // CHECK-TU-NEXT: "input-file": "[[PREFIX]]/tu.c" 166 // CHECK-TU-NEXT: } 167 // CHECK-TU-NEXT: ] 168 // CHECK-TU-NEXT: } 169 170 // Explicitly build the TU: 171 // 172 // RUN: %deps-to-rsp %t/result_tu.json --module-name=ModTU > %t/mod_tu.cc1.rsp 173 // RUN: %deps-to-rsp %t/result_tu.json --tu-index=0 > %t/tu.rsp 174 // 175 // RUN: %clang @%t/mod_tu.cc1.rsp 176 // RUN: %clang @%t/tu.rsp 177 178 // Scan dependencies of the TU that has common modules with the PCH: 179 // 180 // RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_tu_with_common.json > %t/cdb.json 181 // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full \ 182 // RUN: -generate-modules-path-args -module-files-dir %t/build > %t/result_tu_with_common.json 183 // RUN: cat %t/result_tu_with_common.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-TU-WITH-COMMON 184 // 185 // CHECK-TU-WITH-COMMON: { 186 // CHECK-TU-WITH-COMMON-NEXT: "modules": [ 187 // CHECK-TU-WITH-COMMON-NEXT: { 188 // CHECK-TU-WITH-COMMON-NEXT: "clang-module-deps": [], 189 // CHECK-TU-WITH-COMMON-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 190 // CHECK-TU-WITH-COMMON-NEXT: "command-line": [ 191 // CHECK-TU-WITH-COMMON-NEXT: "-cc1", 192 // CHECK-TU-WITH-COMMON: "-emit-module", 193 // CHECK-TU-WITH-COMMON: "-fmodule-file=[[PREFIX]]/build/{{.*}}/ModCommon1-{{.*}}.pcm", 194 // CHECK-TU-WITH-COMMON-NOT: "-fimplicit-module-maps", 195 // CHECK-TU-WITH-COMMON: "-fmodule-name=ModTUWithCommon", 196 // CHECK-TU-WITH-COMMON: "-fno-implicit-modules", 197 // CHECK-TU-WITH-COMMON: ], 198 // CHECK-TU-WITH-COMMON-NEXT: "context-hash": "[[HASH_MOD_TU_WITH_COMMON:.*]]", 199 // CHECK-TU-WITH-COMMON-NEXT: "file-deps": [ 200 // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/mod_tu_with_common.h", 201 // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/module.modulemap" 202 // CHECK-TU-WITH-COMMON-NEXT: ], 203 // CHECK-TU-WITH-COMMON-NEXT: "name": "ModTUWithCommon" 204 // CHECK-TU-WITH-COMMON-NEXT: } 205 // CHECK-TU-WITH-COMMON-NEXT: ], 206 // CHECK-TU-WITH-COMMON-NEXT: "translation-units": [ 207 // CHECK-TU-WITH-COMMON-NEXT: { 208 // CHECK-TU-WITH-COMMON-NEXT: "clang-context-hash": "[[HASH_TU_WITH_COMMON:.*]]", 209 // CHECK-TU-WITH-COMMON-NEXT: "clang-module-deps": [ 210 // CHECK-TU-WITH-COMMON-NEXT: { 211 // CHECK-TU-WITH-COMMON-NEXT: "context-hash": "[[HASH_MOD_TU_WITH_COMMON]]", 212 // CHECK-TU-WITH-COMMON-NEXT: "module-name": "ModTUWithCommon" 213 // CHECK-TU-WITH-COMMON-NEXT: } 214 // CHECK-TU-WITH-COMMON-NEXT: ], 215 // CHECK-TU-WITH-COMMON-NEXT: "command-line": [ 216 // CHECK-TU-WITH-COMMON: "-fno-implicit-modules", 217 // CHECK-TU-WITH-COMMON-NEXT: "-fno-implicit-module-maps", 218 // CHECK-TU-WITH-COMMON-NEXT: "-fmodule-file=[[PREFIX]]/build/{{.*}}/ModCommon2-{{.*}}.pcm", 219 // CHECK-TU-WITH-COMMON-NEXT: "-fmodule-file=[[PREFIX]]/build/[[HASH_MOD_TU_WITH_COMMON]]/ModTUWithCommon-{{.*}}.pcm" 220 // CHECK-TU-WITH-COMMON-NEXT: ], 221 // CHECK-TU-WITH-COMMON-NEXT: "file-deps": [ 222 // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/tu_with_common.c", 223 // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/pch.h.gch" 224 // CHECK-TU-WITH-COMMON-NEXT: ], 225 // CHECK-TU-WITH-COMMON-NEXT: "input-file": "[[PREFIX]]/tu_with_common.c" 226 // CHECK-TU-WITH-COMMON-NEXT: } 227 // CHECK-TU-WITH-COMMON-NEXT: ] 228 // CHECK-TU-WITH-COMMON-NEXT: } 229 230 // Explicitly build the TU that has common modules with the PCH: 231 // 232 // RUN: %deps-to-rsp %t/result_tu_with_common.json --module-name=ModTUWithCommon > %t/mod_tu_with_common.cc1.rsp 233 // RUN: %deps-to-rsp %t/result_tu_with_common.json --tu-index=0 > %t/tu_with_common.rsp 234 // 235 // RUN: %clang @%t/mod_tu_with_common.cc1.rsp 236 // RUN: %clang @%t/tu_with_common.rsp 237