Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[clang][deps] Give the fake file a unique name in by-module-name scans
When scanning dependencies of a module, the command line we're given doesn't have an input file, which the driver needs to be happy. We've been creating a fake in-memory input file named after the module. However, this can hide files/directories on the actual filesystem, leading to errors. This patch works around that issue by generating a unique file name, which won't collide with the actual file system. We could also change the driver APIs so that we're able to specify an "assumed" input file. This would be more work, though, since the driver assumes the input name comes from the actual command-line. Depends on D140176. Reviewed By: artemcm Differential Revision: https://reviews.llvm.org/D140177
- Loading branch information
1 parent
ba55666
commit 8e9f62e
Showing
5 changed files
with
102 additions
and
111 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 0 additions & 12 deletions
12
clang/test/ClangScanDeps/Inputs/modules_cdb_by_mod_name.json
This file was deleted.
Oops, something went wrong.
12 changes: 0 additions & 12 deletions
12
clang/test/ClangScanDeps/Inputs/modules_cdb_clangcl_by_mod_name.json
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
// UNSUPPORTED: target=powerpc64-ibm-aix{{.*}} | ||
|
||
// RUN: rm -rf %t | ||
// RUN: split-file %s %t | ||
|
||
//--- module.modulemap | ||
module root { header "root.h" } | ||
module direct { header "direct.h" } | ||
module transitive { header "transitive.h" } | ||
//--- root.h | ||
#include "direct.h" | ||
#include "root/textual.h" | ||
//--- direct.h | ||
#include "transitive.h" | ||
//--- transitive.h | ||
// empty | ||
|
||
//--- root/textual.h | ||
// This is here to verify that the "root" directory doesn't clash with name of | ||
// the "root" module. | ||
|
||
//--- cdb.json.template | ||
[{ | ||
"file": "", | ||
"directory": "DIR", | ||
"command": "clang -fmodules -fmodules-cache-path=DIR/cache -I DIR -x c" | ||
}] | ||
|
||
// 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 -module-name=root > %t/result.json | ||
// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s | ||
|
||
// CHECK: { | ||
// CHECK-NEXT: "modules": [ | ||
// CHECK-NEXT: { | ||
// CHECK-NEXT: "clang-module-deps": [ | ||
// CHECK-NEXT: { | ||
// CHECK-NEXT: "context-hash": "{{.*}}", | ||
// CHECK-NEXT: "module-name": "transitive" | ||
// CHECK-NEXT: } | ||
// CHECK-NEXT: ], | ||
// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", | ||
// CHECK-NEXT: "command-line": [ | ||
// CHECK: ], | ||
// CHECK-NEXT: "context-hash": "{{.*}}", | ||
// CHECK-NEXT: "file-deps": [ | ||
// CHECK-NEXT: "[[PREFIX]]/direct.h" | ||
// CHECK-NEXT: "[[PREFIX]]/module.modulemap" | ||
// CHECK-NEXT: ], | ||
// CHECK-NEXT: "name": "direct" | ||
// CHECK-NEXT: }, | ||
// CHECK-NEXT: { | ||
// CHECK-NEXT: "clang-module-deps": [ | ||
// CHECK-NEXT: { | ||
// CHECK-NEXT: "context-hash": "{{.*}}", | ||
// CHECK-NEXT: "module-name": "direct" | ||
// CHECK-NEXT: } | ||
// CHECK-NEXT: ], | ||
// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", | ||
// CHECK-NEXT: "command-line": [ | ||
// CHECK: ], | ||
// CHECK-NEXT: "context-hash": "{{.*}}", | ||
// CHECK-NEXT: "file-deps": [ | ||
// CHECK-NEXT: "[[PREFIX]]/module.modulemap" | ||
// CHECK-NEXT: "[[PREFIX]]/root.h" | ||
// CHECK-NEXT: "[[PREFIX]]/root/textual.h" | ||
// CHECK-NEXT: ], | ||
// CHECK-NEXT: "name": "root" | ||
// CHECK-NEXT: }, | ||
// CHECK-NEXT: { | ||
// CHECK-NEXT: "clang-module-deps": [], | ||
// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", | ||
// CHECK-NEXT: "command-line": [ | ||
// CHECK: ], | ||
// CHECK-NEXT: "context-hash": "{{.*}}", | ||
// CHECK-NEXT: "file-deps": [ | ||
// CHECK-NEXT: "[[PREFIX]]/module.modulemap" | ||
// CHECK-NEXT: "[[PREFIX]]/transitive.h" | ||
// CHECK-NEXT: ], | ||
// CHECK-NEXT: "name": "transitive" | ||
// CHECK-NEXT: } | ||
// CHECK-NEXT: ], | ||
// CHECK-NEXT: "translation-units": [] | ||
// CHECK-NEXT: } |
This file was deleted.
Oops, something went wrong.