xref: /llvm-project/clang/test/ClangScanDeps/modules-incomplete-umbrella.c (revision 9d4837f47c48c634d4a0ac799188e1f5332495ef)
1002bfdd6SJan Svoboda // This test checks that modules loaded during compilation (but not imported)
2002bfdd6SJan Svoboda // are still reported as dependencies.
3002bfdd6SJan Svoboda 
4002bfdd6SJan Svoboda // RUN: rm -rf %t && mkdir %t
5002bfdd6SJan Svoboda // RUN: split-file %s %t
6002bfdd6SJan Svoboda 
7002bfdd6SJan Svoboda //--- frameworks/FW.framework/Modules/module.modulemap
8002bfdd6SJan Svoboda framework module FW {
9002bfdd6SJan Svoboda   umbrella header "FW.h"
10002bfdd6SJan Svoboda   module * { export * }
11002bfdd6SJan Svoboda }
12002bfdd6SJan Svoboda //--- frameworks/FW.framework/Headers/FW.h
13002bfdd6SJan Svoboda //--- frameworks/FW.framework/Modules/module.private.modulemap
14002bfdd6SJan Svoboda framework module FW_Private {
15002bfdd6SJan Svoboda   umbrella header "FW_Private.h"
16002bfdd6SJan Svoboda   module * { export * }
17002bfdd6SJan Svoboda }
18002bfdd6SJan Svoboda //--- frameworks/FW.framework/PrivateHeaders/FW_Private.h
19002bfdd6SJan Svoboda #include "One.h"
20002bfdd6SJan Svoboda //--- frameworks/FW.framework/PrivateHeaders/One.h
21002bfdd6SJan Svoboda //--- frameworks/FW.framework/PrivateHeaders/Two.h
22002bfdd6SJan Svoboda 
23002bfdd6SJan Svoboda // Let's check we report the non-imported modular dependencies for a translation unit.
24002bfdd6SJan Svoboda 
25002bfdd6SJan Svoboda //--- from_tu.cdb.json.template
26002bfdd6SJan Svoboda [{
27002bfdd6SJan Svoboda   "file": "DIR/from_tu.m",
28002bfdd6SJan Svoboda   "directory": "DIR",
29f33173acSJan Svoboda   "command": "clang -fmodules -fmodules-cache-path=DIR/cache -F DIR/frameworks -c DIR/from_tu.m -o DIR/from_tu.o"
30002bfdd6SJan Svoboda }]
31002bfdd6SJan Svoboda //--- from_tu.m
32002bfdd6SJan Svoboda #include "FW/FW.h"
33002bfdd6SJan Svoboda #include "FW/Two.h"
34002bfdd6SJan Svoboda 
35002bfdd6SJan Svoboda // RUN: sed -e "s|DIR|%/t|g" %t/from_tu.cdb.json.template > %t/from_tu.cdb.json
36002bfdd6SJan Svoboda // RUN: clang-scan-deps -compilation-database %t/from_tu.cdb.json -format experimental-full > %t/from_tu_result.json
37002bfdd6SJan Svoboda // RUN: cat %t/from_tu_result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t --check-prefixes=CHECK_TU
38002bfdd6SJan Svoboda // CHECK_TU:      {
39002bfdd6SJan Svoboda // CHECK_TU-NEXT:   "modules": [
40002bfdd6SJan Svoboda // CHECK_TU-NEXT:     {
41002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "clang-module-deps": [],
42002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap",
43002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "command-line": [
44002bfdd6SJan Svoboda // CHECK_TU:            ],
45002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "context-hash": "{{.*}}",
46002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "file-deps": [
47*9d4837f4SJan Svoboda // CHECK_TU-NEXT:         "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap",
48*9d4837f4SJan Svoboda // CHECK_TU-NEXT:         "[[PREFIX]]/frameworks/FW.framework/Headers/FW.h"
49002bfdd6SJan Svoboda // CHECK_TU-NEXT:       ],
5068eb3b20SArtem Chikin // CHECK_TU-NEXT:       "link-libraries": [
5168eb3b20SArtem Chikin // CHECK_TU-NEXT:         {
5268eb3b20SArtem Chikin // CHECK_TU-NEXT:           "isFramework": true,
5368eb3b20SArtem Chikin // CHECK_TU-NEXT:           "link-name": "FW"
5468eb3b20SArtem Chikin // CHECK_TU-NEXT:         }
5568eb3b20SArtem Chikin // CHECK_TU-NEXT:       ],
56002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "name": "FW"
57002bfdd6SJan Svoboda // CHECK_TU-NEXT:     },
58002bfdd6SJan Svoboda // CHECK_TU-NEXT:     {
59002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "clang-module-deps": [],
60002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap",
61002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "command-line": [
62002bfdd6SJan Svoboda // CHECK_TU:            ],
63002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "context-hash": "{{.*}}",
64002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "file-deps": [
65002bfdd6SJan Svoboda // CHECK_TU-NEXT:         "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap",
66002bfdd6SJan Svoboda // CHECK_TU-NEXT:         "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/FW_Private.h",
67002bfdd6SJan Svoboda // CHECK_TU-NEXT:         "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/One.h"
68002bfdd6SJan Svoboda // CHECK_TU-NEXT:       ],
6968eb3b20SArtem Chikin // CHECK_TU-NEXT:       "link-libraries": [
7068eb3b20SArtem Chikin // CHECK_TU-NEXT:         {
7168eb3b20SArtem Chikin // CHECK_TU-NEXT:           "isFramework": true,
7268eb3b20SArtem Chikin // CHECK_TU-NEXT:           "link-name": "FW"
7368eb3b20SArtem Chikin // CHECK_TU-NEXT:         }
7468eb3b20SArtem Chikin // CHECK_TU-NEXT:       ],
75002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "name": "FW_Private"
76002bfdd6SJan Svoboda // CHECK_TU-NEXT:     }
77002bfdd6SJan Svoboda // CHECK_TU-NEXT:   ],
78002bfdd6SJan Svoboda // CHECK_TU-NEXT:   "translation-units": [
79002bfdd6SJan Svoboda // CHECK_TU-NEXT:     {
8083902c40SBen Langmuir // CHECK_TU:            "clang-context-hash": "{{.*}}",
81002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "clang-module-deps": [
82002bfdd6SJan Svoboda // CHECK_TU-NEXT:         {
83002bfdd6SJan Svoboda // CHECK_TU-NEXT:           "context-hash": "{{.*}}",
84002bfdd6SJan Svoboda // CHECK_TU-NEXT:           "module-name": "FW"
85002bfdd6SJan Svoboda // CHECK_TU-NEXT:         },
86002bfdd6SJan Svoboda // CHECK_TU-NEXT:         {
87002bfdd6SJan Svoboda // CHECK_TU-NEXT:           "context-hash": "{{.*}}",
88002bfdd6SJan Svoboda // CHECK_TU-NEXT:           "module-name": "FW_Private"
89002bfdd6SJan Svoboda // CHECK_TU-NEXT:         }
90002bfdd6SJan Svoboda // CHECK_TU-NEXT:       ],
91002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "command-line": [
92002bfdd6SJan Svoboda // CHECK_TU:              "-fmodule-file={{.*}}/FW-{{.*}}.pcm"
93002bfdd6SJan Svoboda // CHECK_TU:              "-fmodule-file={{.*}}/FW_Private-{{.*}}.pcm"
94002bfdd6SJan Svoboda // CHECK_TU:            ],
9583902c40SBen Langmuir // CHECK_TU:            "file-deps": [
96002bfdd6SJan Svoboda // CHECK_TU-NEXT:         "[[PREFIX]]/from_tu.m",
97002bfdd6SJan Svoboda // CHECK_TU-NEXT:         "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/Two.h"
98002bfdd6SJan Svoboda // CHECK_TU-NEXT:       ],
99002bfdd6SJan Svoboda // CHECK_TU-NEXT:       "input-file": "[[PREFIX]]/from_tu.m"
100002bfdd6SJan Svoboda // CHECK_TU-NEXT:     }
101002bfdd6SJan Svoboda 
102002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_tu_result.json --module-name=FW > %t/FW.cc1.rsp
103002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_tu_result.json --module-name=FW_Private > %t/FW_Private.cc1.rsp
104002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_tu_result.json --tu-index=0 > %t/tu.rsp
105002bfdd6SJan Svoboda // RUN: %clang @%t/FW.cc1.rsp
106002bfdd6SJan Svoboda // RUN: %clang @%t/FW_Private.cc1.rsp
107002bfdd6SJan Svoboda // RUN: %clang @%t/tu.rsp
108002bfdd6SJan Svoboda 
109002bfdd6SJan Svoboda // Now let's check we report the dependencies for modules as well.
110002bfdd6SJan Svoboda 
111002bfdd6SJan Svoboda //--- from_module.cdb.json.template
112002bfdd6SJan Svoboda [{
113002bfdd6SJan Svoboda   "file": "DIR/from_module.m",
114002bfdd6SJan Svoboda   "directory": "DIR",
115f33173acSJan Svoboda   "command": "clang -fmodules -fmodules-cache-path=DIR/cache -F DIR/frameworks -c DIR/from_module.m -o DIR/from_module.o"
116002bfdd6SJan Svoboda }]
117002bfdd6SJan Svoboda //--- module.modulemap
118002bfdd6SJan Svoboda module Mod { header "Mod.h" }
119002bfdd6SJan Svoboda //--- Mod.h
120002bfdd6SJan Svoboda #include "FW/FW.h"
121002bfdd6SJan Svoboda #include "FW/Two.h"
122002bfdd6SJan Svoboda //--- from_module.m
123002bfdd6SJan Svoboda #include "Mod.h"
124002bfdd6SJan Svoboda 
125002bfdd6SJan Svoboda // RUN: sed -e "s|DIR|%/t|g" %t/from_module.cdb.json.template > %t/from_module.cdb.json
126002bfdd6SJan Svoboda // RUN: clang-scan-deps -compilation-database %t/from_module.cdb.json -format experimental-full > %t/from_module_result.json
127002bfdd6SJan Svoboda // RUN: cat %t/from_module_result.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t --check-prefixes=CHECK_MODULE
128002bfdd6SJan Svoboda // CHECK_MODULE:      {
129002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:   "modules": [
130002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:     {
131002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "clang-module-deps": [],
132002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap",
133002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "command-line": [
134002bfdd6SJan Svoboda // CHECK_MODULE:            ],
135002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "context-hash": "{{.*}}",
136002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "file-deps": [
137*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap",
138*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/frameworks/FW.framework/Headers/FW.h"
139002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       ],
14068eb3b20SArtem Chikin // CHECK_MODULE-NEXT:       "link-libraries": [
14168eb3b20SArtem Chikin // CHECK_MODULE-NEXT:         {
14268eb3b20SArtem Chikin // CHECK_MODULE-NEXT:           "isFramework": true,
14368eb3b20SArtem Chikin // CHECK_MODULE-NEXT:           "link-name": "FW"
14468eb3b20SArtem Chikin // CHECK_MODULE-NEXT:         }
14568eb3b20SArtem Chikin // CHECK_MODULE-NEXT:       ],
146002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "name": "FW"
147002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:     },
148002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:     {
149002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "clang-module-deps": [],
150002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "clang-modulemap-file": "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap",
151002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "command-line": [
152002bfdd6SJan Svoboda // CHECK_MODULE:            ],
153002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "context-hash": "{{.*}}",
154002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "file-deps": [
155002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap",
156002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/FW_Private.h",
157002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/One.h"
158002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       ],
15968eb3b20SArtem Chikin // CHECK_MODULE-NEXT:       "link-libraries": [
16068eb3b20SArtem Chikin // CHECK_MODULE-NEXT:         {
16168eb3b20SArtem Chikin // CHECK_MODULE-NEXT:           "isFramework": true,
16268eb3b20SArtem Chikin // CHECK_MODULE-NEXT:           "link-name": "FW"
16368eb3b20SArtem Chikin // CHECK_MODULE-NEXT:         }
16468eb3b20SArtem Chikin // CHECK_MODULE-NEXT:       ],
165002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "name": "FW_Private"
166002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:     },
167002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:     {
168002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "clang-module-deps": [
169002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         {
170002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:           "context-hash": "{{.*}}",
171002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:           "module-name": "FW"
172002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         },
173002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         {
174002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:           "context-hash": "{{.*}}",
175002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:           "module-name": "FW_Private"
176002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         }
177002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       ],
178002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "clang-modulemap-file": "[[PREFIX]]/module.modulemap",
179002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "command-line": [
180002bfdd6SJan Svoboda // CHECK_MODULE:              "-fmodule-file={{.*}}/FW-{{.*}}.pcm"
181002bfdd6SJan Svoboda // CHECK_MODULE:              "-fmodule-file={{.*}}/FW_Private-{{.*}}.pcm"
182002bfdd6SJan Svoboda // CHECK_MODULE:            ],
183002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "context-hash": "{{.*}}",
184002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "file-deps": [
185*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/module.modulemap"
186*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/Mod.h",
187002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap",
188002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap",
189*9d4837f4SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/Two.h"
190002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       ],
19168eb3b20SArtem Chikin // CHECK_MODULE-NEXT:       "link-libraries": [],
192002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "name": "Mod"
193002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:     }
194002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:   ],
195002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:   "translation-units": [
196002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:     {
19783902c40SBen Langmuir // CHECK_MODULE:            "clang-context-hash": "{{.*}}",
198002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "clang-module-deps": [
199002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         {
200002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:           "context-hash": "{{.*}}",
201002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:           "module-name": "Mod"
202002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         }
203002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       ],
204002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "command-line": [
205002bfdd6SJan Svoboda // CHECK_MODULE:            ],
20683902c40SBen Langmuir // CHECK_MODULE:            "file-deps": [
207002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:         "[[PREFIX]]/from_module.m"
208002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       ],
209002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:       "input-file": "[[PREFIX]]/from_module.m"
210002bfdd6SJan Svoboda // CHECK_MODULE-NEXT:     }
211002bfdd6SJan Svoboda 
212002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_module_result.json --module-name=FW > %t/FW.cc1.rsp
213002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_module_result.json --module-name=FW_Private > %t/FW_Private.cc1.rsp
214002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_module_result.json --module-name=Mod > %t/Mod.cc1.rsp
215002bfdd6SJan Svoboda // RUN: %deps-to-rsp %t/from_module_result.json --tu-index=0 > %t/tu.rsp
216002bfdd6SJan Svoboda // RUN: %clang @%t/FW.cc1.rsp
217002bfdd6SJan Svoboda // RUN: %clang @%t/FW_Private.cc1.rsp
218002bfdd6SJan Svoboda // RUN: %clang @%t/Mod.cc1.rsp
219002bfdd6SJan Svoboda // RUN: %clang @%t/tu.rsp
220