199 lines · c
1// Unsupported on AIX because we don't support the requisite "__clangast"2// section in XCOFF yet.3// UNSUPPORTED: target={{.*}}-aix{{.*}}4 5// RUN: rm -rf %t && mkdir %t6// RUN: cp %S/Inputs/modules-pch/* %t7 8// Scan dependencies of the PCH:9//10// RUN: rm -f %t/cdb_pch.json11// RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_pch.json > %t/cdb_pch.json12// RUN: clang-scan-deps -compilation-database %t/cdb_pch.json -format experimental-full \13// RUN: -module-files-dir %t/build > %t/result_pch.json14// RUN: cat %t/result_pch.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-PCH15//16// Check we didn't build the PCH during dependency scanning.17// RUN: not cat %/t/pch.h.pch18//19// CHECK-PCH: {20// CHECK-PCH-NEXT: "modules": [21// CHECK-PCH-NEXT: {22// CHECK-PCH-NEXT: "clang-module-deps": [],23// CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",24// CHECK-PCH-NEXT: "command-line": [25// CHECK-PCH: ],26// CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_1:.*]]",27// CHECK-PCH-NEXT: "file-deps": [28// CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap",29// CHECK-PCH-NEXT: "[[PREFIX]]/mod_common_1.h"30// CHECK-PCH-NEXT: ],31// CHECK-PCH-NEXT: "link-libraries": [],32// CHECK-PCH-NEXT: "name": "ModCommon1"33// CHECK-PCH-NEXT: },34// CHECK-PCH-NEXT: {35// CHECK-PCH-NEXT: "clang-module-deps": [],36// CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",37// CHECK-PCH-NEXT: "command-line": [38// CHECK-PCH: ],39// CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_2:.*]]",40// CHECK-PCH-NEXT: "file-deps": [41// CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap",42// CHECK-PCH-NEXT: "[[PREFIX]]/mod_common_2.h"43// CHECK-PCH-NEXT: ],44// CHECK-PCH-NEXT: "link-libraries": [],45// CHECK-PCH-NEXT: "name": "ModCommon2"46// CHECK-PCH-NEXT: },47// CHECK-PCH-NEXT: {48// CHECK-PCH-NEXT: "clang-module-deps": [49// CHECK-PCH-NEXT: {50// CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_2]]",51// CHECK-PCH-NEXT: "module-name": "ModCommon2"52// CHECK-PCH-NEXT: }53// CHECK-PCH-NEXT: ],54// CHECK-PCH-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",55// CHECK-PCH-NEXT: "command-line": [56// CHECK-PCH: ],57// CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_PCH:.*]]",58// CHECK-PCH-NEXT: "file-deps": [59// CHECK-PCH-NEXT: "[[PREFIX]]/module.modulemap",60// CHECK-PCH-NEXT: "[[PREFIX]]/mod_pch.h"61// CHECK-PCH-NEXT: ],62// CHECK-PCH-NEXT: "link-libraries": [],63// CHECK-PCH-NEXT: "name": "ModPCH"64// CHECK-PCH-NEXT: }65// CHECK-PCH-NEXT: ],66// CHECK-PCH-NEXT: "translation-units": [67// CHECK-PCH-NEXT: {68// CHECK-PCH: "clang-context-hash": "[[HASH_PCH:.*]]",69// CHECK-PCH-NEXT: "clang-module-deps": [70// CHECK-PCH-NEXT: {71// CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_COMMON_1]]",72// CHECK-PCH-NEXT: "module-name": "ModCommon1"73// CHECK-PCH-NEXT: },74// CHECK-PCH-NEXT: {75// CHECK-PCH-NEXT: "context-hash": "[[HASH_MOD_PCH]]",76// CHECK-PCH-NEXT: "module-name": "ModPCH"77// CHECK-PCH-NEXT: }78// CHECK-PCH-NEXT: ],79// CHECK-PCH-NEXT: "command-line": [80// CHECK-PCH: ],81// CHECK-PCH: "file-deps": [82// CHECK-PCH-NEXT: "[[PREFIX]]/pch.h"83// CHECK-PCH-NEXT: ],84// CHECK-PCH-NEXT: "input-file": "[[PREFIX]]/pch.h"85// CHECK-PCH-NEXT: }86 87// Explicitly build the PCH:88//89// RUN: %deps-to-rsp %t/result_pch.json --module-name=ModCommon1 > %t/mod_common_1.cc1.rsp90// RUN: %deps-to-rsp %t/result_pch.json --module-name=ModCommon2 > %t/mod_common_2.cc1.rsp91// RUN: %deps-to-rsp %t/result_pch.json --module-name=ModPCH > %t/mod_pch.cc1.rsp92// RUN: %deps-to-rsp %t/result_pch.json --tu-index=0 > %t/pch.rsp93//94// RUN: %clang @%t/mod_common_1.cc1.rsp95// RUN: %clang @%t/mod_common_2.cc1.rsp96// RUN: %clang @%t/mod_pch.cc1.rsp97// RUN: %clang @%t/pch.rsp98 99// Scan dependencies of the TU:100//101// RUN: rm -f %t/cdb_tu.json102// RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_tu.json > %t/cdb_tu.json103// RUN: clang-scan-deps -compilation-database %t/cdb_tu.json -format experimental-full \104// RUN: -module-files-dir %t/build > %t/result_tu.json105// RUN: cat %t/result_tu.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-TU106//107// CHECK-TU: {108// CHECK-TU-NEXT: "modules": [109// CHECK-TU-NEXT: {110// CHECK-TU-NEXT: "clang-module-deps": [],111// CHECK-TU-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",112// CHECK-TU-NEXT: "command-line": [113// CHECK-TU: ],114// CHECK-TU-NEXT: "context-hash": "[[HASH_MOD_TU:.*]]",115// CHECK-TU-NEXT: "file-deps": [116// CHECK-TU-NEXT: "[[PREFIX]]/module.modulemap",117// CHECK-TU-NEXT: "[[PREFIX]]/mod_tu.h"118// CHECK-TU-NEXT: ],119// CHECK-TU-NEXT: "link-libraries": [],120// CHECK-TU-NEXT: "name": "ModTU"121// CHECK-TU-NEXT: }122// CHECK-TU-NEXT: ],123// CHECK-TU-NEXT: "translation-units": [124// CHECK-TU-NEXT: {125// CHECK-TU: "clang-context-hash": "[[HASH_TU:.*]]",126// CHECK-TU-NEXT: "clang-module-deps": [127// CHECK-TU-NEXT: {128// CHECK-TU-NEXT: "context-hash": "[[HASH_MOD_TU]]",129// CHECK-TU-NEXT: "module-name": "ModTU"130// CHECK-TU-NEXT: }131// CHECK-TU-NEXT: ],132// CHECK-TU-NEXT: "command-line": [133// CHECK-TU: ],134// CHECK-TU: "file-deps": [135// CHECK-TU-NEXT: "[[PREFIX]]/tu.c",136// CHECK-TU-NEXT: "[[PREFIX]]/pch.h.pch"137// CHECK-TU-NEXT: ],138// CHECK-TU-NEXT: "input-file": "[[PREFIX]]/tu.c"139// CHECK-TU-NEXT: }140 141// Explicitly build the TU:142//143// RUN: %deps-to-rsp %t/result_tu.json --module-name=ModTU > %t/mod_tu.cc1.rsp144// RUN: %deps-to-rsp %t/result_tu.json --tu-index=0 > %t/tu.rsp145//146// RUN: %clang @%t/mod_tu.cc1.rsp147// RUN: %clang @%t/tu.rsp148 149// Scan dependencies of the TU that has common modules with the PCH:150//151// RUN: rm -f %t/cdb_tu_with_common.json152// RUN: sed "s|DIR|%/t|g" %S/Inputs/modules-pch/cdb_tu_with_common.json > %t/cdb_tu_with_common.json153// RUN: clang-scan-deps -compilation-database %t/cdb_tu_with_common.json -format experimental-full \154// RUN: -module-files-dir %t/build > %t/result_tu_with_common.json155// RUN: cat %t/result_tu_with_common.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t -check-prefix=CHECK-TU-WITH-COMMON156//157// CHECK-TU-WITH-COMMON: {158// CHECK-TU-WITH-COMMON-NEXT: "modules": [159// CHECK-TU-WITH-COMMON-NEXT: {160// CHECK-TU-WITH-COMMON-NEXT: "clang-module-deps": [],161// CHECK-TU-WITH-COMMON-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",162// CHECK-TU-WITH-COMMON-NEXT: "command-line": [163// CHECK-TU-WITH-COMMON: ],164// CHECK-TU-WITH-COMMON-NEXT: "context-hash": "[[HASH_MOD_TU_WITH_COMMON:.*]]",165// CHECK-TU-WITH-COMMON-NEXT: "file-deps": [166// CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/module.modulemap",167// CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/mod_tu_with_common.h"168// CHECK-TU-WITH-COMMON-NEXT: ],169// CHECK-TU-WITH-COMMON-NEXT: "link-libraries": [],170// CHECK-TU-WITH-COMMON-NEXT: "name": "ModTUWithCommon"171// CHECK-TU-WITH-COMMON-NEXT: }172// CHECK-TU-WITH-COMMON-NEXT: ],173// CHECK-TU-WITH-COMMON-NEXT: "translation-units": [174// CHECK-TU-WITH-COMMON-NEXT: {175// CHECK-TU-WITH-COMMON: "clang-context-hash": "[[HASH_TU_WITH_COMMON:.*]]",176// CHECK-TU-WITH-COMMON-NEXT: "clang-module-deps": [177// CHECK-TU-WITH-COMMON-NEXT: {178// CHECK-TU-WITH-COMMON-NEXT: "context-hash": "[[HASH_MOD_TU_WITH_COMMON]]",179// CHECK-TU-WITH-COMMON-NEXT: "module-name": "ModTUWithCommon"180// CHECK-TU-WITH-COMMON-NEXT: }181// CHECK-TU-WITH-COMMON-NEXT: ],182// CHECK-TU-WITH-COMMON-NEXT: "command-line": [183// CHECK-TU-WITH-COMMON: "-fmodule-file=[[PREFIX]]/build/{{.*}}/ModCommon2-{{.*}}.pcm"184// CHECK-TU-WITH-COMMON: ],185// CHECK-TU-WITH-COMMON: "file-deps": [186// CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/tu_with_common.c",187// CHECK-TU-WITH-COMMON-NEXT: "[[PREFIX]]/pch.h.pch"188// CHECK-TU-WITH-COMMON-NEXT: ],189// CHECK-TU-WITH-COMMON-NEXT: "input-file": "[[PREFIX]]/tu_with_common.c"190// CHECK-TU-WITH-COMMON-NEXT: }191 192// Explicitly build the TU that has common modules with the PCH:193//194// RUN: %deps-to-rsp %t/result_tu_with_common.json --module-name=ModTUWithCommon > %t/mod_tu_with_common.cc1.rsp195// RUN: %deps-to-rsp %t/result_tu_with_common.json --tu-index=0 > %t/tu_with_common.rsp196//197// RUN: %clang @%t/mod_tu_with_common.cc1.rsp198// RUN: %clang @%t/tu_with_common.rsp199