summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/unittests/ClangdTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/unittests/ClangdTests.cpp')
-rw-r--r--clang-tools-extra/clangd/unittests/ClangdTests.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/unittests/ClangdTests.cpp b/clang-tools-extra/clangd/unittests/ClangdTests.cpp
index ab88c8925da..99fd41e29ab 100644
--- a/clang-tools-extra/clangd/unittests/ClangdTests.cpp
+++ b/clang-tools-extra/clangd/unittests/ClangdTests.cpp
@@ -1063,6 +1063,27 @@ TEST_F(ClangdVFSTest, FallbackWhenWaitingForCompileCommand) {
Field(&CodeCompletion::Scope, "ns::"))));
}
+TEST_F(ClangdVFSTest, TestStackOverflow) {
+ MockFSProvider FS;
+ ErrorCheckingDiagConsumer DiagConsumer;
+ MockCompilationDatabase CDB;
+ ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
+
+ const char *SourceContents = R"cpp(
+ constexpr int foo() { return foo(); }
+ static_assert(foo());
+ )cpp";
+
+ auto FooCpp = testPath("foo.cpp");
+ FS.Files[FooCpp] = SourceContents;
+
+ Server.addDocument(FooCpp, SourceContents);
+ ASSERT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
+ // check that we got a constexpr depth error, and not crashed by stack
+ // overflow
+ EXPECT_TRUE(DiagConsumer.hadErrorInLastDiags());
+}
+
} // namespace
} // namespace clangd
} // namespace clang
OpenPOWER on IntegriCloud