diff --git a/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h b/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h deleted file mode 100644 diff --git a/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Headers/Inferred.h b/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Headers/Inferred.h deleted file mode 100644 --- a/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Headers/Inferred.h +++ /dev/null @@ -1 +0,0 @@ -typedef int inferred; diff --git a/clang/test/ClangScanDeps/Inputs/modules_inferred_cdb.json b/clang/test/ClangScanDeps/Inputs/modules_inferred_cdb.json deleted file mode 100644 --- a/clang/test/ClangScanDeps/Inputs/modules_inferred_cdb.json +++ /dev/null @@ -1,7 +0,0 @@ -[ -{ - "directory": "DIR", - "command": "clang -E DIR/modules_cdb_input.cpp -FFRAMEWORKS -fmodules -fcxx-modules -fmodules-cache-path=DIR/module-cache -fimplicit-modules -fimplicit-module-maps -pedantic -Werror", - "file": "DIR/modules_cdb_input.cpp" -} -] diff --git a/clang/test/ClangScanDeps/modules-inferred-explicit-build.m b/clang/test/ClangScanDeps/modules-inferred-explicit-build.m deleted file mode 100644 --- a/clang/test/ClangScanDeps/modules-inferred-explicit-build.m +++ /dev/null @@ -1,19 +0,0 @@ -// RUN: rm -rf %t.dir -// RUN: rm -rf %t.cdb -// RUN: mkdir -p %t.dir -// RUN: cp %s %t.dir/modules_cdb_input.cpp -// RUN: sed -e "s|DIR|%/t.dir|g" -e "s|FRAMEWORKS|%/S/Inputs/frameworks|g" -e "s|-E|-x objective-c -E|g" \ -// RUN: %S/Inputs/modules_inferred_cdb.json > %t.cdb -// -// RUN: clang-scan-deps -compilation-database %t.cdb -j 1 -format experimental-full -mode preprocess-dependency-directives > %t.db -// RUN: %deps-to-rsp %t.db --module-name=Inferred > %t.inferred.cc1.rsp -// RUN: %deps-to-rsp %t.db --module-name=System > %t.system.cc1.rsp -// RUN: %deps-to-rsp %t.db --tu-index=0 > %t.tu.rsp -// RUN: %clang @%t.inferred.cc1.rsp -pedantic -Werror -// RUN: %clang @%t.system.cc1.rsp -pedantic -Werror -// RUN: %clang @%t.tu.rsp -pedantic -Werror - -#include -#include - -inferred a = bigger_than_int; diff --git a/clang/test/ClangScanDeps/modules-inferred.m b/clang/test/ClangScanDeps/modules-inferred.m --- a/clang/test/ClangScanDeps/modules-inferred.m +++ b/clang/test/ClangScanDeps/modules-inferred.m @@ -1,47 +1,73 @@ -// RUN: rm -rf %t.dir -// RUN: rm -rf %t.cdb -// RUN: mkdir -p %t.dir -// RUN: cp %s %t.dir/modules_cdb_input.cpp -// RUN: sed -e "s|DIR|%/t.dir|g" -e "s|FRAMEWORKS|%/S/Inputs/frameworks|g" \ -// RUN: %/S/Inputs/modules_inferred_cdb.json > %t.cdb -// -// RUN: clang-scan-deps -compilation-database %t.cdb -j 1 -format experimental-full \ -// RUN: -mode preprocess-dependency-directives > %t.result -// RUN: cat %t.result | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t.dir -DSOURCEDIR=%/S --check-prefixes=CHECK +// This test checks that inferred frameworks/modules are accounted for in the +// scanner and can be explicitly built by Clang. +// RUN: rm -rf %t +// RUN: split-file %s %t + +//--- frameworks/Inferred.framework/Headers/Inferred.h +typedef int inferred; + +//--- frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h + +//--- frameworks/module.modulemap +framework module * {} + +//--- tu.m #include inferred a = 0; +//--- cdb.json.template +[{ + "directory": "DIR", + "file": "DIR/tu.m", + "command": "clang -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache -F DIR/frameworks -c DIR/tu.m -o DIR/tu.o" +}] + +// RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json +// RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/result.json +// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t + // CHECK: { // CHECK-NEXT: "modules": [ // CHECK-NEXT: { // CHECK-NEXT: "clang-module-deps": [], -// CHECK-NEXT: "clang-modulemap-file": "[[SOURCEDIR]]/Inputs/frameworks/module.modulemap", +// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/module.modulemap", // CHECK-NEXT: "command-line": [ // CHECK: ], -// CHECK-NEXT: "context-hash": "[[HASH_INFERRED:[A-Z0-9]+]]", +// CHECK-NEXT: "context-hash": "{{.*}}", // CHECK-NEXT: "file-deps": [ -// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h", -// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/Inferred.framework/Headers/Inferred.h", -// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/module.modulemap" +// CHECK-NEXT: "[[PREFIX]]/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h", +// CHECK-NEXT: "[[PREFIX]]/frameworks/Inferred.framework/Headers/Inferred.h", +// CHECK-NEXT: "[[PREFIX]]/frameworks/module.modulemap" // CHECK-NEXT: ], // CHECK-NEXT: "name": "Inferred" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-NEXT: "translation-units": [ // CHECK-NEXT: { -// CHECK: "clang-context-hash": "[[HASH_TU:[A-Z0-9]+]]", -// CHECK-NEXT: "clang-module-deps": [ +// CHECK-NEXT: "commands": [ // CHECK-NEXT: { -// CHECK-NEXT: "context-hash": "[[HASH_INFERRED]]", -// CHECK-NEXT: "module-name": "Inferred" +// CHECK-NEXT: "clang-context-hash": "{{.*}}", +// CHECK-NEXT: "clang-module-deps": [ +// CHECK-NEXT: { +// CHECK-NEXT: "context-hash": "{{.*}}", +// CHECK-NEXT: "module-name": "Inferred" +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK-NEXT: "command-line": [ +// CHECK: ], +// CHECK: "file-deps": [ +// CHECK-NEXT: "[[PREFIX]]/tu.m" +// CHECK-NEXT: ], +// CHECK-NEXT: "input-file": "[[PREFIX]]/tu.m" // CHECK-NEXT: } -// CHECK-NEXT: ], -// CHECK-NEXT: "command-line": [ -// CHECK: ], -// CHECK: "file-deps": [ -// CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp" -// CHECK-NEXT: ], -// CHECK-NEXT: "input-file": "[[PREFIX]]/modules_cdb_input.cpp" -// CHECK-NEXT: } +// CHECK: ] +// CHECK: } +// CHECK: ] +// CHECK: } + +// RUN: %deps-to-rsp %t/result.json --module-name=Inferred > %t/Inferred.cc1.rsp +// RUN: %deps-to-rsp %t/result.json --tu-index=0 > %t/tu.rsp +// RUN: %clang @%t/Inferred.cc1.rsp -pedantic -Werror +// RUN: %clang @%t/tu.rsp -pedantic -Werror