Skip to content

Commit 31fe4fc

Browse files
authored
[clang][DependencyScanning] Fix StableDir and DependencyActionController Setup for By-Name Lookups (#11822)
llvm#164345 merge conflict resolution with `next` introduced two issues. 1. It did not correctly pick up the logic to set `StableDir` for `CompilerInstanceWithContext`. 2. It did not correctly setup the action controller for CAS. This PR fixes both issues.
1 parent 181d9a7 commit 31fe4fc

File tree

3 files changed

+132
-3
lines changed

3 files changed

+132
-3
lines changed

clang/lib/Tooling/DependencyScanning/DependencyScannerImpl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ bool CompilerInstanceWithContext::initialize(DiagnosticConsumer *DC) {
978978
Worker.Service, Worker.DepFS, false, nullptr))
979979
return false;
980980

981-
llvm::SmallVector<StringRef> StableDirs = getInitialStableDirs(CI);
981+
StableDirs = getInitialStableDirs(CI);
982982
auto MaybePrebuiltModulesASTMap =
983983
computePrebuiltModulesASTMap(CI, StableDirs);
984984
if (!MaybePrebuiltModulesASTMap)

clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,9 @@ DependencyScanningTool::computeDependenciesByNameWithContext(
265265
StringRef ModuleName, const llvm::DenseSet<ModuleID> &AlreadySeen,
266266
LookupModuleOutputCallback LookupModuleOutput) {
267267
FullDependencyConsumer Consumer(AlreadySeen);
268-
CallbackActionController Controller(LookupModuleOutput);
268+
auto Controller = createActionController(LookupModuleOutput);
269269
llvm::Error Result = Worker.computeDependenciesByNameWithContextOrError(
270-
ModuleName, Consumer, Controller);
270+
ModuleName, Consumer, *Controller);
271271
if (Result)
272272
return std::move(Result);
273273

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
// UNSUPPORTED: target=powerpc64-ibm-aix{{.*}}
2+
// REQUIRES: ondisk_cas
3+
4+
// RUN: rm -rf %t
5+
// RUN: split-file %s %t
6+
7+
//--- module.modulemap
8+
module root { header "root.h" }
9+
module direct { header "direct.h" }
10+
module transitive { header "transitive.h" }
11+
module root1 { header "root1.h"}
12+
//--- root.h
13+
#include "direct.h"
14+
#include "root/textual.h"
15+
16+
//--- root1.h
17+
#include "direct.h"
18+
19+
//--- direct.h
20+
#include "transitive.h"
21+
//--- transitive.h
22+
// empty
23+
24+
//--- root/textual.h
25+
// This is here to verify that the "root" directory doesn't clash with name of
26+
// the "root" module.
27+
28+
//--- cdb.json.template
29+
[{
30+
"file": "",
31+
"directory": "DIR",
32+
"command": "clang -fmodules -fmodules-cache-path=DIR/cache -I DIR -x c"
33+
}]
34+
35+
// RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
36+
// RUN: clang-scan-deps -compilation-database %t/cdb.json \
37+
// RUN: -cas-path %t/cas -format experimental-include-tree-full -module-names=root,root1,direct > %t/result.json
38+
// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
39+
40+
// CHECK: {
41+
// CHECK-NEXT: "modules": [
42+
// CHECK-NEXT: {
43+
// CHECK-NEXT: "cache-key": "[[DIRECT_CACHE_KEY:llvmcas://[[:xdigit:]]+]]"
44+
// CHECK-NEXT: "cas-include-tree-id": "[[LEFT_ROOT_ID:llvmcas://[[:xdigit:]]+]]"
45+
// CHECK-NEXT: "clang-module-deps": [
46+
// CHECK-NEXT: {
47+
// CHECK-NEXT: "context-hash": "{{.*}}",
48+
// CHECK-NEXT: "module-name": "transitive"
49+
// CHECK-NEXT: }
50+
// CHECK-NEXT: ],
51+
// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",
52+
// CHECK-NEXT: "command-line": [
53+
// CHECK: "-fmodule-file-cache-key"
54+
// CHECK-NEXT: "{{.*transitive-.*\.pcm}}"
55+
// CHECK-NEXT: "[[TRANSITIVE_CACHE_KEY:llvmcas://[[:xdigit:]]+]]"
56+
// CHECK: ],
57+
// CHECK-NEXT: "context-hash": "{{.*}}",
58+
// CHECK-NEXT: "file-deps": [
59+
// CHECK-NEXT: "[[PREFIX]]/module.modulemap"
60+
// CHECK-NEXT: "[[PREFIX]]/direct.h"
61+
// CHECK-NEXT: ],
62+
// CHECK-NEXT: "link-libraries": [],
63+
// CHECK-NEXT: "name": "direct"
64+
// CHECK-NEXT: },
65+
// CHECK-NEXT: {
66+
// CHECK-NEXT: "cache-key": "[[ROOT_CACHE_KEY:llvmcas://[[:xdigit:]]+]]"
67+
// CHECK-NEXT: "cas-include-tree-id": "[[ROOT_ROOT_ID:llvmcas://[[:xdigit:]]+]]"
68+
// CHECK-NEXT: "clang-module-deps": [
69+
// CHECK-NEXT: {
70+
// CHECK-NEXT: "context-hash": "{{.*}}",
71+
// CHECK-NEXT: "module-name": "direct"
72+
// CHECK-NEXT: }
73+
// CHECK-NEXT: ],
74+
// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",
75+
// CHECK-NEXT: "command-line": [
76+
// CHECK: "-fmodule-file-cache-key"
77+
// CHECK-NEXT: "{{.*direct-.*\.pcm}}"
78+
// CHECK-NEXT: "[[DIRECT_CACHE_KEY]]"
79+
// CHECK: ],
80+
// CHECK-NEXT: "context-hash": "{{.*}}",
81+
// CHECK-NEXT: "file-deps": [
82+
// CHECK-NEXT: "[[PREFIX]]/module.modulemap"
83+
// CHECK-NEXT: "[[PREFIX]]/root.h"
84+
// CHECK-NEXT: "[[PREFIX]]/root/textual.h"
85+
// CHECK-NEXT: ],
86+
// CHECK-NEXT: "link-libraries": [],
87+
// CHECK-NEXT: "name": "root"
88+
// CHECK-NEXT: },
89+
// CHECK-NEXT: {
90+
// CHECK-NEXT: "cache-key": "[[ROOT_CACHE_KEY:llvmcas://[[:xdigit:]]+]]"
91+
// CHECK-NEXT: "cas-include-tree-id": "[[ROOT_ROOT_ID:llvmcas://[[:xdigit:]]+]]"
92+
// CHECK-NEXT: "clang-module-deps": [
93+
// CHECK-NEXT: {
94+
// CHECK-NEXT: "context-hash": "{{.*}}",
95+
// CHECK-NEXT: "module-name": "direct"
96+
// CHECK-NEXT: }
97+
// CHECK-NEXT: ],
98+
// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",
99+
// CHECK-NEXT: "command-line": [
100+
// CHECK: "-fmodule-file-cache-key"
101+
// CHECK-NEXT: "{{.*direct-.*\.pcm}}"
102+
// CHECK-NEXT: "[[DIRECT_CACHE_KEY]]"
103+
// CHECK: ],
104+
// CHECK-NEXT: "context-hash": "{{.*}}",
105+
// CHECK-NEXT: "file-deps": [
106+
// CHECK-NEXT: "[[PREFIX]]/module.modulemap"
107+
// CHECK-NEXT: "[[PREFIX]]/root1.h"
108+
// CHECK-NEXT: ],
109+
// CHECK-NEXT: "link-libraries": [],
110+
// CHECK-NEXT: "name": "root1"
111+
// CHECK-NEXT: },
112+
// CHECK-NEXT: {
113+
// CHECK-NEXT: "cache-key": "[[TRANSITIVE_CACHE_KEY]]"
114+
// CHECK-NEXT: "cas-include-tree-id": "[[TRANSITIVE_ROOT_ID:llvmcas://[[:xdigit:]]+]]"
115+
// CHECK-NEXT: "clang-module-deps": [],
116+
// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap",
117+
// CHECK-NEXT: "command-line": [
118+
// CHECK: ],
119+
// CHECK-NEXT: "context-hash": "{{.*}}",
120+
// CHECK-NEXT: "file-deps": [
121+
// CHECK-NEXT: "[[PREFIX]]/module.modulemap"
122+
// CHECK-NEXT: "[[PREFIX]]/transitive.h"
123+
// CHECK-NEXT: ],
124+
// CHECK-NEXT: "link-libraries": [],
125+
// CHECK-NEXT: "name": "transitive"
126+
// CHECK-NEXT: }
127+
// CHECK-NEXT: ],
128+
// CHECK-NEXT: "translation-units": []
129+
// CHECK-NEXT: }

0 commit comments

Comments
 (0)