[PATCH] D63579: [clang-scan-deps] print the dependencies to stdout and remove the need to use -MD options in the CDB
Alexandre Ganea via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 20 08:15:48 PDT 2019
aganea added inline comments.
================
Comment at: clang/tools/clang-scan-deps/ClangScanDeps.cpp:32
+class DependencyCollectorFactory {
+public:
----------------
Do you envision future uses for this factory?
================
Comment at: clang/tools/clang-scan-deps/ClangScanDeps.cpp:50
+ std::unique_ptr<DependencyOutputOptions> Opts) override {
+ std::unique_lock<std::mutex> LockGuard(SharedLock);
+ return std::make_shared<DependencyPrinter>(std::move(Opts), SharedLock,
----------------
Do you need the blocking behavior here? You're simply passing the Lock by reference, but not using the stream that it protects.
================
Comment at: clang/tools/clang-scan-deps/ClangScanDeps.cpp:73
+ std::unique_ptr<DependencyOutputOptions> Opts;
+ std::mutex &Lock;
+ raw_ostream &OS;
----------------
I think it would be better to keep together the lock with what it protects (thus my question above about the factory).
What about:
```
class SharedStream {
public:
SharedStream(raw_ostream &OS) : OS(OS) {}
template <typename Fn> void applyLocked(Fn f) {
std::unique_lock<std::mutex> LockGuard(Lock);
f(OS);
OS.flush();
}
private:
std::mutex Lock;
raw_ostream &OS;
};
/// Prints out all of the gathered dependencies into one output stream instead
/// of using the output dependency file.
class DependencyPrinter : public DependencyFileGenerator {
public:
DependencyPrinter(std::unique_ptr<DependencyOutputOptions> Opts,
SharedStream &S)
: DependencyFileGenerator(*Opts), Opts(std::move(Opts)), S(S) {}
void finishedMainFile(DiagnosticsEngine &Diags) override {
S.applyLocked([](raw_ostream &OS) { outputDependencyFile(OS); });
}
private:
std::unique_ptr<DependencyOutputOptions> Opts;
SharedStream &S;
};
```
WDYT?
================
Comment at: clang/tools/clang-scan-deps/ClangScanDeps.cpp:115
+ Opts->Targets = {"clang-scan-deps dependency"};
+ Compiler.addDependencyCollector(
+ DepCollectorFactory.createDependencyCollector(std::move(Opts)));
----------------
..and in that case here we would say: `Compiler.addDependencyCollector(std::make_shared<DependencyPrinter>(DepOpts, SharedOS))`
================
Comment at: clang/tools/clang-scan-deps/ClangScanDeps.cpp:245
+ // Print out the dependency results to STDOUT by default.
+ DependencyPrinter::Factory DepPrintFactory(llvm::outs());
unsigned NumWorkers =
----------------
...and then here: `SharedStream S(llvm::outs);`.
Repository:
rC Clang
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D63579/new/
https://reviews.llvm.org/D63579
More information about the cfe-commits
mailing list