106d4a763SSteven Wan // Unsupported on AIX because we don't support the requisite "__clangast" 206d4a763SSteven Wan // section in XCOFF yet. 364e4d03cSPaul Robinson // UNSUPPORTED: target={{.*}}-aix{{.*}} 406d4a763SSteven Wan 5de07b1e8SJan Svoboda // RUN: rm -rf %t && mkdir %t 6de07b1e8SJan Svoboda // RUN: cp %S/Inputs/modules-pch/* %t 7de07b1e8SJan Svoboda 84629554fSJan Svoboda // Scan dependencies of the PCH: 94629554fSJan Svoboda // 10ef1b22a2SDmitri Gribenko // RUN: rm -f %t/cdb_pch.json 1165c01348SJan Svoboda // RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_pch.json > %t/cdb_pch.json 1265c01348SJan Svoboda // RUN: clang-scan-deps -compilation-database %t/cdb_pch.json -format experimental-full \ 1371e32d5cSJan Svoboda // RUN: -module-files-dir %t/build > %t/result_pch.json 14c4b13f7aSJan Svoboda // RUN: cat %t/result_pch.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-PCH 154629554fSJan Svoboda // 16d8bab69eSJan Svoboda // Check we didn't build the PCH during dependency scanning. 17f726da11SFangrui Song // RUN: not cat %/t/pch.h.pch 18d8bab69eSJan Svoboda // 19c4b13f7aSJan Svoboda // CHECK-PCH: { 204629554fSJan Svoboda // CHECK-PCH-NEXT: "modules": [ 214629554fSJan Svoboda // CHECK-PCH-NEXT: { 224629554fSJan Svoboda // CHECK-PCH-NEXT: "clang-module-deps": [], 234629554fSJan Svoboda // CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 244629554fSJan Svoboda // CHECK-PCH-NEXT: "command-line": [ 254629554fSJan Svoboda // CHECK-PCH: ], 264629554fSJan Svoboda // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_1:.*]]", 274629554fSJan Svoboda // CHECK-PCH-NEXT: "file-deps": [ 28*9d4837f4SJan Svoboda // CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap", 29*9d4837f4SJan Svoboda // CHECK-PCH-NEXT: "[[PREFIX]]/mod_common_1.h" 304629554fSJan Svoboda // CHECK-PCH-NEXT: ], 3168eb3b20SArtem Chikin // CHECK-PCH-NEXT: "link-libraries": [], 324629554fSJan Svoboda // CHECK-PCH-NEXT: "name": "ModCommon1" 334629554fSJan Svoboda // CHECK-PCH-NEXT: }, 344629554fSJan Svoboda // CHECK-PCH-NEXT: { 354629554fSJan Svoboda // CHECK-PCH-NEXT: "clang-module-deps": [], 364629554fSJan Svoboda // CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 374629554fSJan Svoboda // CHECK-PCH-NEXT: "command-line": [ 384629554fSJan Svoboda // CHECK-PCH: ], 394629554fSJan Svoboda // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_2:.*]]", 404629554fSJan Svoboda // CHECK-PCH-NEXT: "file-deps": [ 41*9d4837f4SJan Svoboda // CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap", 42*9d4837f4SJan Svoboda // CHECK-PCH-NEXT: "[[PREFIX]]/mod_common_2.h" 434629554fSJan Svoboda // CHECK-PCH-NEXT: ], 4468eb3b20SArtem Chikin // CHECK-PCH-NEXT: "link-libraries": [], 454629554fSJan Svoboda // CHECK-PCH-NEXT: "name": "ModCommon2" 464629554fSJan Svoboda // CHECK-PCH-NEXT: }, 474629554fSJan Svoboda // CHECK-PCH-NEXT: { 484629554fSJan Svoboda // CHECK-PCH-NEXT: "clang-module-deps": [ 494629554fSJan Svoboda // CHECK-PCH-NEXT: { 504629554fSJan Svoboda // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_2]]", 514629554fSJan Svoboda // CHECK-PCH-NEXT: "module-name": "ModCommon2" 524629554fSJan Svoboda // CHECK-PCH-NEXT: } 534629554fSJan Svoboda // CHECK-PCH-NEXT: ], 544629554fSJan Svoboda // CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 554629554fSJan Svoboda // CHECK-PCH-NEXT: "command-line": [ 564629554fSJan Svoboda // CHECK-PCH: ], 574629554fSJan Svoboda // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_PCH:.*]]", 584629554fSJan Svoboda // CHECK-PCH-NEXT: "file-deps": [ 59*9d4837f4SJan Svoboda // CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap", 60*9d4837f4SJan Svoboda // CHECK-PCH-NEXT: "[[PREFIX]]/mod_pch.h" 614629554fSJan Svoboda // CHECK-PCH-NEXT: ], 6268eb3b20SArtem Chikin // CHECK-PCH-NEXT: "link-libraries": [], 634629554fSJan Svoboda // CHECK-PCH-NEXT: "name": "ModPCH" 644629554fSJan Svoboda // CHECK-PCH-NEXT: } 654629554fSJan Svoboda // CHECK-PCH-NEXT: ], 664629554fSJan Svoboda // CHECK-PCH-NEXT: "translation-units": [ 674629554fSJan Svoboda // CHECK-PCH-NEXT: { 6883902c40SBen Langmuir // CHECK-PCH: "clang-context-hash": "[[HASH_PCH:.*]]", 694629554fSJan Svoboda // CHECK-PCH-NEXT: "clang-module-deps": [ 704629554fSJan Svoboda // CHECK-PCH-NEXT: { 714629554fSJan Svoboda // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_1]]", 724629554fSJan Svoboda // CHECK-PCH-NEXT: "module-name": "ModCommon1" 734629554fSJan Svoboda // CHECK-PCH-NEXT: }, 744629554fSJan Svoboda // CHECK-PCH-NEXT: { 754629554fSJan Svoboda // CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_PCH]]", 764629554fSJan Svoboda // CHECK-PCH-NEXT: "module-name": "ModPCH" 774629554fSJan Svoboda // CHECK-PCH-NEXT: } 784629554fSJan Svoboda // CHECK-PCH-NEXT: ], 794629554fSJan Svoboda // CHECK-PCH-NEXT: "command-line": [ 80be795ee1SJan Svoboda // CHECK-PCH: ], 8183902c40SBen Langmuir // CHECK-PCH: "file-deps": [ 824629554fSJan Svoboda // CHECK-PCH-NEXT: "[[PREFIX]]/pch.h" 834629554fSJan Svoboda // CHECK-PCH-NEXT: ], 844629554fSJan Svoboda // CHECK-PCH-NEXT: "input-file": "[[PREFIX]]/pch.h" 854629554fSJan Svoboda // CHECK-PCH-NEXT: } 864629554fSJan Svoboda 87de07b1e8SJan Svoboda // Explicitly build the PCH: 88de07b1e8SJan Svoboda // 8926053ce0SJan Svoboda // RUN: %deps-to-rsp %t/result_pch.json --module-name=ModCommon1 > %t/mod_common_1.cc1.rsp 9026053ce0SJan Svoboda // RUN: %deps-to-rsp %t/result_pch.json --module-name=ModCommon2 > %t/mod_common_2.cc1.rsp 9126053ce0SJan Svoboda // RUN: %deps-to-rsp %t/result_pch.json --module-name=ModPCH > %t/mod_pch.cc1.rsp 9226053ce0SJan Svoboda // RUN: %deps-to-rsp %t/result_pch.json --tu-index=0 > %t/pch.rsp 934629554fSJan Svoboda // 944629554fSJan Svoboda // RUN: %clang @%t/mod_common_1.cc1.rsp 954629554fSJan Svoboda // RUN: %clang @%t/mod_common_2.cc1.rsp 964629554fSJan Svoboda // RUN: %clang @%t/mod_pch.cc1.rsp 9719017c24SJan Svoboda // RUN: %clang @%t/pch.rsp 98de07b1e8SJan Svoboda 99de07b1e8SJan Svoboda // Scan dependencies of the TU: 100de07b1e8SJan Svoboda // 101ef1b22a2SDmitri Gribenko // RUN: rm -f %t/cdb_tu.json 10265c01348SJan Svoboda // RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_tu.json > %t/cdb_tu.json 10365c01348SJan Svoboda // RUN: clang-scan-deps -compilation-database %t/cdb_tu.json -format experimental-full \ 10471e32d5cSJan Svoboda // RUN: -module-files-dir %t/build > %t/result_tu.json 105c4b13f7aSJan Svoboda // RUN: cat %t/result_tu.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-TU 1069223209bSJan Svoboda // 107c4b13f7aSJan Svoboda // CHECK-TU: { 1089223209bSJan Svoboda // CHECK-TU-NEXT: "modules": [ 1099223209bSJan Svoboda // CHECK-TU-NEXT: { 1109223209bSJan Svoboda // CHECK-TU-NEXT: "clang-module-deps": [], 1119223209bSJan Svoboda // CHECK-TU-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 1129223209bSJan Svoboda // CHECK-TU-NEXT: "command-line": [ 1139223209bSJan Svoboda // CHECK-TU: ], 1149223209bSJan Svoboda // CHECK-TU-NEXT: "context-hash": "[[HASH_MOD_TU:.*]]", 1159223209bSJan Svoboda // CHECK-TU-NEXT: "file-deps": [ 116*9d4837f4SJan Svoboda // CHECK-TU-NEXT: "[[PREFIX]]/module.modulemap", 117*9d4837f4SJan Svoboda // CHECK-TU-NEXT: "[[PREFIX]]/mod_tu.h" 1189223209bSJan Svoboda // CHECK-TU-NEXT: ], 11968eb3b20SArtem Chikin // CHECK-TU-NEXT: "link-libraries": [], 1209223209bSJan Svoboda // CHECK-TU-NEXT: "name": "ModTU" 1219223209bSJan Svoboda // CHECK-TU-NEXT: } 1229223209bSJan Svoboda // CHECK-TU-NEXT: ], 1239223209bSJan Svoboda // CHECK-TU-NEXT: "translation-units": [ 1249223209bSJan Svoboda // CHECK-TU-NEXT: { 12583902c40SBen Langmuir // CHECK-TU: "clang-context-hash": "[[HASH_TU:.*]]", 1269223209bSJan Svoboda // CHECK-TU-NEXT: "clang-module-deps": [ 1279223209bSJan Svoboda // CHECK-TU-NEXT: { 1289223209bSJan Svoboda // CHECK-TU-NEXT: "context-hash": "[[HASH_MOD_TU]]", 1299223209bSJan Svoboda // CHECK-TU-NEXT: "module-name": "ModTU" 1309223209bSJan Svoboda // CHECK-TU-NEXT: } 1319223209bSJan Svoboda // CHECK-TU-NEXT: ], 1329223209bSJan Svoboda // CHECK-TU-NEXT: "command-line": [ 133be795ee1SJan Svoboda // CHECK-TU: ], 13483902c40SBen Langmuir // CHECK-TU: "file-deps": [ 1359223209bSJan Svoboda // CHECK-TU-NEXT: "[[PREFIX]]/tu.c", 136f726da11SFangrui Song // CHECK-TU-NEXT: "[[PREFIX]]/pch.h.pch" 1379223209bSJan Svoboda // CHECK-TU-NEXT: ], 1389223209bSJan Svoboda // CHECK-TU-NEXT: "input-file": "[[PREFIX]]/tu.c" 1399223209bSJan Svoboda // CHECK-TU-NEXT: } 1404629554fSJan Svoboda 1414629554fSJan Svoboda // Explicitly build the TU: 1424629554fSJan Svoboda // 14326053ce0SJan Svoboda // RUN: %deps-to-rsp %t/result_tu.json --module-name=ModTU > %t/mod_tu.cc1.rsp 14426053ce0SJan Svoboda // RUN: %deps-to-rsp %t/result_tu.json --tu-index=0 > %t/tu.rsp 1454629554fSJan Svoboda // 1464629554fSJan Svoboda // RUN: %clang @%t/mod_tu.cc1.rsp 14719017c24SJan Svoboda // RUN: %clang @%t/tu.rsp 1484629554fSJan Svoboda 1494629554fSJan Svoboda // Scan dependencies of the TU that has common modules with the PCH: 1504629554fSJan Svoboda // 151ef1b22a2SDmitri Gribenko // RUN: rm -f %t/cdb_tu_with_common.json 15265c01348SJan Svoboda // RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_tu_with_common.json > %t/cdb_tu_with_common.json 15365c01348SJan Svoboda // RUN: clang-scan-deps -compilation-database %t/cdb_tu_with_common.json -format experimental-full \ 15471e32d5cSJan Svoboda // RUN: -module-files-dir %t/build > %t/result_tu_with_common.json 155c4b13f7aSJan Svoboda // RUN: cat %t/result_tu_with_common.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-TU-WITH-COMMON 1564629554fSJan Svoboda // 157c4b13f7aSJan Svoboda // CHECK-TU-WITH-COMMON: { 1584629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "modules": [ 1594629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: { 1604629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "clang-module-deps": [], 1614629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", 1624629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "command-line": [ 1634629554fSJan Svoboda // CHECK-TU-WITH-COMMON: ], 1644629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "context-hash": "[[HASH_MOD_TU_WITH_COMMON:.*]]", 1654629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "file-deps": [ 166*9d4837f4SJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/module.modulemap", 167*9d4837f4SJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/mod_tu_with_common.h" 1684629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: ], 16968eb3b20SArtem Chikin // CHECK-TU-WITH-COMMON-NEXT: "link-libraries": [], 1704629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "name": "ModTUWithCommon" 1714629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: } 1724629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: ], 1734629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "translation-units": [ 1744629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: { 17583902c40SBen Langmuir // CHECK-TU-WITH-COMMON: "clang-context-hash": "[[HASH_TU_WITH_COMMON:.*]]", 1764629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "clang-module-deps": [ 1774629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: { 1784629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "context-hash": "[[HASH_MOD_TU_WITH_COMMON]]", 1794629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "module-name": "ModTUWithCommon" 1804629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: } 1814629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: ], 1824629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "command-line": [ 183be795ee1SJan Svoboda // CHECK-TU-WITH-COMMON: "-fmodule-file=[[PREFIX]]/build/{{.*}}/ModCommon2-{{.*}}.pcm" 184be795ee1SJan Svoboda // CHECK-TU-WITH-COMMON: ], 18583902c40SBen Langmuir // CHECK-TU-WITH-COMMON: "file-deps": [ 1864629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/tu_with_common.c", 187f726da11SFangrui Song // CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/pch.h.pch" 1884629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: ], 1894629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: "input-file": "[[PREFIX]]/tu_with_common.c" 1904629554fSJan Svoboda // CHECK-TU-WITH-COMMON-NEXT: } 1914629554fSJan Svoboda 1924629554fSJan Svoboda // Explicitly build the TU that has common modules with the PCH: 1934629554fSJan Svoboda // 19426053ce0SJan Svoboda // RUN: %deps-to-rsp %t/result_tu_with_common.json --module-name=ModTUWithCommon > %t/mod_tu_with_common.cc1.rsp 19526053ce0SJan Svoboda // RUN: %deps-to-rsp %t/result_tu_with_common.json --tu-index=0 > %t/tu_with_common.rsp 1964629554fSJan Svoboda // 1974629554fSJan Svoboda // RUN: %clang @%t/mod_tu_with_common.cc1.rsp 19819017c24SJan Svoboda // RUN: %clang @%t/tu_with_common.rsp 199