diff options
Diffstat (limited to 'clang-tools-extra/clangd/unittests/ClangdTests.cpp')
-rw-r--r-- | clang-tools-extra/clangd/unittests/ClangdTests.cpp | 21 |
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 |