|
1 |
| -// RUN: rm -rf %t.dir |
2 |
| -// RUN: rm -rf %t.cdb |
3 |
| -// RUN: mkdir -p %t.dir |
4 |
| -// RUN: cp %s %t.dir/modules_cdb_input.cpp |
5 |
| -// RUN: sed -e "s|DIR|%/t.dir|g" -e "s|FRAMEWORKS|%/S/Inputs/frameworks|g" \ |
6 |
| -// RUN: %/S/Inputs/modules_inferred_cdb.json > %t.cdb |
7 |
| -// |
8 |
| -// RUN: clang-scan-deps -compilation-database %t.cdb -j 1 -format experimental-full \ |
9 |
| -// RUN: -mode preprocess-dependency-directives > %t.result |
10 |
| -// RUN: cat %t.result | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t.dir -DSOURCEDIR=%/S --check-prefixes=CHECK |
| 1 | +// This test checks that inferred frameworks/modules are accounted for in the |
| 2 | +// scanner and can be explicitly built by Clang. |
11 | 3 |
|
| 4 | +// RUN: rm -rf %t |
| 5 | +// RUN: split-file %s %t |
| 6 | + |
| 7 | +//--- frameworks/Inferred.framework/Headers/Inferred.h |
| 8 | +typedef int inferred; |
| 9 | + |
| 10 | +//--- frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h |
| 11 | + |
| 12 | +//--- frameworks/module.modulemap |
| 13 | +framework module * {} |
| 14 | + |
| 15 | +//--- tu.m |
12 | 16 | #include <Inferred/Inferred.h>
|
13 | 17 |
|
14 | 18 | inferred a = 0;
|
15 | 19 |
|
| 20 | +//--- cdb.json.template |
| 21 | +[{ |
| 22 | + "directory": "DIR", |
| 23 | + "file": "DIR/tu.m", |
| 24 | + "command": "clang -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache -F DIR/frameworks -c DIR/tu.m -o DIR/tu.o" |
| 25 | +}] |
| 26 | + |
| 27 | +// RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json |
| 28 | +// RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/result.json |
| 29 | +// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t |
| 30 | + |
16 | 31 | // CHECK: {
|
17 | 32 | // CHECK-NEXT: "modules": [
|
18 | 33 | // CHECK-NEXT: {
|
19 | 34 | // CHECK-NEXT: "clang-module-deps": [],
|
20 |
| -// CHECK-NEXT: "clang-modulemap-file": "[[SOURCEDIR]]/Inputs/frameworks/module.modulemap", |
| 35 | +// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/frameworks/module.modulemap", |
21 | 36 | // CHECK-NEXT: "command-line": [
|
22 | 37 | // CHECK: ],
|
23 |
| -// CHECK-NEXT: "context-hash": "[[HASH_INFERRED:[A-Z0-9]+]]", |
| 38 | +// CHECK-NEXT: "context-hash": "{{.*}}", |
24 | 39 | // CHECK-NEXT: "file-deps": [
|
25 |
| -// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h", |
26 |
| -// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/Inferred.framework/Headers/Inferred.h", |
27 |
| -// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/module.modulemap" |
| 40 | +// CHECK-NEXT: "[[PREFIX]]/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h", |
| 41 | +// CHECK-NEXT: "[[PREFIX]]/frameworks/Inferred.framework/Headers/Inferred.h", |
| 42 | +// CHECK-NEXT: "[[PREFIX]]/frameworks/module.modulemap" |
28 | 43 | // CHECK-NEXT: ],
|
29 | 44 | // CHECK-NEXT: "name": "Inferred"
|
30 | 45 | // CHECK-NEXT: }
|
31 | 46 | // CHECK-NEXT: ],
|
32 | 47 | // CHECK-NEXT: "translation-units": [
|
33 | 48 | // CHECK-NEXT: {
|
34 |
| -// CHECK: "clang-context-hash": "[[HASH_TU:[A-Z0-9]+]]", |
35 |
| -// CHECK-NEXT: "clang-module-deps": [ |
| 49 | +// CHECK-NEXT: "commands": [ |
36 | 50 | // CHECK-NEXT: {
|
37 |
| -// CHECK-NEXT: "context-hash": "[[HASH_INFERRED]]", |
38 |
| -// CHECK-NEXT: "module-name": "Inferred" |
| 51 | +// CHECK-NEXT: "clang-context-hash": "{{.*}}", |
| 52 | +// CHECK-NEXT: "clang-module-deps": [ |
| 53 | +// CHECK-NEXT: { |
| 54 | +// CHECK-NEXT: "context-hash": "{{.*}}", |
| 55 | +// CHECK-NEXT: "module-name": "Inferred" |
| 56 | +// CHECK-NEXT: } |
| 57 | +// CHECK-NEXT: ], |
| 58 | +// CHECK-NEXT: "command-line": [ |
| 59 | +// CHECK: ], |
| 60 | +// CHECK: "file-deps": [ |
| 61 | +// CHECK-NEXT: "[[PREFIX]]/tu.m" |
| 62 | +// CHECK-NEXT: ], |
| 63 | +// CHECK-NEXT: "input-file": "[[PREFIX]]/tu.m" |
39 | 64 | // CHECK-NEXT: }
|
40 |
| -// CHECK-NEXT: ], |
41 |
| -// CHECK-NEXT: "command-line": [ |
42 |
| -// CHECK: ], |
43 |
| -// CHECK: "file-deps": [ |
44 |
| -// CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp" |
45 |
| -// CHECK-NEXT: ], |
46 |
| -// CHECK-NEXT: "input-file": "[[PREFIX]]/modules_cdb_input.cpp" |
47 |
| -// CHECK-NEXT: } |
| 65 | +// CHECK: ] |
| 66 | +// CHECK: } |
| 67 | +// CHECK: ] |
| 68 | +// CHECK: } |
| 69 | + |
| 70 | +// RUN: %deps-to-rsp %t/result.json --module-name=Inferred > %t/Inferred.cc1.rsp |
| 71 | +// RUN: %deps-to-rsp %t/result.json --tu-index=0 > %t/tu.rsp |
| 72 | +// RUN: %clang @%t/Inferred.cc1.rsp -pedantic -Werror |
| 73 | +// RUN: %clang @%t/tu.rsp -pedantic -Werror |
0 commit comments