zyounan created this revision. zyounan added reviewers: sammccall, nridge. Herald added subscribers: kadircet, arphaman. Herald added a project: All. zyounan requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
`clang::runWithSufficientStackSpace` requires the address of the initial stack bottom to prevent potential stack overflows. Fixes https://github.com/clangd/clangd/issues/1745. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D158967 Files: clang-tools-extra/clangd/ParsedAST.cpp clang-tools-extra/clangd/test/infinite-instantiation.test Index: clang-tools-extra/clangd/test/infinite-instantiation.test =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/infinite-instantiation.test @@ -0,0 +1,13 @@ +// RUN: cp %s %t.cpp +// RUN: not clangd -check=%t.cpp 2>&1 | FileCheck -strict-whitespace %s + +// CHECK: [template_recursion_depth_exceeded] + +template <typename... T> +constexpr int f(T... args) { + return f(0, args...); +} + +int main() { + auto i = f(); +} Index: clang-tools-extra/clangd/ParsedAST.cpp =================================================================== --- clang-tools-extra/clangd/ParsedAST.cpp +++ clang-tools-extra/clangd/ParsedAST.cpp @@ -44,6 +44,7 @@ #include "clang/Basic/LangOptions.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/SourceManager.h" +#include "clang/Basic/Stack.h" #include "clang/Basic/TokenKinds.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/CompilerInvocation.h" @@ -388,6 +389,7 @@ std::unique_ptr<clang::CompilerInvocation> CI, llvm::ArrayRef<Diag> CompilerInvocationDiags, std::shared_ptr<const PreambleData> Preamble) { + clang::noteBottomOfStack(); trace::Span Tracer("BuildAST"); SPAN_ATTACH(Tracer, "File", Filename);
Index: clang-tools-extra/clangd/test/infinite-instantiation.test =================================================================== --- /dev/null +++ clang-tools-extra/clangd/test/infinite-instantiation.test @@ -0,0 +1,13 @@ +// RUN: cp %s %t.cpp +// RUN: not clangd -check=%t.cpp 2>&1 | FileCheck -strict-whitespace %s + +// CHECK: [template_recursion_depth_exceeded] + +template <typename... T> +constexpr int f(T... args) { + return f(0, args...); +} + +int main() { + auto i = f(); +} Index: clang-tools-extra/clangd/ParsedAST.cpp =================================================================== --- clang-tools-extra/clangd/ParsedAST.cpp +++ clang-tools-extra/clangd/ParsedAST.cpp @@ -44,6 +44,7 @@ #include "clang/Basic/LangOptions.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/SourceManager.h" +#include "clang/Basic/Stack.h" #include "clang/Basic/TokenKinds.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/CompilerInvocation.h" @@ -388,6 +389,7 @@ std::unique_ptr<clang::CompilerInvocation> CI, llvm::ArrayRef<Diag> CompilerInvocationDiags, std::shared_ptr<const PreambleData> Preamble) { + clang::noteBottomOfStack(); trace::Span Tracer("BuildAST"); SPAN_ATTACH(Tracer, "File", Filename);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits