[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / ClangScanDeps / modules-header-sharing.m
blob31ef351ec38b7316593d7e52b96200b00307b4b0
1 // There are some edge-cases where Clang depends on knowing the module whose implementation it's currently building.
2 // This test makes sure scanner always reports the corresponding module map.
4 // RUN: rm -rf %t
5 // RUN: split-file %s %t
7 //--- frameworks/A.framework/Modules/module.modulemap
8 framework module A { umbrella header "A.h" }
9 //--- frameworks/B.framework/Modules/module.modulemap
10 framework module B { umbrella header "B.h" }
11 //--- frameworks/A.framework/Headers/A.h
12 //--- frameworks/B.framework/Headers/B.h
13 //--- frameworks/A.framework/Modules/module.private.modulemap
14 framework module A_Private { umbrella header "A_Private.h" }
15 //--- frameworks/B.framework/Modules/module.private.modulemap
16 framework module B_Private { umbrella header "B_Private.h" }
17 //--- frameworks/A.framework/PrivateHeaders/A_Private.h
18 #import <A/H.h>
19 //--- frameworks/B.framework/PrivateHeaders/B_Private.h
20 #import <B/H.h>
22 //--- shared/H.h
24 //--- overlay.json.template
26   "case-sensitive": "false",
27   "version": 0,
28   "roots": [
29     {
30       "contents": [
31         {
32           "external-contents": "DIR/shared/H.h",
33           "name": "H.h",
34           "type": "file"
35         }
36       ],
37       "name": "DIR/frameworks/A.framework/PrivateHeaders",
38       "type": "directory"
39     },
40     {
41       "contents": [
42         {
43           "external-contents": "DIR/shared/H.h",
44           "name": "H.h",
45           "type": "file"
46         }
47       ],
48       "name": "DIR/frameworks/B.framework/PrivateHeaders",
49       "type": "directory"
50     }
51   ]
54 //--- cdb.json.template
56   "file": "DIR/tu.m",
57   "directory": "DIR",
58   "command": "clang -fmodules -fmodules-cache-path=DIR/cache -fmodule-name=A -ivfsoverlay DIR/overlay.json -F DIR/frameworks -c DIR/tu.m -o DIR/tu.o"
61 //--- tu.m
62 @import B;
63 #import <A/H.h>
64 #import <B/H.h>
66 // RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
67 // RUN: sed -e "s|DIR|%/t|g" %t/overlay.json.template > %t/overlay.json
69 // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/result.json
70 // RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t
71 // CHECK:      {
72 // CHECK:        "translation-units": [
73 // CHECK-NEXT:     {
74 // CHECK-NEXT:       "commands": [
75 // CHECK:              {
76 // CHECK:                "command-line": [
77 // CHECK:                  "-fmodule-map-file=[[PREFIX]]/frameworks/A.framework/Modules/module.modulemap",
78 // CHECK:                  "-fmodule-name=A",
79 // CHECK:                ],
80 // CHECK:                "file-deps": [
81 // CHECK-NEXT:             "[[PREFIX]]/tu.m",
82 // CHECK-NEXT:             "[[PREFIX]]/shared/H.h"
83 // CHECK-NEXT:           ],
84 // CHECK-NEXT:           "input-file": "[[PREFIX]]/tu.m"
85 // CHECK-NEXT:         }
86 // CHECK:            ]
87 // CHECK:          }
89 // RUN: %deps-to-rsp %t/result.json --module-name=B > %t/B.cc1.rsp
90 // RUN: %clang @%t/B.cc1.rsp
92 // RUN: %deps-to-rsp %t/result.json --tu-index=0 > %t/tu.rsp
93 // RUN: %clang @%t/tu.rsp