summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/test/clang-tidy/empty-database.cpp3
-rw-r--r--clang-tools-extra/test/clang-tidy/empty-database/compile_commands.json4
-rw-r--r--clang/lib/Tooling/InterpolatingCompilationDatabase.cpp6
-rw-r--r--clang/lib/Tooling/Tooling.cpp2
4 files changed, 12 insertions, 3 deletions
diff --git a/clang-tools-extra/test/clang-tidy/empty-database.cpp b/clang-tools-extra/test/clang-tidy/empty-database.cpp
new file mode 100644
index 00000000000..6b409ea29a9
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/empty-database.cpp
@@ -0,0 +1,3 @@
+// RUN: not clang-tidy -p %S/empty-database %s 2>&1 | FileCheck %s
+
+// CHECK: LLVM ERROR: Cannot chdir into ""!
diff --git a/clang-tools-extra/test/clang-tidy/empty-database/compile_commands.json b/clang-tools-extra/test/clang-tidy/empty-database/compile_commands.json
new file mode 100644
index 00000000000..395d13dc090
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/empty-database/compile_commands.json
@@ -0,0 +1,4 @@
+[{
+ "directory":"",
+ "file":"/tmp/","arguments":[]
+}]
diff --git a/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp b/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp
index 8b1030f3607..a467d1318e2 100644
--- a/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp
+++ b/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp
@@ -150,7 +150,8 @@ struct TransferableCommand {
// spelling of each argument; re-rendering is lossy for aliased flags.
// E.g. in CL mode, /W4 maps to -Wall.
auto OptTable = clang::driver::createDriverOptTable();
- Cmd.CommandLine.emplace_back(OldArgs.front());
+ if (!OldArgs.empty())
+ Cmd.CommandLine.emplace_back(OldArgs.front());
for (unsigned Pos = 1; Pos < OldArgs.size();) {
using namespace driver::options;
@@ -243,7 +244,8 @@ private:
}
// Otherwise just check the clang executable file name.
- return llvm::sys::path::stem(CmdLine.front()).endswith_lower("cl");
+ return !CmdLine.empty() &&
+ llvm::sys::path::stem(CmdLine.front()).endswith_lower("cl");
}
// Map the language from the --std flag to that of the -x flag.
diff --git a/clang/lib/Tooling/Tooling.cpp b/clang/lib/Tooling/Tooling.cpp
index 68760ef7569..a7c64866a48 100644
--- a/clang/lib/Tooling/Tooling.cpp
+++ b/clang/lib/Tooling/Tooling.cpp
@@ -481,7 +481,7 @@ int ClangTool::run(ToolAction *Action) {
if (OverlayFileSystem->setCurrentWorkingDirectory(
CompileCommand.Directory))
llvm::report_fatal_error("Cannot chdir into \"" +
- Twine(CompileCommand.Directory) + "\n!");
+ Twine(CompileCommand.Directory) + "\"!");
// Now fill the in-memory VFS with the relative file mappings so it will
// have the correct relative paths. We never remove mappings but that
OpenPOWER on IntegriCloud