|
13 | 13 | #include "clang/Frontend/CompilerInstance.h"
|
14 | 14 | #include "clang/Frontend/FrontendAction.h"
|
15 | 15 | #include "clang/Frontend/FrontendActions.h"
|
| 16 | +#include "clang/Tooling/ArgumentsAdjusters.h" |
16 | 17 | #include "clang/Tooling/CompilationDatabase.h"
|
17 | 18 | #include "clang/Tooling/Tooling.h"
|
18 | 19 | #include "llvm/ADT/STLExtras.h"
|
| 20 | +#include "llvm/ADT/StringRef.h" |
19 | 21 | #include "llvm/Support/Path.h"
|
20 | 22 | #include "llvm/Support/TargetRegistry.h"
|
21 | 23 | #include "llvm/Support/TargetSelect.h"
|
22 | 24 | #include "gtest/gtest.h"
|
23 | 25 | #include <algorithm>
|
24 | 26 | #include <string>
|
| 27 | +#include <vector> |
25 | 28 |
|
26 | 29 | namespace clang {
|
27 | 30 | namespace tooling {
|
@@ -429,6 +432,37 @@ TEST(ClangToolTest, NoDoubleSyntaxOnly) {
|
429 | 432 | EXPECT_EQ(SyntaxOnlyCount, 1U);
|
430 | 433 | }
|
431 | 434 |
|
| 435 | +TEST(ClangToolTest, NoOutputCommands) { |
| 436 | + FixedCompilationDatabase Compilations("/", {"-save-temps", "-save-temps=cwd", |
| 437 | + "--save-temps", |
| 438 | + "--save-temps=somedir"}); |
| 439 | + |
| 440 | + ClangTool Tool(Compilations, std::vector<std::string>(1, "/a.cc")); |
| 441 | + Tool.mapVirtualFile("/a.cc", "void a() {}"); |
| 442 | + |
| 443 | + std::unique_ptr<FrontendActionFactory> Action( |
| 444 | + newFrontendActionFactory<SyntaxOnlyAction>()); |
| 445 | + |
| 446 | + const std::vector<llvm::StringRef> OutputCommands = {"-save-temps"}; |
| 447 | + bool Ran = false; |
| 448 | + ArgumentsAdjuster CheckSyntaxOnlyAdjuster = |
| 449 | + [&OutputCommands, &Ran](const CommandLineArguments &Args, |
| 450 | + StringRef /*unused*/) { |
| 451 | + for (llvm::StringRef Arg : Args) { |
| 452 | + for (llvm::StringRef OutputCommand : OutputCommands) |
| 453 | + EXPECT_FALSE(Arg.contains(OutputCommand)); |
| 454 | + } |
| 455 | + Ran = true; |
| 456 | + return Args; |
| 457 | + }; |
| 458 | + |
| 459 | + Tool.clearArgumentsAdjusters(); |
| 460 | + Tool.appendArgumentsAdjuster(getClangSyntaxOnlyAdjuster()); |
| 461 | + Tool.appendArgumentsAdjuster(CheckSyntaxOnlyAdjuster); |
| 462 | + Tool.run(Action.get()); |
| 463 | + EXPECT_TRUE(Ran); |
| 464 | +} |
| 465 | + |
432 | 466 | TEST(ClangToolTest, BaseVirtualFileSystemUsage) {
|
433 | 467 | FixedCompilationDatabase Compilations("/", std::vector<std::string>());
|
434 | 468 | llvm::IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFileSystem(
|
|
0 commit comments